PyQt - QGridLayout设置第一个Row样式表

时间:2015-09-08 15:40:04

标签: qt pyqt qtstylesheets

我正在生成一个Gridlayout并添加Widgets,如下所示:

    elements = QGroupBox()
    self.grid = QGridLayout(elements)

    #Arrange Row Elements
    self.grid.addWidget(subjectName, 0, 0)
    self.grid.addWidget(statusName, 0, 1)

我想为第一行(不是行内的小部件)设置 background-color ,以指示网格的标题。

我想要的结果: enter image description here

1 个答案:

答案 0 :(得分:2)

您可以使用QObjects属性在设置样式表时区分单元格。

可以使用例如

setProperty( "coloredcell", true ) 
小部件上的

一起添加到QGridLayout
parentWidget.setStyleSheet("*[coloredcell=\"true\"] {background-color:rgb(" + QString::number((rand() % 255)) + "," + QString::number((rand() % 255)) + "," + QString::number((rand() % 255)) + ");}");

其中parentWidget是包含QGridLayout的Widget。

要将backgroundcolor放在单个单元格的整个范围内,您必须向QGridLayout添加一个中间QWidget,设置属性,将中间布局添加到中间QWidget,然后在此中添加您想要的小部件在表中看到。

如果没有中间窗口小部件,则设置" coloredcell"实际小部件本身的属性(在我的示例中,QPushButton),只会更改此小部件的backgroundcolor,而不是整个QGridLayout单元格的颜色。这就是我们需要它的原因。

示例代码(未经测试):

widget = QWidget()
gridLayout = QGridLayout(widget)
for i in range(0,3):
    for j in range(0,3):
        intermediateWidget = QWidget(widget)
        intermediateWidget.setProperty("coloredcell", true)
        intermediateLayout = QGridLayout( intermediateWidget )
        button = QPushButton( QString( "Row %1 Col %2" ).arg(i).arg(j) )
        gridLayout.addWidget(intermediateWidget, i, j)

widget.setStyleSheet("*[coloredcell=\"true\"] {background-color:rgb(255,0,0);}")
widget.show()