代码之家  ›  专栏  ›  技术社区  ›  Nicholas Johnson

Qt小部件插件在设计器中没有输出

  •  -4
  • Nicholas Johnson  · 技术社区  · 7 年前

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

    编辑:我被告知为我的项目创建一个MCVE,以使其易于编译和调试。所以我有。 https://github.com/NickJohn547745/MaterialWidget-MCVE

    1 回复  |  直到 7 年前
        1
  •  2
  •   jpo38    7 年前

    以前从未使用过Qt设计器插件,但这看起来很有趣。

    以下是我为解决你的问题所做的一切。我只是在这里详细介绍这个方法,以便您能够理解它,并可能在以后自己应用它(该方法可以应用于您可能遇到的其他类型的问题)。

    由于我不熟悉Qt设计器插件,我 Qt example for Designer plugins 并使其在我的计算机上工作(很容易做到,只需编译,复制生成的。so到QtDesigner插件的文件夹)。

    然后,我从github中获取了您的示例,对其进行了编译,并检查了拖放是否如您所报告的那样工作。

    然后,我替换了你的 QtMaterialBadgePlugin 通过Qt的重命名副本 AnalogClockPlugin 还有你的 QtMaterialBadge 通过Qt的重命名副本 AnalogClock . 然后我编译了插件,令人惊讶的是。。。。我可以拖放插件项目,它成功了!所以你的代码肯定有问题。

    然后我替换回了“Qt的重命名副本 模拟时钟 “与您的原始 QTMaterialEdge 还有,新的惊喜。。。拖放在Qt设计器中仍然有效。结论:您的 QtMaterialBadgePlugin !

    所以我检查了 QtMaterialBadgePlugin 等级和Qt 模拟时钟插件 班这很简单,因为只有几行代码。。。

    只需更换:

    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设计器中拖放。请注意,您忘记了:

    • 顶层的“ui”XML节点,但这显然是可选的,因为插件即使没有它也可以工作
    • 几何体特性(用于确定拖放过程中使用的默认大小)。这就是你问题的根源!

    现在,您将看到拖放只显示一个灰色的正方形区域(而Qt示例显示模拟时钟的预览),您可能更喜欢在这里预览小部件,我将让您解决这个问题。考虑到你的问题,我想我的回答已经足够了。” 然而,当我将一个小部件拖动到场景中时,什么都没有。场景中没有任何内容,光标中没有任何内容,只是什么都没有 “:现在你得到了一些东西!

    推荐文章