Russian Qt Forum
Ноябрь 25, 2024, 07:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableWidget::setCellWidget как потом докопаться до виджета.  (Прочитано 9307 раз)
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().
Записан
registrationfedser87
Гость
« Ответ #1 : Февраль 19, 2010, 07:16 »

Тебе нужно либо использовать делегаты, либо приводить QWidget,возвращаемый методом cellWidget() к QCheckBox,например так:
Код:
QWidget *w = tableWidget->item( i, j );
if (w)
{
  QCheckBox *cb = qobject_cast<QCheckBox *>(w);
  if (cb)
  {
    //TODO:твои манипуляции
  }
}
Записан
Павел_F.
Гость
« Ответ #2 : Февраль 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 возвращает состояние итема ячейки а не виджета в ней. Поэтому все они не "отмеченные".
« Последнее редактирование: Февраль 19, 2010, 09:22 от Павел_F. » Записан
n4ela
Гость
« Ответ #3 : Февраль 20, 2010, 01:23 »

Спасибо, то что нужно. Сделал через setCheckState
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.373 секунд. Запросов: 20.