2

我使用稍微修改过的“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 似乎都不是问题

4

2 回答 2

1

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

虽然我们从未真正支持大多数 QMacStyle 的自定义调色板角色,但我认为我们应该允许在其上设置自定义调色板,即使它在某些情况下会中断。Jens 对 QTBUG-32067 的评论

于 2013-11-07T16:10:47.017 回答
0

请参阅QApplication::setpalette 的文档说明

注意:某些样式并不使用所有绘图的调色板,例如,如果它们使用本机主题引擎。Windows XP、Windows Vista 和 Mac OS X 样式就是这种情况。

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

applicationToRun -style=windows

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


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

于 2013-11-05T17:46:57.703 回答