我刚刚读了关于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();
}
....
}
我将把所有这些代码放在一个项目中,将其编译为插件,然后在我的主应用程序中查找并加载它。我将创建它的一个实例并让它创建一个我将要的小部件显示。
有没有更好的方法来做到这一点,或者是这样吗?
答案 0 :(得分:0)
您可能正在寻找Creating Custom Widgets for Qt Designer。 Widget插件继承自QWidget
。例如,请参阅World Time Clock Plugin。
虽然widget插件主要用于Qt Designer,但在QUiLoader的帮助下,可以在运行时使用它们的一些功能。
修改强>
编写Qt Designer插件绝对是一项投资。如果您不需要设计时支持,那么创建它们可能没什么价值。
对于您自己的插件基础结构,您可以使用标准化API(导出函数)将插件打包在一组动态库中以调用它们。