У меня есть группа пользовательских виджетов, которые я внедряю в Qt Designer. Я успешно построил плагин и получаю как .lib
и .dll
файлы выводятся. Я успешно вижу список всех моих виджетов в Qt Designer. Тем не менее, когда я иду перетащить виджет на сцену, ничего. Ничего на сцене, ничего в курсоре, просто ничего. Я предоставлю соответствующий код одного из моих виджетов и соответствующий им плагин. Любая помощь / комментарий по этому вопросу с благодарностью.
РЕДАКТИРОВАТЬ: мне сказали создать MCVE моего проекта, чтобы его было легко компилировать и отлаживать. Так что я. https://github.com/NickJohn547745/MaterialWidget-MCVE
Никогда раньше не работал с плагинами 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. Обратите внимание, что вы забыли:
Теперь вы увидите, что перетаскивание показывает только серую квадратную область (в то время как пример Qt показывает предварительный просмотр AnalogClock), вы, вероятно, предпочтете иметь предварительный просмотр вашего виджета здесь, и я позволю вам разобраться с этим. , Полагаю, моего ответа достаточно, учитывая ваш вопросТем не менее, когда я иду перетащить виджет на сцену, ничего. Ничего на сцене, ничего в курсоре, просто ничего«Теперь вы что-то получаете!
Других решений пока нет …