如何创建一个继承自QWidget的qt插件

时间:2012-02-10 01:01:40

标签: c++ qt plugins metaobject

我刚刚读了关于QWidgets的内容,我想创建一些小部件的插件,这些小部件将在运行时加载。当我查看示例代码和要求时,插件似乎继承自接口和QObject。我如何创建QWidget-plugins,它们都有不同的按钮和不同的插槽?此外,是否可以创建一个继承自接口的插件和一个继承自QWidget(继承自QObject)的基类。

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

但是,我读到了metaobject,您可以在运行时加载小部件,只需知道它们的名称(不需要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 :(得分:0)

您可能正在寻找Creating Custom Widgets for Qt Designer。 Widget插件继承自QWidget。例如,请参阅World Time Clock Plugin

虽然widget插件主要用于Qt Designer,但在QUiLoader的帮助下,可以在运行时使用它们的一些功能。

修改

编写Qt Designer插件绝对是一项投资。如果您不需要设计时支持,那么创建它们可能没什么价值。

对于您自己的插件基础结构,您可以使用标准化API(导出函数)将插件打包在一组动态库中以调用它们。