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

How to create a qt plugin that inherits from QWidget

本文关键字:QWidget qt 插件 继承 何创建 创建 一个      更新时间:2023-10-16

我刚刚读到关于QWidget的文章,我想创建一些插件,这些插件是将在运行时加载的小部件。当我查看示例代码和需求时,插件似乎继承了接口和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();
    }
    .... 
}

所有这些代码我都会放在一个项目中,将其编译为插件,然后在我的主应用程序中查找并加载。我会创建一个它的实例,让它创建一个我将显示的小部件。

有更好的方法吗?还是就这样?

您可能正在寻找为Qt Designer创建自定义小工具。Widget插件确实继承了QWidget。例如,请参见世界时钟插件。

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

编辑:

编写Qt Designer插件无疑是一笔投资。如果你不需要设计时的支持,你可能会发现创建它们没有什么价值。

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