2014-10-09 4 views
0

Я использую QCheckBox в QTableWidgetCellКак получить виджет от 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); 

Я не могу получить эту QCheckBox

QTableWidgetItem *item  = ui->table->item(0, 0); 

QWidget   *widget = dynamic_cast<QWidget *>(item); // Widget==0 

QHBoxLayout  *layout = dynamic_cast<QHBoxLayout *>(widget->layout()); 
QCheckBox  *checkBox = dynamic_cast<QCheckBox *>(layout->widget()); 

ответ

2

Я думаю, что вам нужно сделать следующее:

QCheckBox *chkBox = qobject_cast<QCheckBox*>(_ui->tableBonus1Lines->cellWidget(0, 0)); 
+0

Не работает. chkBox равен 0. – Ufx

+0

@Ufx, потому что вы установили виджет ячейки 'QWidget', который содержит' QCheckBox'. Почему бы вам не добавить флажок напрямую, не обернув его другим «QWidget»? – vahancho

+0

Я просто попытался использовать 'QCheckBox * checkBox = new QCheckBox(); table-> setCellWidget (0, 0, checkBox); '. Не работает. chkBox равно 0. – Ufx

0

You может получить CheckBox с выравниванием по центру на этот код:

try { 
    QWidget *mainWidget = qobject_cast<QWidget *>(pTableWidget->cellWidget(row, column); 
    QHBoxLayout *hBoxLayout = qobject_cast<QHBoxLayout *>(mainWidget->layout()); 
    QLayoutItem *item = hBoxLayout->layout()->takeAt(0); 
    QWidget* widget = item->widget(); 
    QCheckBox *chechBox = qobject_cast<QCheckBox *>(widget); 
    return chechBox; 
} catch (...) { 
    return NULL; 
}