Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Hellenna от Май 13, 2005, 15:54



Название: получить состояние QCheckListItem
Отправлено: Hellenna от Май 13, 2005, 15:54
делаю так:
Код:
for(int i=0; i<5; i++){
     myListView->insertItem(QCheckListItem(myListView, QString("item %1").arg(i), QCheckListItem::CheckBox));
}


после этого пользователь может галочкой отмечать нужные ему записи.
а как узнать отмечена ли конкретная запись?
хотелось бы что-нибудь вида myListView->at(i)->isChecked()
но метод myListView->at(i) возвращает объект класса QListViewItem у которого нет свойств, отвечающих за состояние.  :(
Можно ли как-нибудь сделать это напрямую или надо изголяться? :roll:


Название: получить состояние QCheckListItem
Отправлено: Sergeich от Май 13, 2005, 16:30
QListViewItem* item = ....;
if ( item && item->rtti() == 1 ) {
  QCheckListItem* checkItem = (QCheckListItem*) item;
  bool on = checkItem->isOn();
}


Название: получить состояние QCheckListItem
Отправлено: ANM от Май 13, 2005, 16:58
По моему в стиле QT вот так:
Код:
QListViewItem* item = ....; 
if ( item->inherits("QCheckListItem") )
{
 QCheckListItem* checkItem = (QCheckListItem*) item;
 bool on = checkItem->isOn();
}


Название: получить состояние QCheckListItem
Отправлено: Sergeich от Май 13, 2005, 17:35
inherits() - метод QObject, а QListViewItem* не наследник QObject


Название: получить состояние QCheckListItem
Отправлено: ANM от Май 13, 2005, 17:44
Понятно, ну тогда лучше включить C++ rtti и использовать dynamic_cast.


Название: получить состояние QCheckListItem
Отправлено: Sergeich от Май 13, 2005, 18:35
Да можно конечно, только зачем? RTTI немного снижает скорость работы и компиляции приложения, да и не все компиляторы его корректно поддерживают.


Название: получить состояние QCheckListItem
Отправлено: ANM от Май 13, 2005, 19:05
RTTI повышает объем скомпилированной программы, добавляя к каждому классу имеющему таблицу виртуальных функций доп. информацию о типе.
Насчет компиляторов ну не знаю, по моему уже все корректно поддерживают, на дворе 21 век. :)
Скорость работы кода не использующего C++  RTTI не снижаетcя,
но естественно
Код:

QListViewItem* item = ....;
if ( item && item->rtti() == 1 ) {
QCheckListItem* checkItem = (QCheckListItem*) item;
bool on = checkItem->isOn();
}

будет быстрей чем
Код:

QListViewItem* item = ....;
if ( (QCheckListItem *ch=dynamic_cast<QCheckListItem*>(item)) != 0 ) {
bool on = ch->isOn();
}

но не думаю что это большой плюс.
Преимущество RTTI очевидно: отсутствие конфликтов между различными наследниками от QCheckListItem.


Название: получить состояние QCheckListItem
Отправлено: Hellenna от Май 13, 2005, 21:34
Спасибо большое.
Попробую.