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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обращение к динамически созданному виджету  (Прочитано 4869 раз)
Az
Гость
« : Май 24, 2010, 19:48 »

Коллеги, подскажите, как можно обратиться к динамически созданному ComboBox.
Создаю его с помощью setItemWidget, и встраиваю в одну колонку QTreeWidget следующим образом:
Код
C++ (Qt)
 
   QTreeWidgetItem *item = new QTreeWidgetItem(ui->treeWidget);
   item->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable);
   item->setCheckState(0, Qt::Checked);
   ui->treeWidget->clearSelection();
   item->setSelected(true);
   ui->treeWidget->setCurrentItem(item);
   QComboBox *combo = new QComboBox;
   ui->treeWidget->setItemWidget(item,1,combo);
   combo->addItem("http");
   combo->addItem("socks4");
   combo->addItem("socks5");
Пытался добраться до него через
Код
C++ (Qt)
ui->treeWidget->itemWidget(item, 0)->
но дальше дело не пошло.
При этом
Код
C++ (Qt)
ui->treeWidget->itemWidget(item, 0)->setVisible(false);
скрывает, и скрывает именно сам ComboBox, то есть до него вроде как доходит.
Записан
Makss
Гость
« Ответ #1 : Май 24, 2010, 20:06 »

Код:
((QComboBox *)ui->treeWidget->itemWidget(item, 0))->setVisible(false);
Записан
bigirbis
Гость
« Ответ #2 : Май 24, 2010, 20:56 »

Во-первых стоит пользоваться оператором dynamic_cast.
Во вторых, для таких особых случаев стоит изучить работу делегатов.
Записан
Az
Гость
« Ответ #3 : Май 24, 2010, 21:34 »

Спасибо за ответы.
Есть над чем по-мыслить.
Записан
garryHotDog
Гость
« Ответ #4 : Май 24, 2010, 21:46 »

лично я использую код который представил - Makss
Записан
ритт
Гость
« Ответ #5 : Май 24, 2010, 22:01 »

dynamic_cast? c-style cast?
Makss, bigirbis, garryHotDog - каждому по двойке.
забудьте эту чушь, когда оперируете экземплярами QObject!

QComboBox *combo = qobject_cast<QComboBox *>(ui->treeWidget->itemWidget(item, 0))
if (combo) ...
и только так!
Записан
bigirbis
Гость
« Ответ #6 : Май 24, 2010, 22:29 »

 Рот на замке Согласен по поводу qobject_cast - конкретно лажанулся.
Записан
radislav72
Гость
« Ответ #7 : Май 26, 2010, 07:49 »

забудьте эту чушь, когда оперируете экземплярами QObject!
...
и только так!

А почему так категорично? Тут такая серьезная ошибка, или просто отступление от "оптимального" варианта кода?
Записан
Amigo_sa
Гость
« Ответ #8 : Май 26, 2010, 10:03 »

Во-первых стоит пользоваться оператором dynamic_cast.
Во вторых, для таких особых случаев стоит изучить работу делегатов.
Для наследников QObject  предпочтительнее object_cast.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #9 : Май 26, 2010, 13:18 »

и только так!

да, зачем так категорично?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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