因此,我们有一个QFormLayout
,其中objectName
设置为"formLayout"
。
此布局由两个QLabel
和QLineEdit
和对象组成:
formLayout = QtGui.QFormLayout()
formLayout.setObjectName("formLayout")
label1 = QtGui.QLabel()
label2 = QtGui.QLabel()
lineEdit1 = QtGui.QLineEdit()
lineEdit2 = QtGui.QLineEdit()
formLayout.addRow(label1, lineEdit1)
formLayout.addRow(label2, lineEdit2)
现在我想用一个外部的QLabel
/QLineEdit
的样式。我想是这样的:
不幸的是这没用。我知道我可以将formLayout
中的所有QLabel
设置为相同的对象名:
label1 = QtGui.setObjectName("formLayoutLabel")
label2 = QtGui.setObjectName("formLayoutLabel")
把他们的风格设置成这样:
QLabel#formLayoutLabel{
/*set some styles for QLabel in the formLayout*/
}
我的问题:
如何在不使用object name属性的情况下更改位于外部.qss
内父布局/小部件(示例QLabel
和QLineEdit
)中的特定类型的所有小部件的样式(在示例formLayout
)中?在
QLayout
派生类不是QWidget
派生的,这将它们完全排除在Qt样式系统之外。在解决这个问题的一种方法是用一个小部件来支持每个布局,也就是说,不要让一个小部件有多个布局。这样,属于布局的所有小部件(即标签)也是同一小部件的子部件,您可以在其中插入样式表:
因此,如果你有一个小部件,比如说,有四个布局,你应该在里面放四个子部件,然后把每个布局放在其中一个里面(然后按照你先前布局布局的方式来布局部件)。在
另一种解决方法包括子类化小部件,并在样式表中按类型名选择它们。例如,如果布局中有特殊标签,请使用最简单的
^{pr2}$QLabel
子类:然后仅将该类型的标签添加到布局中:
并在样式表中引用它们:
这应该是有效的,但是可能会变得单调乏味,并且需要大量的工作(而且,您可能最终会得到很多类型,这仅仅是为了选择样式表)。在
相关问题 更多 >
编程相关推荐