【问题标题】:How to create a qt plugin that inherits from QWidget如何创建一个继承自 QWidget 的 qt 插件
【发布时间】:2012-03-02 13:00:52
【问题描述】:

我刚刚阅读了有关 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();
    }
    .... 
}

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

有没有更好的方法,或者是这样吗?

【问题讨论】:

    标签: c++ qt plugins metaobject


    【解决方案1】:

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

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

    编辑:

    写Qt Designer插件绝对是一笔投资。如果您不需要设计时支持,您可能会发现创建它们的价值不大。

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

    【讨论】:

    • 那个东西,我不想为设计师创建插件。如果人们使用我的特殊小部件,我不在乎。我想要的是能够在运行时使用它们的插件机制加载小部件。
    • 您需要从 .ui 文件还是仅从它们的名称创建小部件?
    • 不要以为我有任何 ui 文件。我所有的小部件都只是 h/cpp 文件,其中一切都是通过代码创建的。考虑使用创建小部件的功能制作一个插件对象,并将我的专用小部件放在同一个项目中。那会很丑吗?
    • 应该没问题。如果您还没有看到这个,请查看the Lower-Level API: Extending Qt Applications
    • 我想看看这个问题的答案。
    猜你喜欢
    • 1970-01-01
    • 2014-10-11
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    相关资源
    最近更新 更多