在Qt Creator中向ui文件添加用户构建的小部件

8
qt creator的qt designer部分有许多内置小部件。但是,假设我想将在同一qt项目中创建的自定义小部件添加到窗口的ui文件中。通过执行以下步骤:
1. 创建一个带有主窗口的新Qt GUI应用程序,我们将称之为窗口A。 2. 向项目中添加一个新的小部件,该小部件仅使用标准UI组件,例如按钮。我们将称此小部件为B。 3. 将小部件B的实例添加到窗口A中。
现在,我知道一种方法可以做到这一点,即:
1. 在窗口A中,添加一个空白小部件(或来自可能小部件列表的容器部分的小部件容器)。我们将称此小部件为C。 2. 将其(小部件C)提升为小部件B。
然而,这种方法的问题是Qt Creator的设计师将其视为通用QWidget。因此,您无法像将其添加到分裂器或连接特定于小部件的信号/插槽等操作。
那么,在使用qt creator的ui文件中,是否有其他方法将小部件B添加到窗口A中?谢谢。

2
您可以为设计师创建自定义小部件:http://developer.qt.nokia.com/doc/qt-4.8/designer-creating-custom-widgets.html - Lol4t0
嗯...看起来,如果我按照这个流程操作,任何想要编辑此项目的人都必须单独安装插件,是吗?如果可能的话,我希望能够直接打开项目而无需安装插件。 - Leif Andersen
@LeifAndersen 这不需要插件打开项目,只需查看和与新挂件交互即可。根据您的项目和团队,插件的中央仓库可能是一个选择;这是我们公司的做法。然而,除此之外我不知道其他的选择了。 - Caleb Huitt - cjhuitt
2个回答

2

我不确定是否正确理解了你的问题,所以可能会问错问题。你确定你的“B”小部件是QDesignerCustomWidgetInterface的子类吗?这应该公开你的小部件/插件提供的所有内容...

最后注意:我的一个朋友尝试添加像你一样的自定义小部件。在Lol4t0告诉你的过程的最后,他发现必须使用与qtcreator/designer编译时相同的编译器来编译插件。这是因为我们知道c++不保持ABI兼容性(而不是例如C语言)的东西,如:名称处理可以从编译器更改,数据如何加载到寄存器中也可能会更改等等。我的朋友尝试使用mingw编译插件,但他发现qtcreator是使用visual studio编译器编译的。因此,如果您想在Windows上部署插件,您需要使用visual studio编译插件或从头开始编译qtcreator/designer。


1
我知道这是一个非常古老的问题,而且我不确定2012年Designer的功能如何,但我在谷歌搜索其他内容时遇到了这个问题,并想添加一些缺失的信息:
然而,Qt Creator的设计器将其视为通用QWidget。因此,您无法执行诸如将其添加到拆分器或连接特定于小部件的信号/槽等操作。
现在可以毫无问题地将通用QWidgets添加到分隔符中。
至于信号和槽,您可以像这样使用它们:
1. 将小部件提升为自定义小部件后,右键单击它并从上下文菜单中选择“更改信号/插槽...”。 2. 在此处添加任何要在Designer / Creator中使用的自定义信号和插槽的签名。
现在,这些信号和插槽将像任何其他信号和插槽一样在Designer中可访问。
唯一无法通过推广小部件获得的东西是在属性面板中访问自定义属性;为此,是的,您需要通过自定义小部件创建过程进行操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接