左侧 UI 上选定的小部件将在右侧小部件列表中具有灰色背景颜色(就像当前行的突出显示一样)。
颜色太相似,我很难区分。
如何将其更改为其他颜色,例如红、蓝、绿?
此处为示例图片:
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
附加到原始设计器工具小部件对象名称来设置扩展坞的对象名称。