将小部件添加到Qt Designer

时间:2014-04-24 17:34:04

标签: c++ qt widget qt-designer

我最近发现Qt支持自定义小部件,并且有些网站提供这种小部件(如Qt-Apps)。如果它是相关的,我有兴趣获取this小部件。

我已经下载了它的源代码,我已经提取了它等等。我还没有尝试构建它,但我感兴趣的是在窗口左侧的小部件列表中有这个小部件。 Qt Designer,以便我可以将它用于我的应用程序。

我要么不知道如何搜索我要找的东西,要么根本不存在。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:3)

有两种方法:

一个。使用promotion

最简单的方法。此方法直接获取源而不构建它。

B中。 Build a plugin lib for Designer

这有点乏味......


要简短,假设您有一个所需的类(小部件):CustomWidget customwidget.cppcustomwidget.h

  1. 创建一个新的工厂类,可以称之为CustomWidgetPlugin并公开继承QObjectQDesignerCustomWidgetInterface并重新实现一些虚拟功能。
  2. 示例:

    customwidget.h

        #include <QDesignerCustomWidgetInterface>
        #include "customwidget.h"
    
        class CustomWidgetPlugin : public QObject, public QDesignerCustomWidgetInterface
        {
            Q_OBJECT
            Q_INTERFACES(QDesignerCustomWidgetInterface) // note this line, it tell moc that the second base class is a plugin interface.
    
        public:
            CustomWidget(QObject *parent = 0);
            QString name() const;
            QString includeFile() const;
            QString group() const;
            QIcon icon() const;
            QString toolTip() const;
            QString whatsThis() const;
            bool isContainer() const;
            QWidget *createWidget(QWidget *parent);
        };
    

    customwidget.cpp

    构造

    CustomWidget::CustomWidgetPlugin(QObject *parent)
    : QObject(parent)
    {
    }
    

    名字getter:

    QString CustomWidgetPlugin::name() const
    {
        return "CustomWidget";
    }
    

    headerfile getter:

    QString CustomWidgetPlugin::includeFile() const
    {
        return "customwidget.h";
    }
    

    组名获取者:

    QString CustomWidgetPlugin::group() const
    {
        return tr("New Group");
    }
    

    (组名定义小部件所属的位置,如果名称不适合任何默认组,则会创建一个新组)

    enter image description here

    图标(用于设计师中显示的图标):

    QIcon CustomWidgetPlugin::icon() const
    {
        return QIcon(":/images/icon.png");
    }
    

    小工具的工具提示:

    QString  CustomWidgetPlugin::toolTip() const
    {
        return tr("This is a widget, got it?");
    }
    
    这是什么的信息:

    QString CustomWidgetPlugin::whatsThis() const
    {
        return tr("A widget, already said.");
    }
    

    定义它是否是“容器”(可以容纳另一个小部件):

    bool CustomWidgetPlugin::isContainer() const
    {
        return false;
    }
    

    工厂成员函数:

    QWidget *CustomWidgetPlugin::createWidget(QWidget *parent)
    {
        return new CustomWidget(parent);
    }
    

    注意!!

    customwidget.cpp文件末尾添加此宏:

    Q_EXPORT_PLUGIN2(customwidgetplugin , CustomWidgetPlugin) // (the widget name, the class name)
    

    它使插件可用于Qt deisgner。

    最后,在您的.pro文件中:

    TEMPLATE = lib
    CONFIG += designer plugin release
    HEADERS = ../customwidget.h \
    customwidgetplugin.h
    SOURCES = ../customwidget.cpp \
    customwidgetplugin.cpp
    RESOURCES = customwidget.qrc
    DESTDIR = $(QTDIR)/plugins/designer #assume QTDIR environment variable is set to the directory where Qt is installed.
    

    构建此项目后,下次打开Qt设计器时,您将看到小部件。

    参考:使用Qt 4进行C ++ GUI编程