Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Dimatorus от Ноябрь 01, 2011, 12:33



Название: Как сделать создание объекта по имени класса через QString?
Отправлено: 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)?


Название: Re: Как сделать создание объекта по имени класса через QString?
Отправлено: GreatSnake от Ноябрь 01, 2011, 12:55
QPaintDevice не является производным от QObject, поэтому через QMetaObject про его существование ты не узнаешь.


Название: Re: Как сделать создание объекта по имени класса через QString?
Отправлено: Dimatorus от Ноябрь 01, 2011, 15:59
Ну это я уже понял. То есть по идее я никак не смогу сделать то что хочу?

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


Название: Re: Как сделать создание объекта по имени класса через QString?
Отправлено: Dimatorus от Ноябрь 01, 2011, 16:00
И да, кстати, главный вопрос остается открытым. Как мне имея в строке имя класса, создать объект этого класса? Существует ли какой нибудь способ в Qt?


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

И да, кстати, главный вопрос остается открытым. Как мне имея в строке имя класса, создать объект этого класса? Существует ли какой нибудь способ в Qt?
см. QUiLoader