首页 > 解决方案 > QWidget 多种样式无法正常工作

问题描述

当我尝试在一个小部件上设置多个样式时,只应用第一个样式。

我想删除当我将鼠标悬停在 QToolButton 上时出现的边框以及菜单中的向下箭头。

基本上,该按钮包含一个设置动画速度的菜单,例如视频播放器。

这是我的代码:

ui->tool_speed_button->setStyleSheet("border: none; QToolButton::down-arrow {image: none;}");

这是边框和向下箭头:

我的 QToolButton

无论我将该代码片段放在我的代码中,还是直接在 Qt 设计器上设置样式,在这两种情况下它仍然只应用第一个样式。

如何将两种样式应用于同一个对象?

标签: qtqt5qtstylesheetsqt5.10

解决方案


如果您要将样式应用于小部件下的多个对象或子对象,则需要将参数分组到要应用它的对象。

在您的样式表字符串中,您留下"border: none;"悬空但也有一个QToolButton. 仅当您仅将样式应用于tool_speed_button.

尝试这样的事情:

ui->tool_speed_button->setStyleSheet("QWidget{border: none; }QToolButton::down-arrow {image: none;}");

您将需要替换Qwidgettool_speed_button. 在 Qt 中启动项目时,可以在设计器文件中检查 MainWindow 的样式表,以获取有关如何格式化样式表的更多示例。

在你的情况下,你会这样做:

ui->tool_speed_button->setStyleSheet("QToolButton::down-arrow {border: none;image: none;}");

编辑

只是想为我的答案中的第一个样式表示例的含义添加一个解释:

在样式字符串中,第一组QWidget{border:none;}将样式应用于任何QWidget属于tool_speed_button.

QToolButton::down-arrow {image: none;}仅将样式应用于QToolButton属于tool_speed_button并且也是类型down-arrow(这是 的属性QToolButton)的任何内容。由于tool_speed_buttonis aQToolButton本身,它将大括号中指定的样式应用于自身及其所有子项。

编辑:

我错了。正如问题所暗示的那样,您可以在大括号下没有分组的样式表属性。悬空属性仅适用于小部件中的所有相关对象。


推荐阅读