Добавление виджетов в Qt Designer

Недавно я обнаружил, что Qt поддерживает пользовательские виджеты, и что существуют сайты, которые предоставляют виджеты такого типа (например, Qt-Apps). Если это актуально, мне интересно получить этот виджет.

Я скачал исходный код для него, извлек его и т. Д. Я еще не пытался собрать его, но меня интересует наличие этого виджета в списке виджетов в левой части Qt Designer, чтобы я мог Можно использовать это мои приложения.

Я либо не знаю, как искать то, что я ищу, либо его вообще не существует. Пожалуйста, помогите мне с этой проблемой.

1 ответ

Решение

Есть два способа:

А. Используйте продвижение

Самый простой способ. Этот метод напрямую берет источник, не собирая его.

Б. Создайте плагин lib для Designer

Это немного утомительно...


Для краткости предположим, что у вас есть нужный класс (виджет): CustomWidget с customwidget.cpp а также customwidget.h,

  1. Создайте новый фабричный класс, возможно, назовите его CustomWidgetPlugin и общественное наследство QObject а также QDesignerCustomWidgetInterface и переопределить некоторые виртуальные функции.

пример:

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");
}

(имя группы определяет, где принадлежит виджет, и создает новую группу, если имя не подходит ни к какой группе по умолчанию)

введите описание изображения здесь

значок (для отображаемой иконки в дизайнере):

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 designer, вы увидите виджет.

Ссылка: C++ GUI Программирование с Qt 4

Другие вопросы по тегам