QDockWidget在浮动时更改背景颜色

时间:2014-09-30 19:33:11

标签: qt qtstylesheets qdockwidget

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

2 个答案:

答案 0 :(得分:3)

找到解决方案。在代码中添加以下连接:

    connect(knobDock, &QDockWidget::topLevelChanged, [&] (bool isFloating)
    {
        if (isFloating)
        {
            setAttribute(Qt::WA_TranslucentBackground, false);
            setAttribute(Qt::WA_NoSystemBackground, false); 
        }
    });

这将导致停靠窗口小部件在浮动停靠时使用样式表中指定的任何背景,但在停靠时它将是透明的(即显示主窗口背景)。

答案 1 :(得分:0)

您可以使用自定义属性执行此操作。

感谢@phyatt指向Dynamic Properties and 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("/* */");