Qt如何在同一条setStyleSheet语句中配置窗体样式和QPushButton悬停样式
问题原因
你的写法不符合Qt样式表(QSS)的语法规则,未包裹在选择器块内的全局属性不能和带选择器的规则直接拼接,会导致QSS解析器识别失败,所以两类样式无法同时生效。
正确写法
你需要把窗体自身的样式也放到对应的选择器包裹的块内,选择器可以用你当前窗体的类名(如果要精准控制只作用于当前窗体,也可以用对象名选择器),示例代码如下:
写法1:C++11及以上版本( raw string 写法更易读)
{ ui->setupUi(this); // 此处的MainWindow替换为你自己的窗体类名即可 this->setStyleSheet(R"( MainWindow { background: rgb(49, 54, 59); color: rgb(220, 221, 218); selection-color: lightyellow; selection-background-color: darkcyan; } QPushButton::hover { color: darkcyan; border: 2px solid grey; border-radius: 1px; } )"); }
写法2:兼容低版本C++的字符串拼接写法
{ ui->setupUi(this); // 此处的MainWindow替换为你自己的窗体类名即可 this->setStyleSheet("MainWindow { background: rgb(49, 54, 59); color: rgb(220, 221, 218); selection-color: lightyellow; selection-background-color: darkcyan; }" "QPushButton::hover { color: darkcyan; border: 2px solid grey; border-radius: 1px; }"); }
补充说明
- 如果你只想让窗体样式作用于当前窗体不影响其他同类型控件,可以给当前窗体设置对象名:
this->setObjectName("MyWindow");,然后把选择器换成#MyWindow即可。 - 如果希望窗体的颜色属性同时继承给所有子控件,可以把窗体部分的选择器换成
*,不过通常不推荐这么做,容易出现样式污染。
内容的提问来源于stack exchange,提问作者user16454011
相关产品推荐
相关产品推荐

