я сделал собственный виджет «DuwagWidget» и плагин для пользовательских виджетов «DuwagWidgetPlugin», который можно перетаскивать&Зашёл в QT Designer для создания моего файла duwag.ui.
Тем не менее, когда я пытаюсь скомпилировать свою программу, ui_duwag.h генерируется из компилятора пользовательского интерфейса QT, но в этом автоматически сгенерированном файле uic не включает мой «DuwagWidget.h», который необходим для создания пользовательского класса виджета. ,
DuwagWidgetPlugin является (производным от интерфейса в QT для создания CustomWidgets) просто фабричным классом для DuwagWidget.
Вот код из DuwagWidgetPlugin: ^
#include <DuwagWidgetPlugin.h>
#include <QtPlugin>
#include <qwidget.h>
#include <MTBFWidget.h>DuwagWidgetPlugin::DuwagWidgetPlugin( QObject *parent ) : QObject(parent) {
initialized = false;
}
void DuwagWidgetPlugin::initialize(QDesignerFormEditorInterface * /* core */) {
if (initialized)
return;
initialized = true;
}
bool DuwagWidgetPlugin::isInitialized() const {
return initialized;
}
QWidget *DuwagWidgetPlugin::createWidget(QWidget *parent) {
return new DuwagWidget( parent );
}
QString DuwagWidgetPlugin::name() const {
return "DuwagWidget";
}
QString DuwagWidgetPlugin::group() const {
return "duwagplugin";
}
QIcon DuwagWidgetPlugin::icon() const {
return QIcon();
}
QString DuwagWidgetPlugin::toolTip() const {
return "The duwag control panel";
}
QString DuwagWidgetPlugin::whatsThis() const {
return "The duwag Control panel";
}
bool DuwagWidgetPlugin::isContainer() const {
return false;
}
QString DuwagWidgetPlugin::domXml() const {
return "<widget class=\"DuwagWidget\" name=\"DuwagWidget\">\n"" <property name=\"geometry\">\n"" <rect>\n"" <x>0</x>\n"" <y>0</y>\n"" <width>100</width>\n"" <height>100</height>\n"" </rect>\n"" </property>\n"" <property name=\"toolTip\" >\n"" <string>The MTBF Control panel</string>\n"" </property>\n"" <property name=\"whatsThis\" >\n"" <string>The MTBF Control panel.</string>\n"" </property>\n""</widget>\n";
}
QString DuwagWidgetPlugin::includeFile() const {
return "DuwagWidget.h";
}
Q_EXPORT_PLUGIN2(duwagplugin, DuwagWidgetPlugin)
Таким образом, проблема заключается в том, что в сгенерированном заголовочном файле он не может создать собственный виджет «DuwagWidget», потому что он не знает, что это такое ..
У меня была эта проблема при включении пользовательских классов в .ui-файл QtDesigner. uic
делает Хорошо работа по добавлению соответствующих заголовков при использовании опции «Повышать до ..».
#include "NewClass.h"
в файл «ui_yourclass.h».К сожалению, это создает избыточные предупреждения о включении, когда другой файл конструктора обращается к тому же пользовательскому классу, и оба файла «ui_yourclass.h» включены из одного и того же заголовка. Кроме того, необходимость продвижения виджета делает обязательным создание и инициализацию одного экземпляра этого класса в файле макета дизайнера.
Другой способ, о котором я читал, — это перейти в Инструменты> Редактор форм> Настройки формы и добавить «NewClass.h» в разделы, озаглавленные «Включить подсказки». Но я никогда не делал это таким образом.
Других решений пока нет …