如何更改QtCreator/QtDesigner的颜色配置

问题描述 投票:0回答:1

左侧 UI 上选定的小部件将在右侧小部件列表中具有灰色背景颜色(就像当前行的突出显示一样)。

颜色太相似,我很难区分。

如何将其更改为其他颜色,例如红、蓝、绿?

此处为示例图片:

Example image

qt qt-creator qt-designer
1个回答
3
投票

Qt Designer 是一个标准的 Qt 应用程序。因此,它支持一些命令行选项,包括

-stylesheet

-stylesheet= stylesheet,设置应用程序styleSheet。该值必须是包含样式表的文件的路径。

这允许为应用程序设置自定义 QSS,与

QApplication.setStyleSheet()
的做法类似,不同之处在于命令行选项仅接受文件,而
setStyleSheet()
只接受字符串(样式表的内容)。

现在,一个简单的解决方案是创建一个文件,根据

QSS 文档
,为树视图设置
selection-background-color
(以及带有 selection-color 的文本的适当对比色);例如:

QTreeView {
    selection-background-color: green;
    selection-color: white;
}

然后运行 Designer,如下所示:

> designer -stylesheet customstyle.qss

但这并不正确。 Qt 样式表 (QSS) 始终传播到子级,这意味着任何树视图都将使用这些选择颜色,包括正在设计的小部件。你显然不希望这样。

幸运的是,Qt 开发人员为大多数硬编码小部件(包括 Designer 子部件)设置了对象名称。

对象检查器是一个用作 QDockWidget 的自定义设计器插件表单,具有

qt_designer_objectinspector_dock
对象名称集(请参阅[1]注释);这意味着您可以使用适当的选择器类型来实现:

QDockWidget#qt_designer_objectinspector_dock QTreeView {
    selection-background-color: green;
    selection-color: white;
}

上面的意思是:将给定的属性(所选项目的背景和文本颜色)应用于任何 QTreeView,该 QTreeView 是 QDockWidget 的直接子级,其对象名称等于

qt_designer_objectinspector_dock

请注意,对于某些样式,上述属性可能还不够。
在这种情况下,您可以使用特定的子控件添加相关规则;理论上,这样做将确保所选项目始终具有这些颜色,无论底层样式如何:

QDockWidget#qt_designer_objectinspector_dock QTreeView {
    selection-background-color: green;
    selection-color: white;
}

QDockWidget#qt_designer_objectinspector_dock QTreeView::item:selected {
    background: green;
    color: white;
}

请注意,Qt Creator 使用略有不同的对象命名方法。在这种情况下,选择器将是

QDockWidget#ObjectInspectorDockWidget
。因此,如果您愿意,您可以使用最终适用于它们的“集中式”qss 文件,使用逗号分隔具有共同规则的选择器:

QDockWidget#qt_designer_objectinspector_dock QTreeView,
QDockWidget#ObjectInspectorDockWidget QTreeView {
    selection-background-color: green;
    selection-color: white;
}

QDockWidget#qt_designer_objectinspector_dock QTreeView::item:selected,
QDockWidget#ObjectInspectorDockWidget QTreeView::item:selected {
    background: green;
    color: white;
}

请记住,QSS 规则是基于上下文的:在极少数情况下,您正在设计一个带有上面命名的 QDockWidget 的 QMainWindow,其中包含 QTreeView,将应用颜色。您可以考虑在规则中添加更多限制,例如:

QDockWidget#qt_designer_objectinspector_dock #qt_designer_objectinspector QTreeView,
QDockWidget#ObjectInspectorDockWidget #ObjectInspector QTreeView {
    ...
}

实际上,仅使用专有名称将是一个更简单的解决方案。

[1]:设计器工具窗口是实际的小部件,它们被重新设置父级并设置为 QDockWidgets 的小部件。私有

addToolWindows()
(在
qttools/src/designer/src/designer/mainwindow.cpp
中)通过将
_tool
附加到原始设计器工具小部件对象名称来设置扩展坞的对象名称。

© www.soinside.com 2019 - 2024. All rights reserved.