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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как сделать создание объекта по имени класса через QString?  (Прочитано 3690 раз)
Dimatorus
Гость
« : Ноябрь 01, 2011, 12:33 »

Я хочу чтобы пользователь например в QLineEdit вбивал имя класса (к примеру) QPushButton. А прога считывала имя класса и создавала объект по этому имени класса. Ну либо могла обращаться к статическим функциям этого класса. Хотя может я и херней занимаюсь. Просто захотелось написать программульку, которая будет выводить иерархию классов в Qt.

Делаю так
Код:
QTextEdit * textEdit = new QTextEdit;
QPushButton * b = new QPushButton;   // подопытный
QMetaObject * x = b->metaObject();

textEdit->append(x->className());
while (x->superClass())
{
    x = x->superClass();
    textEdit->append(x->className());
}


В коде возможны ошибки, так как инет на другом компе и пишу по памяти.

Короче для QPushButton'a она мне выводит список:

QPushButton
QAbstractButton
QWidget
QObject

Вот собсвенно и вопрос. Правильно ли я делаю, есть ли другие способы сделать то что мне нужно? Как вывести всю иерархию классов (ведь к примеру QWidget наследник не только QObject, но и QPaintDevice)?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Ноябрь 01, 2011, 12:55 »

QPaintDevice не является производным от QObject, поэтому через QMetaObject про его существование ты не узнаешь.
Записан

Qt 5.11/4.8.7 (X11/Win)
Dimatorus
Гость
« Ответ #2 : Ноябрь 01, 2011, 15:59 »

Ну это я уже понял. То есть по идее я никак не смогу сделать то что хочу?

И тогда еще вопрос. В справке Qt говорится вроде что любой объект должен быть унаследован от QObject, тогда почему есть куча объектов которые не такие? И какой смысл был их делать не наследниками QObject'a?
Записан
Dimatorus
Гость
« Ответ #3 : Ноябрь 01, 2011, 16:00 »

И да, кстати, главный вопрос остается открытым. Как мне имея в строке имя класса, создать объект этого класса? Существует ли какой нибудь способ в Qt?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Ноябрь 01, 2011, 16:29 »

И тогда еще вопрос. В справке Qt говорится вроде что любой объект должен быть унаследован от QObject, тогда почему есть куча объектов которые не такие? И какой смысл был их делать не наследниками QObject'a?
Наследоваться от QObject имеет смысл только когда требуется задействовать механизм signals/slots.

И да, кстати, главный вопрос остается открытым. Как мне имея в строке имя класса, создать объект этого класса? Существует ли какой нибудь способ в Qt?
см. QUiLoader
« Последнее редактирование: Ноябрь 01, 2011, 16:32 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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