qt 样式 QPalette::窗口文本颜色在应用程序启动后恢复



我使用稍微修改的'cleanlooks'样式创建了一个Qt应用程序。我尝试使用以下代码设置 WindowText,但更改没有坚持。当我打开应用程序时,它会以正确的文本颜色在后台打开,当我单击应用程序并将其带到前台时,文本恢复为黑色,我无法弄清楚原因。有谁知道为什么会这样或我应该如何设置窗口文本?

#include <QtGui/QApplication>
#include <QtGui/QPalette>
#include <QtGui/QColor>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPalette p;
    p.setBrush(QPalette::WindowText, QColor(255,0,0));
    a.setStyle("cleanlooks");
    a.setPalette(p);
    MainWindow w;
    w.show();
    return a.exec();
}

我正在使用OSX 10.9和Qt 4.8.6


更新 1

我在运行从源代码构建的Qt 4.8.5的Windows 7机器上测试了代码,但没有发生此问题。我似乎对MacOS 10.9或Qt 4.8.6都没有问题

我认为您的答案已经被报告(并确认)为 QT 错误 (QTBUG-32067)。

虽然我们从未真正支持大多数 QMacStyle 我认为我们应该允许在其上设置自定义调色板,甚至 如果在某些情况下它破裂。詹斯评论 QTBUG-32067

请参阅 QApplication::setpalette 的文档注释。

: 某些样式不会对所有绘图使用调色板,对于 例如,如果他们使用本机主题引擎。情况就是这样 适用于 Windows XP、Windows Vista 和 Mac OS X 样式。

因此,您可以通过运行不同样式的应用程序来检查这一点,方法是从 shell 启动应用程序,如下所示:

applicationToRun -style=windows

或者通过使用其他样式,docs说:motif,windows和platinum,但这取决于安装的Qt及其插件。


编辑:up我没有注意到您正在通过代码设置样式。无论如何,验证您正在执行的样式是否受当前机器上的Qt支持,检查a.setStyle("cleanlooks");是否返回有效的样式(错误时返回null)。我会尝试所有样式(列出可用的表格QStyleFactory::keys())。

最新更新