Russian Qt Forum

Qt => Вопросы новичков => Тема начата: billy4685 от Март 11, 2015, 11:16



Название: Cуществует ли в Qt класс для задания типа класса?
Отправлено: billy4685 от Март 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. Может кто-то стыкался с данной проблемой и знает ее решение.


Название: Re: Cуществует ли в Qt класс для задания типа класса?
Отправлено: Пантер от Март 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


Название: Re: Cуществует ли в Qt класс для задания типа класса?
Отправлено: Igors от Март 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);
...


Название: Re: Cуществует ли в Qt класс для задания типа класса?
Отправлено: billy4685 от Март 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 его б можно было значительно уменьшить.


Название: Re: Cуществует ли в Qt класс для задания типа класса?
Отправлено: GreatSnake от Март 11, 2015, 15:13
См. QUiLoader::createWidget().


Название: Re: Cуществует ли в Qt класс для задания типа класса?
Отправлено: Fregloin от Март 12, 2015, 11:18
забудьте про фотон, тут все иначе.
почитайте про шаблон фабрики и фабричные методы..


Название: Re: Cуществует ли в Qt класс для задания типа класса?
Отправлено: billy4685 от Март 12, 2015, 13:37
всем спасибо за ответы) буду читать и разбираться.


Название: Re: Cуществует ли в Qt класс для задания типа класса?
Отправлено: RedDog от Март 12, 2015, 14:33
То, что хочется называется метапрограммированием, в плюсах с этим беда, Qt в общем то тоже не сильный помощник в этом, т.к сам на плюсах писан.