我有一组自定义小部件,我正在Qt Designer中实现。我已经成功构建了插件,并且同时输出了.lib
和.dll
个文件。我在Qt Designer中成功查看了所有小部件的列表。但是,当我将一个小部件拖到场景中时,什么都没有。现场什么都没有,光标里什么都没有,什么都没有。我将提供一个我的小部件及其相应插件的相关代码。非常感谢任何有关此事的帮助/评论。
答案 0 :(得分:2)
之前从未使用过Qt Designer插件,但这看起来很有趣。
以下是我最终解决问题的方法。我只是详细介绍了这里的方法,以便您可以理解它并可能在以后自己应用它(该方法可以应用于您可能遇到的其他类型的问题)。
由于我不熟悉Qt Designer插件,我使用Qt example for Designer plugins并使其在我的计算机上运行(很容易做到,只是编译,将生成的.so复制到QtDesigner插件' s文件夹)。
然后,我从github那里拿了你的例子,编译它并检查拖放是否像你报告的那样不起作用。
然后,我将QtMaterialBadgePlugin
替换为Qt AnalogClockPlugin
的重命名副本,将QtMaterialBadge
替换为Qt AnalogClock
的重命名副本。然后我编译了插件,并且,惊讶....我可以拖放插件项,它工作!所以你的代码肯定有问题。
然后我更换了Qt' AnalogClock
"的重命名副本。使用原始的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中删除和删除。请注意,您忘了:
现在,您将看到拖放仅显示灰色方形区域(而Qt示例显示了AnalogClock的预览),您可能更愿意在此处预览您的小部件,而且我和#39;让你解决这个问题。我想我的答案就足够了,考虑到你的问题&#34; 但是,当我把一个小部件拖到场景中时,什么都没有。现场什么都没有,光标里什么都没有,什么都没有&#34;:现在你得到了什么!