2014-10-09 17 views
7

I QCheckBox verwenden in QTableWidgetCellSet-Widget Hintergrundfarbe

QWidget *widget = new QWidget(); 
QCheckBox *checkBox = new QCheckBox(); 
QHBoxLayout *layout = new QHBoxLayout(widget); 
layout->addWidget(checkBox); 
layout->setAlignment(Qt::AlignCenter); 
layout->setContentsMargins(0, 0, 0, 0); 
widget->setLayout(layout); 
table->setCellWidget(0, 0, widget); 

Wie kann ich Zelle Hintergrund ändern?

Antwort

7

Der Code:

widget->setStyleSheet("background-color: red"); 

funktioniert gut, aber Sie brauchen, um den Stil für jeden Container-Widget setzen Sie Ihre Tabelle hinzufügen:

Also, um die Änderung, die Sie den folgenden Code benötigen, um zu sehen:

QWidget *widget = new QWidget(); 
widget->setStyleSheet("background-color: red"); 
QCheckBox *checkBox = new QCheckBox(); 
QHBoxLayout *layout = new QHBoxLayout(widget); 
layout->addWidget(checkBox); 
layout->setAlignment(Qt::AlignCenter); 
layout->setContentsMargins(0, 0, 0, 0); 
widget->setLayout(layout); 

QWidget *widget2 = new QWidget(); 
widget2->setStyleSheet("background-color: red"); 
QCheckBox *checkBox2 = new QCheckBox(); 
QHBoxLayout *layout2 = new QHBoxLayout(widget2); 
layout2->addWidget(checkBox2); 
layout2->setAlignment(Qt::AlignCenter); 
layout2->setContentsMargins(0, 0, 0, 0); 
widget2->setLayout(layout); 

ui->tableWidget->setCellWidget(0, 0, widget); 
ui->tableWidget->setCellWidget(0, 1, widget2); 

Und das Ergebnis wird sein:

enter image description here

+0

Es funktioniert. Aber nur die zuletzt veränderte Hintergrundzelle hat Hintergrund gesetzt. Vorherige Zellen Hintergründe wiederhergestellt. – Ufx

+0

@Ufx Siehe meine Änderungen –

1

Sie sollten dies versuchen:

checkBox->setStyleSheet("background-color: red;"); 

Wenn Sie wollen, dass es spezifizieren allgemeinen, schreiben die classtype in der CSS, um anzuzeigen, welche Klasse in der Hierarchie sollte unter der Flagge behandeln. Dies könnte so etwas wie dieses dann aussehen:

QWidget { background-color: red; } 
+0

Dies funktioniert nicht. – Ufx

+0

@ufx WAS funktioniert nicht? Wie sieht es jetzt aus? – msrd0

+0

Es funktioniert, als ob es überhaupt nicht funktioniert. Keine Reaktion. – Ufx

1

Wenn Sie ändern Hintergrund Zelle wollen, nicht ein Widget, verwenden setBackground() Methode:

QCheckBox *checkBox = new QCheckBox("example"); 
QWidget *widget = new QWidget(); 
QHBoxLayout *layout = new QHBoxLayout(widget); 
layout->addWidget(checkBox); 
layout->setAlignment(Qt::AlignCenter); 
layout->setContentsMargins(0, 0, 0, 0); 
widget->setLayout(layout); 
ui->tableWidget_2->setCellWidget(0,0,widget); 
ui->tableWidget_2->item(0, 0)->setBackground(Qt::red);//this line should be 

In diesem Fall alle Ihre Zelle wird rot sein (ohne weiße Zeilen um Kontrollkästchen).

+0

Es funktioniert nicht für mich – Ufx

+0

ui-> tableWidget_2-> Element (0, 0) -> setBackground (Qt :: rot); ist gefährlich, weil .setCellWidget kein Element in dieser Zelle erstellt, die Nullzeiger zurückgibt – Phiber