Добавление виджетов в Qt Designer
Недавно я обнаружил, что Qt поддерживает пользовательские виджеты, и что существуют сайты, которые предоставляют виджеты такого типа (например, Qt-Apps). Если это актуально, мне интересно получить этот виджет.
Я скачал исходный код для него, извлек его и т. Д. Я еще не пытался собрать его, но меня интересует наличие этого виджета в списке виджетов в левой части Qt Designer, чтобы я мог Можно использовать это мои приложения.
Я либо не знаю, как искать то, что я ищу, либо его вообще не существует. Пожалуйста, помогите мне с этой проблемой.
1 ответ
Есть два способа:
А. Используйте продвижение
Самый простой способ. Этот метод напрямую берет источник, не собирая его.
Б. Создайте плагин lib для Designer
Это немного утомительно...
Для краткости предположим, что у вас есть нужный класс (виджет): CustomWidget
с customwidget.cpp
а также customwidget.h
,
- Создайте новый фабричный класс, возможно, назовите его
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