qt - QDockWidget float /关闭按钮悬停图像

标签 qt qt4 qtstylesheets qdockwidget

有没有办法在样式表中更改 QDockWidget(Qt 4.8)的悬停/按下图标?我正在使用这种样式来更改默认状态的按钮图像:

QDockWidget{
    font-weight: bold;
    titlebar-close-icon: url(:/icons/ui-dock-close-off.png);
    titlebar-normal-icon: url(:/icons/ui-dock-float-off.png);
}

我尝试了几种不同的方法,但它们似乎都不起作用。
QDockWidget::float-button:hover{
    image: url(:/icons/icons/ui-dock-float-hover.png);
}

QAbstractButton#qt_dockwidget_floatbutton{
    image: url(:/icons/icons/ui-dock-float-hover.png);
}

最佳答案

我只需要自己完成这项工作。我发现 QDockWidget 的默认标题栏的 qss 行为在行为上非常奇怪。

底部是对我有用的最终结果,但首先有一些解释要做。

首先是使用“图像”设置来设置图标不允许设置图标的大小,最终会被缩小到最小。因此,我无法按照我想要的方式使用“titlebar-close-icon: none”。

第二个是您将无法将“QDockWidget::close-button:hover”的“image”设置与“titlebar-close-icon”设置配对使用,因为“hover”图像将被绘制在后面图标。这可能是您在给定示例中没有看到预期结果的原因。

我最终在下面做的是将“空白”(完全透明)png 设置为图标,这意味着我可以使用“图标大小”设置来控制按钮的大小。然后我为按钮设置“图像”,并使用“悬停”子设置来处理我突出显示的图标。

最后,我发现(至少在我的环境中)除非小部件 float 然后重新停靠,否则图标更改不会保持不变,此时图标全部存在并考虑在内。为了解决这个问题,我所做的只是在应用样式后调用 setFloating(True) 和 setFloating(False) 。没有可见的闪烁或我能看到的任何东西,所以我继续。

QDockWidget { 
    background: rgb(36,38,41);
    titlebar-close-icon: url(:icons/blank.png);
    titlebar-normal-icon: url(:icons/blank.png);
}

QDockWidget::title {
    background: transparent; 
    color: transparent; 
    text-align: center;
    border: none;
}

QDockWidget::close-button, QDockWidget::float-button {
    border: none;
    background: transparent;
    icon-size: 12px;
    padding: 1px;
}

QDockWidget::float-button {
    image: url(:icons/undock.png);
}

QDockWidget::close-button {
    image: url(:icons/close.png);
}

QDockWidget::float-button:hover {
    image: url(:icons/undock_hover.png);
}

QDockWidget::close-button:hover {
    image: url(:icons/close_hover.png);
}

关于qt - QDockWidget float /关闭按钮悬停图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32145080/

相关文章:

c++ - "QApplication app(argc, argv)"试图做什么?

qt - 在 Mac 中使用 QJSON - 遇到一些问题

python - 如何知道要保存的文件类型,使用 QFileDialog

c++ - 来自 QML 的 Qt::QueuedConnection

python - 中央小部件的 pyqt 设计器和布局

xml - 如何将文本文件包含到 qt 应用程序中?

c++ - 合并两个 Qt/C++ 项目 : redefinition errors

python - 我在组织 PyQt5 Gui 代码时遇到问题

python - PyQt5 - 如何为相同的元素设置不同的样式表?

qt - 如何通过 setStyleSheet() 添加样式而不会丢失 Qt 中的原始样式?