以前从未使用过 Qt Designer 插件,但这看起来很有趣。
这是我为解决您的问题所做的工作。我只是在这里详细说明方法,以便您可以理解它并可能以后自己应用它(该方法可能适用于您可能遇到的其他类型的问题)。
由于我对 Qt Designer 插件不熟悉,所以我将Qt 示例用于 Designer 插件并使其在我的计算机上运行(很容易做到,只需编译,将生成的 .so 复制到 QtDesigner 插件的文件夹中)。
然后,我从 github 获取了您的示例,对其进行了编译并检查了拖放是否如您所报告的那样不起作用。
然后,我将您QtMaterialBadgePlugin
的替换为 Qt 的重命名副本,AnalogClockPlugin
并将您QtMaterialBadge
的替换为 Qt 的重命名副本AnalogClock
。然后我编译了插件,而且,惊喜....我可以拖放插件项目,它工作!所以你的代码肯定有问题。
AnalogClock
然后我用你原来的类替换了“Qt 的重命名副本” QtMaterialBadge
,新的惊喜......拖放在 Qt Designer 中仍然有效。结论:你的肯定有问题QtMaterialBadgePlugin
!
QtMaterialBadgePlugin
所以我检查了你的班级和Qt的班级之间的差异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 中拖放。请注意,您忘记了:
- 顶层的“ui” XML 节点,但这显然是可选的,因为即使没有它,插件也可以工作
- 几何属性(用于确定拖放期间使用的默认大小)。那是你问题的根本原因!
现在,您将看到拖放只显示一个灰色方形区域(而 Qt 示例显示了 AnalogClock 的预览),您可能更喜欢在这里预览您的小部件,我会让您解决这个问题. 考虑到您的问题,我想我的回答就足够了“但是,当我将小部件拖动到场景中时,什么都没有。场景中什么都没有,光标中什么都没有,什么都没有”:现在您得到了一些东西!