Плагин Qt Widget не выводится в Designer

У меня есть группа пользовательских виджетов, которые я внедряю в Qt Designer. Я успешно построил плагин и получаю как .lib и .dll файлы выводятся. Я успешно вижу список всех моих виджетов в Qt Designer. Тем не менее, когда я иду перетащить виджет на сцену, ничего. Ничего на сцене, ничего в курсоре, просто ничего. Я предоставлю соответствующий код одного из моих виджетов и соответствующий им плагин. Любая помощь / комментарий по этому вопросу с благодарностью.

РЕДАКТИРОВАТЬ: мне сказали создать MCVE моего проекта, чтобы его было легко компилировать и отлаживать. Так что я. https://github.com/NickJohn547745/MaterialWidget-MCVE

-4

Решение

Никогда раньше не работал с плагинами 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), вы, вероятно, предпочтете иметь предварительный просмотр вашего виджета здесь, и я позволю вам разобраться с этим. , Полагаю, моего ответа достаточно, учитывая ваш вопросТем не менее, когда я иду перетащить виджет на сцену, ничего. Ничего на сцене, ничего в курсоре, просто ничего«Теперь вы что-то получаете!

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]