布局中控件的哪个样式表选择器?

2024-10-02 02:44:55 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我们有一个QFormLayout,其中objectName设置为"formLayout"。 此布局由两个QLabelQLineEdit和对象组成:

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的样式。我想是这样的:

^{pr2}$

不幸的是这没用。我知道我可以将formLayout中的所有QLabel设置为相同的对象名:

label1 = QtGui.setObjectName("formLayoutLabel")    
label2 = QtGui.setObjectName("formLayoutLabel")

把他们的风格设置成这样:

QLabel#formLayoutLabel{
    /*set some styles for QLabel in the formLayout*/
}

我的问题:

如何在不使用object name属性的情况下更改位于外部.qss内父布局/小部件(示例QLabelQLineEdit)中的特定类型的所有小部件的样式(在示例formLayout)中?在


Tags: 对象样式布局qtguilabel2label1setobjectnameqlabel
1条回答
网友
1楼 · 发布于 2024-10-02 02:44:55

QLayout派生类不是QWidget派生的,这将它们完全排除在Qt样式系统之外。在

解决这个问题的一种方法是用一个小部件来支持每个布局,也就是说,不要让一个小部件有多个布局。这样,属于布局的所有小部件(即标签)也是同一小部件的子部件,您可以在其中插入样式表:

QLabel {
    /*set some styles for QLabel in the formLayout*/
}

因此,如果你有一个小部件,比如说,有四个布局,你应该在里面放四个子部件,然后把每个布局放在其中一个里面(然后按照你先前布局布局的方式来布局部件)。在

另一种解决方法包括子类化小部件,并在样式表中按类型名选择它们。例如,如果布局中有特殊标签,请使用最简单的QLabel子类:

^{pr2}$

然后仅将该类型的标签添加到布局中:

label = Layout1Label()
layout.addWidget(label)

并在样式表中引用它们:

Layout1Label {
    /*set some styles for all labels in layout*/
}

这应该是有效的,但是可能会变得单调乏味,并且需要大量的工作(而且,您可能最终会得到很多类型,这仅仅是为了选择样式表)。在

相关问题 更多 >

    热门问题