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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с QTable (Qt 3.3.3)  (Прочитано 7114 раз)
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
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Октябрь 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);
    }
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Martiro
Гость
« Ответ #2 : Октябрь 25, 2007, 16:37 »

а что такое "qobject_cast"? при компиляции ругается...
(QT 3.3.3)
Записан
Martiro
Гость
« Ответ #3 : Октябрь 25, 2007, 17:23 »

разобрался... надо писать:
Код:
...
     (QCheckBox *)table->cellWidget(i,0))->setChecked(true);
...

pastor, огромное спасибо за помощь!!!
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Октябрь 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.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #5 : Август 02, 2008, 12:18 »

У меня QT3.3.8

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

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

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

Как мало времени и как много нужно узнать
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Август 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, значит виджет не установлен для данной ячейки.

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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #7 : Август 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);
Записан

Как мало времени и как много нужно узнать
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #8 : Август 02, 2008, 19:24 »

Если задача требует работы с виджетом непосредственно, юзай пару cellWidget\setCellWidget. Если нужна работа с итемами, юзай пару item\setItem
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #9 : Август 08, 2008, 19:53 »

Что то сайт долго висел Злой

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

Спасибо за консультацию Веселый
Записан

Как мало времени и как много нужно узнать
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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