Qt Widget插件设计器中没有输出

时间:2018-02-24 20:35:17

标签: c++ qt qt-designer qtplugin

我有一组自定义小部件,我正在Qt Designer中实现。我已经成功构建了插件,并且同时输出了.lib.dll个文件。我在Qt Designer中成功查看了所有小部件的列表。但是,当我将一个小部件拖到场景中时,什么都没有。现场什么都没有,光标里什么都没有,什么都没有。我将提供一个我的小部件及其相应插件的相关代码。非常感谢任何有关此事的帮助/评论。

编辑:我被告知要创建我项目的MCVE,以便于编译和调试。所以我有。 https://github.com/NickJohn547745/MaterialWidget-MCVE

1 个答案:

答案 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中删除和删除。请注意,您忘了:

  • 顶级&#34; ui&#34; XML节点,但即使没有那个
  • ,这个插件显然也是可选的
  • geometry属性(用于确定拖放期间使用的默认大小)。这是你问题的根本原因!

现在,您将看到拖放仅显示灰色方形区域(而Qt示例显示了AnalogClock的预览),您可能更愿意在此处预览您的小部件,而且我和#39;让你解决这个问题。我想我的答案就足够了,考虑到你的问题&#34; 但是,当我把一个小部件拖到场景中时,什么都没有。现场什么都没有,光标里什么都没有,什么都没有&#34;:现在你得到了什么!