Как создать плагин qt, который наследуется от QWidget - PullRequest
2 голосов
/ 10 февраля 2012

Я только что прочитал о QWidgets, и я хотел бы создать плагины, которые являются виджетами, которые будут загружаться во время выполнения. Когда я смотрел на пример кода и требования, плагин, похоже, унаследовал от интерфейса и QObject. Как бы я создал плагины QWidget, в которых все они имеют разные кнопки и разные слоты? Кроме того, можно ли создать плагин, который наследует от интерфейса, и базовый класс, который наследует от QWidget (который наследует от QObject).

http://developer.qt.nokia.com/doc/qt-4.8/plugins-howto.html

Однако я читал о метаобъекте, где вы можете загружать виджеты во время выполнения, просто зная их имена (не требует поддержки RTTI). Но как именно я доставил бы классы в образец, чтобы он узнал их? При работе с плагинами мне нужно иметь их в специальном проекте, который я собираю с различными наборами флагов в файле .pro. Но как бы я сделал это здесь?

Я бы очень хотел использовать qtplugin, но как?

Идея:

Было бы приемлемо и оптимально позволить плагину создать QWidget, который он возвращает? Не вижу смысла писать плагины для дизайнера, если я создаю свой интерфейс без него. Или я неправильно понял?

http://techbase.kde.org/Development/Tutorials/Writing_Qt_Designer_Plugins

class workspaceInterface {
   virtual QWidget* createWorkspace(QWidget* parent);
   ... other useful functions...
}

class mySpecialWidget : public QWidget {
    mySpecialWidget {
        add a layout, add some buttons, maybe change the color
    }
}

//plugin
#include "myspecialwidget.h"

class myPlugin : public QObject, public workspaceInterface {
    QWidget* createWorkspace(QWidget* parent) {
        return new MySpecialWidget();
    }
    .... 
}

Весь этот код я бы поместил в один проект, скомпилировал его как плагин, а затем искал его в моем основном приложении и загрузил его. Я бы создал его экземпляр и позволил ему создать виджет, который я буду дисплей.

Есть ли лучший способ сделать это, или это так?

1 Ответ

0 голосов
/ 10 февраля 2012

Возможно, вы ищете Создание пользовательских виджетов для Qt Designer . Плагины виджетов наследуются от QWidget. Например, см. Плагин мирового времени .

Хотя плагины виджетов в основном предназначены для Qt Designer, некоторые их функции можно использовать во время выполнения с помощью QUiLoader .

Изменить:

Создание плагинов для Qt Designer определенно требует определенных вложений. Если вам не нужна поддержка времени разработки, вы можете найти небольшую ценность в их создании.

Для вашей собственной инфраструктуры плагинов вы можете упаковать плагины в набор динамических библиотек со стандартизированным API (функциями экспорта) для их вызова.

...