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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Cуществует ли в Qt класс для задания типа класса?  (Прочитано 4194 раз)
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« : Март 11, 2015, 11:16 »

Здравствуйте, господа форумчане. Прошу меня извенить, за столь некоректное название темы. Не знал как правильно поставить вопрос. Но попробую объяснить на небольшом примере чего я хоу добиться. Пусть к примеру у нас есть виджет, и на основании его мы будем создавать виджеты разных типов. Меня интерисует вопрос, можно ли в данном случаи создать некий класс, которому можно будет задавать тип одного из стандартных классов Qt, для дальнейшего его использования в качестве типа нового создаваемого виджета. Ну к примеру пусть этот класс назовем Type. Тогда  пример кода будет выглядеть следующим образом:
Код:
QWidget *wgt;
Type type;
int kl;

if(k == 1)
   type = QMainWindow;
else if(k == 2)
   type = QPushButton;
else if(k == 3)
   type == QTextEdit;

wgt =(QWidget *) new type((QWidget*)parent);
Поидеи в Qt долзжен существовать подобный тип. Но ничего подобного не нашел. Хотя удалось узнать тип виджета, используя wgt->metaObject()->className(), но он там хранится как QString. Может кто-то стыкался с данной проблемой и знает ее решение.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Март 11, 2015, 11:23 »

https://ru.wikipedia.org/wiki/%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%82%D0%BD%D0%B0%D1%8F_%D1%84%D0%B0%D0%B1%D1%80%D0%B8%D0%BA%D0%B0_%28%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Март 11, 2015, 12:54 »

Код:
wgt =(QWidget *) new type((QWidget*)parent);
Поидеи в Qt долзжен существовать подобный тип.
По идее нет, т.к. этого нет в языке. Нельзя создать "нечто", Ваш type должен быть точно известен компилятору на момент создания. др словами это обязательно известный класс/тип. Но никто не мешает делать напр так
Код
C++ (Qt)
switch (k) {
  case type_mainWin:
    return new QMainWindow(parent);
 
  case type_PushButton:
    return new QPushButton(parent);
...
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #3 : Март 11, 2015, 13:44 »

Цитировать
По идее нет, т.к. этого нет в языке. Нельзя создать "нечто", Ваш type должен быть точно известен компилятору на момент создания. др словами это обязательно известный класс/тип. Но никто не мешает делать напр так
Код
C++ (Qt)
switch (k) {
  case type_mainWin:
    return new QMainWindow(parent);
 
  case type_PushButton:
    return new QPushButton(parent);
...
Спасибо за ответ) но увы это никак не укоротит мой код. Просто если бы в Qt было что-то подобное класу  PtWidgetClassRef_t и  и методу PtCreateWidget(PtWidgetClassRef_t *class, PtWidget_t *parent, unsigned n_args, PtArg_t const *args ) как Photon Application Builder его б можно было значительно уменьшить.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Март 11, 2015, 15:13 »

См. QUiLoader::createWidget().
Записан

Qt 5.11/4.8.7 (X11/Win)
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #5 : Март 12, 2015, 11:18 »

забудьте про фотон, тут все иначе.
почитайте про шаблон фабрики и фабричные методы..
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #6 : Март 12, 2015, 13:37 »

всем спасибо за ответы) буду читать и разбираться.
Записан
RedDog
Гость
« Ответ #7 : Март 12, 2015, 14:33 »

То, что хочется называется метапрограммированием, в плюсах с этим беда, Qt в общем то тоже не сильный помощник в этом, т.к сам на плюсах писан.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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