QWidget多种样式无法正常工作

时间:2018-06-19 16:30:11

标签: qt qt5 qtstylesheets qt5.10

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

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

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

这是我的代码:

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

这是边框和向下箭头:

我的QToolButton

无论是将代码段放入代码中,还是直接在Qt Designer上设置样式,这两种情况都仅应用第一种样式。

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

1 个答案:

答案 0 :(得分:0)

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

在样式表字符串中,您悬垂了"border: none;",但也拥有QToolButton的样式。仅当您仅将样式应用于tool_speed_button时,您才能d0这样的事情。

尝试这样的事情:

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

您需要将Qwidget替换为tool_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_button本身就是QToolButton,因此将括号中指定的样式应用于自身及其所有子元素。

编辑:

我错了。您可以将样式表属性悬挂在一起,而不必将大括号括起来,就像问题所暗示的那样。悬空属性仅适用于小部件中的所有相关对象。