【问题标题】:Custom Qt Widget instantiated but does not show自定义 Qt Widget 已实例化但未显示
【发布时间】:2014-08-31 06:03:34
【问题描述】:

在 Qt Creator 中,我将一个自定义小部件放到了我的表单上,它看起来不错,但是当我编译和运行时,只显示表单的默认 Qt 小部件(滑块、标签等),但不显示插件的小部件。

在.pro文件中,include路径和LIBS+=分别指向widget的头目录和.lib文件。

如果我以编程方式实例化小部件,它会显示:

cwidget *cw = new cwidget(); 
cw->show() 

但这会使用小部件创建一个新窗口,而不是将其添加到主窗口上的正确位置。

难道没有办法让表单中的自定义小部件对象自动显示,就像所有 qt 标准小部件一样?

【问题讨论】:

  • 您是如何将自定义小部件“拖放”到表单中的?
  • form.ui 是 Qt creator 项目的一部分,所以双击它,我可以通过将可用小部件(包括自定义小部件)列中的任何小部件拖动到表单上来设计表单。
  • 好的,这意味着您正在使用 QtDesigner 作为表单布局的所见即所得编辑器。如果您的小部件列表中有您的自定义小部件可用,那么您必须创建了一个自定义 QtDesigner 小部件插件。您是否检查过您的插件是否正常工作?最具体地说,您的 CustomerWidgetPlugin::includeFile() 函数正在返回正确的头文件?此外,您是否检查了生成的 UI 标头类中的 setupUi() 函数,您的自定义小部件正在正确生成?
  • 我将 dll 放在了创建者插件文件夹中,所以不知道如何判断它是否正常工作.. 小部件的图标仅显示 Qt 徽标,而不是小部件本身的迷你版本。 . 但是,当我将它拖到表单上时,它会正确显示。但是在构建之后,生成的 .h 文件在 setupUi() 中有小部件条目: ( cw = new cwidget(centralwidget); cw->setObjectName(QStringLiteral("cwg")); cw->setGeometry(QRect(310, 310) , 16, 16)); ) 在运行时,它是查找插件的 .h 文件还是只查找生成的 header/.ui 文件和链接的 .lib 文件?

标签: qt widget qt-creator


【解决方案1】:

首先试试这个。

cwidget *cw = new cwidget(this); //for example in the MainWindow constructor
cw->show(); 

当您设置父级时,此小部件将出现在主窗口中,而不是新窗口中。有效吗?

【讨论】:

  • 感谢工作。由于它似乎默认将其放置在左上角,因此只需缩放它然后将其移动到正确的位置即可。
  • @BenNguyen 如果您想按照我在回答中所写的那样使用它,那么最好的方法是使用布局。最糟糕的方法是使用 'setGeometry()' 方法
  • 谢谢,如果我无法让表单自动显示小部件,这是一个很好的解决方法。奇怪的是,生成的 setupUi 已经在创建对象并使用它设置 setGeometry。只是没有意义,为什么它不显示它。
【解决方案2】:

您需要以某种方式将新小部件连接到窗口。您可以使用构造函数或 setParent() 直接将主窗口设置为父窗口。更好的方法是将您的小部件附加到窗口的布局中。

【讨论】:

  • 谢谢,因为标准的 qt 小部件在运行时会自动附加到主窗口,我认为自定义小部件也是如此。似乎 .ui 文件中包含所有自定义小部件属性(大小/位置/等)的信息将毫无用处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多