2014-10-09 14 views
7

Я использую QCheckBox в QTableWidgetCellУстановить виджет цвет фона

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); 

Как я могу изменить фон ячейки?

ответ

7

Код:

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

работает хорошо, но вам нужно задать стиль для каждого контейнера виджета добавить в таблицу:

Так что для того, чтобы увидеть изменения, Вам понадобится следующий код:

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); 

И результат будет:

enter image description here

+0

Он работает. Но только последний фон изменил ячейку, задав фон. Предыдущий фон клеток восстановлен. – Ufx

+0

@Ufx Посмотреть мои правки –

1

Вы должны попробовать это:

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

Если вы хотите, чтобы указать его в более общем плане, писать ClassType в CSS, чтобы указать, какой класс в иерархии должен обрабатывать флаг. Это может выглядеть примерно так, то:

QWidget { background-color: red; } 
+0

Это не работает. – Ufx

+0

@ufx ЧТО не работает? Как это выглядит сейчас? – msrd0

+0

Он работает, как будто он вообще не работает. Никакой реакции. – Ufx

1

Если вы хотите изменить фон ячейки, а не виджет, используйте setBackground() метод:

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 

В этом случае вся ваша клетка будет красной (без белого линии вокруг флажка).

+0

Это не работает для меня – Ufx

+0

ui-> tableWidget_2-> item (0, 0) -> setBackground (Qt :: red); является опасным, потому что .setCellWidget не создает элемент в этой ячейке, который возвращает нулевой указатель – Phiber

Смежные вопросы