You need to enable JavaScript to run this app. Qt如何在同一条setStyleSheet语句中配置窗体样式和QPushButton悬停样式
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 03:24:01