2016-01-26 36 views
0

我想为我所有的按钮设置一个全局样式表。 这样做是为了像下面这样一个特定的按钮,按预期工作:全局样式表没有完全工作

button->setStyleSheet(QString("QPushButton:focus {") + 
            "outline: 0;" + 
            "background-color: #" + BUTTON_HIGHLIGHT_BG_COLOR + "; " + 
            "color: #"   + BUTTON_HIGHLIGHT_TXT_COLOR + "; " + 
           "}" 
        ); 

但是,如果我让全球性的,就像这样:

qApp->setStyleSheet(QString("QPushButton:focus {") + 
            "outline: 0;" + 
            "background-color: #" + BUTTON_HIGHLIGHT_BG_COLOR + "; " + 
            "color: #"   + BUTTON_HIGHLIGHT_TXT_COLOR + "; " + 
          "}" 
        ); 

聚焦按钮得到正确的字体颜色,但他们似乎没有背景(尽管我为它们设置的背景与主布局的背景不同)。

BUTTON_HIGHLIGHT_BG_COLORBUTTON_HIGHLIGHT_TXT_COLOR是颜色的字符串(例如“FF0000”)

可能是因为它适用于特定窗口小部件,但全局失败?

更新:

我跟着@ ThorngardSO答案,并最终通过改变解决了这个问题:

stackedWidget->setStyleSheet("background-color: white;"); 

到:

stackedWidget->setStyleSheet("QStackedWidget { background-color: white; }"); 

这是在加载画面(第一屏)

回答

3

你应该试着将它缩小尽可能:

  • 是这是全局样式表中唯一的规则?如果不是,则删除所有其他规则以进行测试,看看会发生什么。
  • 清楚地了解按钮的widget级别(也许它是groupbox的子级,它本身就是主窗口的子级),然后检查:
  • 在层次结构中执行任何这些小部件样式表设置?如果是的话,删除这些样式表用于测试目的,并看看会发生什么。
  • 您是否随时在任何层次中的任何小部件上调用setPalette()setAutoFillBackground()等函数(或在设计器中设置自动填充背景属性)?如果是的话,删除这些电话,看看会发生什么。
+0

1.我只有2个全球规则,缩小到1,没有帮助。 2.它是一个“groupbox”的孩子,它是一个主窗口的孩子。 3.'groupbox'本身有一个样式表 - 我删除它,另一个是'QLabel'的孩子有一个样式表 - 将其删除。没有帮助。 4.第5号。对我来说奇怪的是,它可以在'button-> setStylesheet ...'上工作,'但不能在'qApp-> setStylesheet'上工作。 –

+0

它工作!在加载屏幕上我有一个'stackedWidget-> setStyleSheet'。我看到现在问题来自哪里。谢谢 –

+0

很高兴它成功了 - 样式表的级联/继承通常会导致起初看起来很奇怪的行为。 – ThorngardSO

2

不是这是你的问题m,但是你在运行时从零碎中组装那个常量字符串。不要这样做。相反,只需简单地将它们放在一起,就可以简单地在C和C++中连接字符串文字。

qApp->setStyleSheet(QStringLiteral(
    "QPushButton:focus {" 
    "outline: 0;" 
    "background-color: #" BUTTON_HIGHLIGHT_BG_COLOR "; " 
    "color: #" BUTTON_HIGHLIGHT_TXT_COLOR "; " 
    "}" 
)); 

如果你想要的颜色,在运行时更换,使用%3'-取代:

qApp->setStyleSheet(QStringLiteral(
    "QPushButton:focus {" 
    "outline: 0;" 
    "background-color: #%1; " 
    "color: #%2; " 
    "}" 
).arg(background).arg(foreground)); 
+0

即使我写''background-color:red;“',它不起作用。还要注意'font-color'起作用。 –

+0

无论如何,这不是一个问题的答案......应该是一个评论 –

+0

@AlaaM如果只有评论可能是那么长:) –