Плагин Qt Widget не выводится в Designer
У меня есть группа пользовательских виджетов, которые я внедряю в Qt Designer. Я успешно построил плагин и получаю как .lib
и .dll
файлы выводятся. Я успешно вижу список всех моих виджетов в Qt Designer. Тем не менее, когда я иду перетащить виджет на сцену, ничего. Ничего на сцене, ничего в курсоре, просто ничего. Я предоставлю соответствующий код одного из моих виджетов и соответствующий им плагин. Любая помощь / комментарий по этому вопросу с благодарностью.
РЕДАКТИРОВАТЬ: мне сказали создать MCVE моего проекта, чтобы его было легко компилировать и отлаживать. Так что я. https://github.com/NickJohn547745/MaterialWidget-MCVE
1 ответ
Никогда раньше не работал с плагинами Qt Designer, но это выглядело интересно.
Вот что я сделал, чтобы решить твою проблему. Я просто детализирую метод здесь, чтобы вы могли понять его и, возможно, применить его позже (метод может применяться к другим типам проблем, с которыми вы можете столкнуться).
Поскольку я не знаком с плагинами Qt Designer, я взял пример Qt для плагинов Designer и заставил его работать на моем компьютере (очень легко сделать, просто скомпилировал, скопировал сгенерированный.so в папку плагина QtDesigner).
Затем я взял ваш пример с github, скомпилировал его и проверил, что перетаскивание не работает, как вы сообщали.
Затем я заменил ваш QtMaterialBadgePlugin
переименованной копией Qt's AnalogClockPlugin
и ваш QtMaterialBadge
переименованной копией Qt's AnalogClock
, Затем я скомпилировал плагин, и, к удивлению... Я мог перетащить элемент плагина, он работал! Так что определенно что-то не так с вашим кодом.
Затем я заменил обратно "переименованную копию Qt's AnalogClock
"с вашим оригиналом QtMaterialBadge
класс и, новый сюрприз... перетаскивание все еще работает в Qt Designer. Вывод: определенно что-то не так с вашим QtMaterialBadgePlugin
!
Поэтому я проверил различия между вашими QtMaterialBadgePlugin
класс и Qt's AnalogClockPlugin
учебный класс. Это было просто, так как всего несколько строк кода...
Просто замените:
QString QtMaterialBadgePlugin::domXml() const
{
return QLatin1String("<widget class=\"QtMaterialBadge\" name=\"qtMaterialBadge\">\n<widget>\n");
}
от:
QString QtMaterialBadgePlugin::domXml() const
{
return "<ui language=\"c++\">\n"
" <widget class=\"QtMaterialBadge\" name=\"qtMaterialBadge\">\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"
" </widget>\n"
"</ui>\n";
}
И теперь ваш плагин будет перетаскиваемым из Qt Designer. Обратите внимание, что вы забыли:
- XML-узел верхнего уровня "ui", но это, очевидно, опционально, так как плагин работает даже без этого
- свойство geometry (которое используется для определения размера по умолчанию, используемого при перетаскивании). Это было основной причиной вашей проблемы!
Теперь вы увидите, что перетаскивание показывает только серую квадратную область (в то время как пример Qt показывает предварительный просмотр AnalogClock), вы, вероятно, предпочтете иметь предварительный просмотр вашего виджета здесь, и я позволю вам разобраться с этим., Полагаю, моего ответа достаточно, учитывая ваш вопрос: "Однако, когда я иду, чтобы перетащить виджет на сцену, ничего. Ничего на сцене, ничего в курсоре, просто вообще ничего": теперь вы что-то получаете!