qt style QPalette :: windowText颜色在应用程序启动后恢复

时间:2013-11-03 01:02:57

标签: c++ qt styling osx-mavericks

我使用'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的问题

3 个答案:

答案 0 :(得分:1)

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

  

虽然我们从未真正支持大多数自定义调色板角色   QMacStyle我认为我们应该允许在它上面设置自定义调色板   如果它在某些情况下中断Jens comment on QTBUG-32067

答案 1 :(得分:0)

请参阅documentation notes of QApplication::setpalette

  

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

所以你可以通过运行不同风格的应用程序来检查这一点,方法是从shell启动你的应用程序:

applicationToRun -style=windows

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

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

答案 2 :(得分:0)

如果您将QStyle子类化以实现自定义样式,则可能是您的自定义样式仅在窗口小部件具有焦点时才设置正确的颜色(并且默认情况下正在滑动)。

您是否尝试使用指定前景色而不是使用调色板的样式表?这些都是猜测。