2014-08-31 122 views
1

在Qt Creator中,我已经将一个自定义小部件放到了我的窗体上,看起来很好,但是当我编译并运行时,只有窗体的默认Qt窗口部件(滑块,标签等)显示而不是插件的小部件。自定义Qt小部件实例化,但不显示

在.pro文件中,包含路径和LIBS + =分别指向小部件的头文件目录和.lib文件。

小部件也显示,如果我progrmatically实例吧:

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

但是,这将创建一个widget的新窗口,而不是将它添加到主窗口中的正确位置上。

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

+0

你是如何将自定义小部件“拖放”到表单中的? – RobbieE 2014-08-31 08:55:20

+0

form.ui是Qt创建者项目的一部分,所以双击它,我可以通过将可用控件列(包括自定义控件)中的任何控件拖到窗体上来设计窗体。 – ben 2014-08-31 15:08:26

+0

好吧,这意味着您使用QtDesigner作为表单布局的所见即所得编辑器。如果您的小工具列表中有您的自定义小工具,那么您必须创建了一个定制的QtDesigner小工具插件。你有没有检查你的插件是否正常工作?最具体地说,你的'CustomerWidgetPlugin :: includeFile()'函数返回正确的头文件?还有,你是否已经在生成的UI头文件类中检查了你的自定义窗口小部件生成的'setupUi()'函数? – RobbieE 2014-08-31 15:41:27

回答

1

首先尝试一下。

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

当您设置家长这个小部件将出现在主窗口,而不是在新的窗口。它有效吗?

+0

谢谢你的工作。由于它似乎将它默认放置在左上角,所以它只是缩放它然后将它移动到正确位置的问题。 – ben 2014-08-31 15:12:09

+0

@BenNguyen如果你想在我的回答中使用它,最好的方法是使用布局。最糟糕的方法是使用'setGeometry()'方法 – Chernobyl 2014-08-31 18:35:36

+0

谢谢,如果我不能让窗体自动显示窗口小部件,这是一个很好的解决方法。奇怪,因为生成的setupUi已经创建了该对象并使用它设置了setGeometry。只是没有意义,为什么它没有显示它。 – ben 2014-08-31 22:26:00

0

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

+0

谢谢,由于标准的qt小部件在运行时会自动附加到主窗口,我认为自定义小部件也是如此。似乎在包含所有自定义小部件属性(size/postion/etc)的.ui文件中的信息不会起任何作用。 – ben 2014-08-31 15:29:57