PyQt - QGridLayout 设置第一行样式表

PyQt - QGridLayout set first Row stylesheet

我正在生成一个网格布局并按如下方式添加小部件:

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

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

我想在第一行(不是行内的小部件)有一个 background-color,以指示网格的 header .

我想要的结果:

您可以在设置样式表时使用 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。

要在单个单元格的整个范围内设置背景颜色,您必须向 QGridLayout 添加一个中间 QWidget,设置 属性,向中间 QWidget 添加一个中间布局,然后,您可以在 table 中添加您想查看的小部件。

如果没有中间小部件,如果将 "coloredcell" 属性 设置为实际小部件本身(在我的示例中为 QPushButton),只会更改此小部件的背景颜色,不会更改整个 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()