Vous pouvez utiliser les propriétés QObjects de distinguer entre les cellules lors de la mise une feuille de style.
Il est possible d'utiliser par ex.
setProperty("coloredcell", true)
sur le widget ajouté à la QGridLayout en combinaison avec
parentWidget.setStyleSheet("*[coloredcell=\"true\"] {background-color:rgb(" + QString::number((rand() % 255)) + "," + QString::number((rand() % 255)) + "," + QString::number((rand() % 255)) + ");}");
où le parentWidget est le Widget contenant le QGridLayout. Pour avoir la couleur d'arrière-plan dans la plage complète d'une seule cellule, vous devez ajouter un QWidget intermédiaire à QGridLayout, définir la propriété, ajouter une mise en page intermédiaire au QWidget intermédiaire et y ajouter votre widget. vouloir voir dans le tableau. Sans le widget intermédiaire, si vous définissez la propriété "coloredcell" sur le widget lui-même (dans mon exemple, QPushButton), seule la couleur de fond de ce widget sera modifiée, pas la couleur de la cellule QGridLayout entière. C'est pourquoi nous en avons besoin.
Exemple de code (non testé):
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()
Cela ressemble vous essayez de faire ce qu'un 'QTableWidget' est mieux adapté pour, ou' QTableView'. Si vous définissez l'arrière-plan des widgets dans un QGridLayout, cela dépend du widget ... vous pouvez le faire avec 'setStyleSheet' pour chacun de ces widgets. – phyatt
http://www.qtcentre.org/threads/24233-QTableWidget-change-header-background-color-QHeaderView – phyatt
Est-il possible d'ajouter des widgets à QTableView? – user1767754