1

我有一个具有透明背景的 QDockWidget,但我想在它浮动时更改背景颜色或背景图像。qt 样式表看起来没有伪状态来告诉您它们是否浮动,所以我想知道:这可能吗?

4

2 回答 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 回答