使用枚举属性的Qt样式表选择器

4
我正在尝试为按下的QToolButton设置不同的视觉样式,具体取决于它是否显示菜单。
在我的代码中,具有菜单的工具按钮会将它们的popupMode属性设置为QToolButton :: InstantPopup(值为2),而没有关联菜单的按钮则保留默认值(QToolButton :: DelayedPopup,值为0)。
我尝试使用该属性作为选择器的不同方式,但只有最后一个(QToolButton[popupMode ="2"])有效。
/* Not working */
QToolButton[popupMode=InstantPopup]:pressed,
QToolButton[popupMode="InstantPopup"]:pressed,
QToolButton[popupMode="QToolButton::InstantPopup"]:pressed,
QToolButton[popupMode="QToolButton--InstantPopup"]:pressed,
QToolButton[qproperty-popupMode=InstantPopup]:pressed,
QToolButton[qproperty-popupMode="InstantPopup"]:pressed,
QToolButton[qproperty-popupMode="QToolButton::InstantPopup"]:pressed,
QToolButton[qproperty-popupMode="QToolButton--InstantPopup"]:pressed,
QToolButton[qproperty-popupMode="2"]:pressed
{
    background-color: blue;
}
/* Working */
QToolButton[popupMode="2"]:pressed,
{
    background-color: red;
}

这是选项的汇编,我已经单独测试过它们。

文档提到,如果枚举是使用Q_ENUM声明的(如ToolButtonPopupMode),那么应该按名称而不是按值引用它,但正如上面所看到的,这对选择器来说似乎不是这种情况。


问题:是否可能在样式表中使用这种枚举名称作为选择器,而不是枚举值?


注意:我知道其他选项,例如具有更具表现力的、与Qt无关的自定义属性,也可以完成工作。我只是好奇是否能以所述方式使用枚举。

1个回答

0

QToolButton[popupMode=InstantPopup]:pressed 是正确的。

对于枚举类,请使用 setProperty(<property_name>, QVariant::fromValue(<enum_value>))

对于枚举,请使用 setProperty(<property_name>, <enum_value>)

但如果您想要动态更改样式,您需要重新加载样式。 请了解有关 QStyle::unpolishQStyle::polish 的内容。


谢谢您的回复,但似乎缺少一些信息才能使其正常工作。我尝试了几次,例如手动使用 setProperty 设置属性(虽然我认为这会使解决方案变得复杂,但我仍然尝试了),在创建后进行未完成/完成操作,当按钮被按下时,当相关菜单即将显示时,都没有起作用。请问您能否提供更多详细信息以帮助我解决问题?感谢您的时间! - cbuchart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接