Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Martiro от Октябрь 25, 2007, 16:19



Название: Проблема с QTable (Qt 3.3.3)
Отправлено: Martiro от Октябрь 25, 2007, 16:19
Вставляю в таблицу Чекбоксы:
Код:
...
for (int i=0; iNumRows; ++i)
    {
      chb = new QCheckBox("check", table);
      table->setCellWidget(i, 0, chb);
    }
...

теперь делаю кнопку, при нажатии которой отмечаются все чекбоксы:
Код:
...
for (int i=0; iNumRows; ++i)
    {
    QCheckBox * checkBx = new QCheckBox(table->cellWidget(i,0));
    checkBx->setChecked(true);
    }
...

почему checkBx не присваивается элемент из таблицы (chb)?
может кто-нибудь подскажет как сделать?

Пробовал с QCheckTableItem, тоже не могу разобраться как отмечать элементы в строках... Элементы создаю, а указатель на них найти не могу.

ОС МСВС, QT 3.3.3


Название: Re: Проблема с QTable (Qt 3.3.3)
Отправлено: pastor от Октябрь 25, 2007, 16:23
Вместо (это явный бред, ты создаешь новый виджет и для него устанавливаешь парент виждет из ячейки(i,0). Таким образом ты не обратишься к виджету в ячейке)

Код:
for (int i=0; iNumRows; ++i) 
    {
    QCheckBox * checkBx = new QCheckBox(table->cellWidget(i,0));
    checkBx->setChecked(true);
    }

напиши

Код:
for (int i=0; iNumRows; ++i) 
    {
    QCheckBox * checkBx = qobject_cast<QCheckBox *>(table->cellWidget(i,0));
    checkBx->setChecked(true);
    }


Название: Re: Проблема с QTable (Qt 3.3.3)
Отправлено: Martiro от Октябрь 25, 2007, 16:37
а что такое "qobject_cast"? при компиляции ругается...
(QT 3.3.3)


Название: Re: Проблема с QTable (Qt 3.3.3)
Отправлено: Martiro от Октябрь 25, 2007, 17:23
разобрался... надо писать:
Код:
...
     (QCheckBox *)table->cellWidget(i,0))->setChecked(true);
...

pastor, огромное спасибо за помощь!!!


Название: Re: Проблема с QTable (Qt 3.3.3)
Отправлено: pastor от Октябрь 25, 2007, 17:43
а что такое "qobject_cast"? при компиляции ругается...
(QT 3.3.3)

Упс, забыл, это из Qt4 ))) Замени его на ::qt_cast

Цитировать
Returns the given object cast to type T if the object is of type T (or of a subclass); otherwise returns 0.
The class T must inherit (directly or indirectly) QObject and be declared with the Q_OBJECT macro.


Название: Re: Проблема с QTable (Qt 3.3.3)
Отправлено: Примерный ученик от Август 02, 2008, 12:18
У меня QT3.3.8

Код:
	QComboTableItem * cBx =((QComboTableItem *)(table5->cellWidget(2,0)));
        cBx->setCurrentItem(m);

ни к чему не приводит, т.к. физически ячейки еще нет!!!
cBX=0;

Как активировать ячейку (хочу поменять текущий выбранный) ???


Название: Re: Проблема с QTable (Qt 3.3.3)
Отправлено: pastor от Август 02, 2008, 12:27
У меня QT3.3.8

Код:
	QComboTableItem * cBx =((QComboTableItem *)(table5->cellWidget(2,0)));
        cBx->setCurrentItem(m);

ни к чему не приводит, т.к. физически ячейки еще нет!!!
cBX=0;

Как активировать ячейку (хочу поменять текущий выбранный) ???

1. cellWidget возвращает указатель на QWidget. А вы приводите к QComboTableItem, который ничего общего с QWidget неимеет.
2. Если cellWidget возвращает 0, значит виджет не установлен для данной ячейки.

Для ясности покажите код как вы заполняете таблицу.


Название: Re: Проблема с QTable (Qt 3.3.3)
Отправлено: Примерный ученик от Август 02, 2008, 12:37
Код:
       QStringList cC;
       QComboTableItem* paItem;

        cC  << "it 1" << "it2";
paItem= new QComboTableItem(table5,cC,FALSE);
        paItem->setEditable(FALSE); // можно редактировать
paItem->setCurrentItem(0);
table5->setItem(2,0,paItem);


Название: Re: Проблема с QTable (Qt 3.3.3)
Отправлено: pastor от Август 02, 2008, 19:24
Если задача требует работы с виджетом непосредственно, юзай пару cellWidget\setCellWidget. Если нужна работа с итемами, юзай пару item\setItem


Название: Re: Проблема с QTable (Qt 3.3.3)
Отправлено: Примерный ученик от Август 08, 2008, 19:53
Что то сайт долго висел >:(

Мне подошла пара cellWidget\setCellWidget.

Спасибо за консультацию :D