Russian Qt Forum

Qt => Общие вопросы => Тема начата: n4ela от Февраль 19, 2010, 04:24



Название: QTableWidget::setCellWidget как потом докопаться до виджета.
Отправлено: n4ela от Февраль 19, 2010, 04:24
Вобщем встраиваю в ячейку QCheckBox
Код
C++ (Qt)
tableWidget->setCellWidget( index, i, new QCheckBox() );
И потом мне надо найти все отмеченные чекбоксы в таблице.
Проверяю так:
Код
C++ (Qt)
   for ( int i = 0; i < tableWidget->rowCount(); i++ )
       for ( int j = 0; j < tableWidget->columnCount(); j++ )
           if ( tableWidget->item( i, j )->checkState() == Qt::Checked )
               qDebug() << "ololo";
 
Но почему то все чекбоксы считаются Unchecked.

Подумал может если я вставляю чекбоксы с помощью setCellWidget, то и проверять я их должен не через item, а через cellWidget. Но cellWidget возвращает QWidget в котором нету метода checkState().


Название: Re: QTableWidget::setCellWidget как потом докопаться до виджета.
Отправлено: registrationfedser87 от Февраль 19, 2010, 07:16
Тебе нужно либо использовать делегаты, либо приводить QWidget,возвращаемый методом cellWidget() к QCheckBox,например так:
Код:
QWidget *w = tableWidget->item( i, j );
if (w)
{
  QCheckBox *cb = qobject_cast<QCheckBox *>(w);
  if (cb)
  {
    //TODO:твои манипуляции
  }
}


Название: Re: QTableWidget::setCellWidget как потом докопаться до виджета.
Отправлено: Павел_F. от Февраль 19, 2010, 09:19
Для checkBox  есть более изящное решение. У QTableWidgetItem есть void QTableWidgetItem::setFlags ( Qt::ItemFlags flags ). Во флаги нужно добавить Qt::ItemIsUserCheckable. Тогда итем будет "чекабельным". Также у QTableWidgetItem есть методы void QTableWidgetItem::setCheckState ( Qt::CheckState state ) и Qt::CheckState QTableWidgetItem::checkState () const.

PS: А Qt::CheckState QTableWidgetItem::checkState () const возвращает состояние итема ячейки а не виджета в ней. Поэтому все они не "отмеченные".


Название: Re: QTableWidget::setCellWidget как потом докопаться до виджета.
Отправлено: n4ela от Февраль 20, 2010, 01:23
Спасибо, то что нужно. Сделал через setCheckState