将小部件添加到Qt Designer

5
我最近发现Qt支持自定义小部件,并且有一些网站提供这种小部件(例如Qt-Apps)。如果相关的话,我对获取this小部件很感兴趣。
我已经下载了它的源代码,我已经提取了它等等。我还没有尝试构建它,但我感兴趣的是将该小部件添加到Qt Designer左侧的小部件列表中,以便我可以在我的应用程序中使用它。
我要么不知道如何搜索我正在寻找的内容,要么根本不存在。请帮助我解决这个问题。
1个回答

4

有两种方法:

A. 使用promotion

最简单的方法。此方法直接获取源代码而无需构建。

B. 为Designer构建插件库

这有点繁琐...


让我们简单说明一下,假设你有一个期望的类(小部件):CustomWidget,其中包含 customwidget.cppcustomwidget.h
  1. 创建一个新的工厂类,可能称之为 CustomWidgetPlugin ,并公开继承 QObjectQDesignerCustomWidgetInterface 并重新实现一些虚函数。

例如:

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)
{
}

名称获取器:

QString CustomWidgetPlugin::name() const
{
    return "CustomWidget";
}
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设计师中可用。
最后,在您的.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 Designer时,您将看到该小部件。
参考:C ++ GUI Programming with Qt 4

那么你的意思是我必须拿出我下载的那个小部件的源代码?我不需要构建它吗? - Victor
这是创建小部件插件的标准方法。如果您的源代码已经为您完成了此操作,请将其生成到 $(QTDIR)/plugins/designer。如果没有,按照以下步骤构建您自己的插件。 - Tay2510
@Victor 我已经检查了你提供的源代码。它只是一个库的形式。你可以将其构建为库并且仍然可以在没有设计师的情况下使用它。但是,如果你想在设计师中拖放小部件,还需要进行一些工作。此外,如果你正在寻找更简单的方法,请查看Promotion - Tay2510
有没有私下联系你的方式? - Victor
我不知道怎么创建一个。 - Victor
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/51373/discussion-between-victor-and-tay2510 - Victor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接