我有一个具有透明背景的 QDockWidget,但我想在它浮动时更改背景颜色或背景图像。qt 样式表看起来没有伪状态来告诉您它们是否浮动,所以我想知道:这可能吗?
问问题
1422 次
2 回答
3
找到了解决方案。在代码中添加以下连接:
connect(knobDock, &QDockWidget::topLevelChanged, [&] (bool isFloating)
{
if (isFloating)
{
setAttribute(Qt::WA_TranslucentBackground, false);
setAttribute(Qt::WA_NoSystemBackground, false);
}
});
这将导致停靠小部件在停靠时使用样式表中指定的任何背景,但停靠时它将是透明的(即显示主窗口背景)。
于 2014-09-30T20:36:24.017 回答
0
您可以使用自定义属性来执行此操作。
感谢@phyatt提供指向Dynamic Properties 和 Stylesheets的链接。
要在自定义类中声明自定义属性,您可以在 .cpp 中编写:
setProperty("customPropertyName", 1);
或在 .h 中(不要忘记定义和实现使用的 get/set 访问方法):
Q_PROPERTY( int customPropertyName, READ getCustomPropertyName, WRITE setCustomPropertyName);
在您的全局样式表文件中,您可以使用自定义属性的状态,如下所示:
.YourClass[customPropertyName="1"] {
background-color: transparent;
}
.YourClass[customPropertyName="2"] {
background-color: black;
}
在设置新属性值后,还需要重新加载对象实例的样式表,因为样式表不会自动重新计算:
object->style()->unpolish(tstFrame);
object->style()->polish(tstFrame);
object->update();
或者:
object->setStyleSheet("/* */");
于 2014-09-30T19:49:40.237 回答