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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: получить состояние QCheckListItem  (Прочитано 7079 раз)
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:
Записан
Sergeich
Гость
« Ответ #1 : Май 13, 2005, 16:30 »

QListViewItem* item = ....;
if ( item && item->rtti() == 1 ) {
  QCheckListItem* checkItem = (QCheckListItem*) item;
  bool on = checkItem->isOn();
}
Записан
ANM
Гость
« Ответ #2 : Май 13, 2005, 16:58 »

По моему в стиле QT вот так:
Код:
QListViewItem* item = ....; 
if ( item->inherits("QCheckListItem") )
{
 QCheckListItem* checkItem = (QCheckListItem*) item;
 bool on = checkItem->isOn();
}
Записан
Sergeich
Гость
« Ответ #3 : Май 13, 2005, 17:35 »

inherits() - метод QObject, а QListViewItem* не наследник QObject
Записан
ANM
Гость
« Ответ #4 : Май 13, 2005, 17:44 »

Понятно, ну тогда лучше включить C++ rtti и использовать dynamic_cast.
Записан
Sergeich
Гость
« Ответ #5 : Май 13, 2005, 18:35 »

Да можно конечно, только зачем? RTTI немного снижает скорость работы и компиляции приложения, да и не все компиляторы его корректно поддерживают.
Записан
ANM
Гость
« Ответ #6 : Май 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.
Записан
Hellenna
Гость
« Ответ #7 : Май 13, 2005, 21:34 »

Спасибо большое.
Попробую.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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