是否可以在 Qt Designer 中使用来自 Qt Designer 的 .ui 文件作为自定义小部件?
Posted
技术标签:
【中文标题】是否可以在 Qt Designer 中使用来自 Qt Designer 的 .ui 文件作为自定义小部件?【英文标题】:Is it possible to use a .ui file from Qt Designer in Qt Designer as a custom widget? 【发布时间】:2020-02-08 22:16:34 【问题描述】:我一直认为可以在 Qt-Designer 中制作一个新的 Widget,将其保存为 .ui 文件;然后将该 .ui 文件作为自定义小部件导入 Qt Designer 中。但是,现在我决定尝试一下,我正在网上寻找,找不到任何参考。
那么,有人可以确认,是否可以仅使用 .ui 文件作为 Qt Designer 中自定义小部件文件的模板 - 无需任何 C++ 或 Python 代码?如果是这样,你是怎么做到的?
【问题讨论】:
不,这是不可能的,因为 .ui 只是一组实现 Qt Widget 的指令,但它不是 Qt Widget。 感谢@eyllanesc - 随时发布作为答案,我会接受! 【参考方案1】:@eyllanesc 提供的答案是正确的,从字面上理解您的问题。您说:“没有任何 C++ 或 Python 代码”,这就是问题所在。但如果你能放弃这个限制,还是有希望的。
“.ui”文件是 XML。通常,在 C++ 项目中,Qt 的“uic”工具将每个“.ui”文件转换为包含在源 .cpp 文件中并照常编译的头文件。不过,还有另一种方法。 Qt 有一个uitools
模块,为来自.ui 文件的loading widgets at runtime 动态提供QUiLoader
类(包括运行时连接的信号和组件之间的槽)。有许多示例说明了这种技术:Text Finder、Calculator Builder 和 World Time Clock Builder。您也可以为设计器create plugins,将您自己的小部件添加到设计器调色板,如World Time Clock Plugin 示例。
所以建议是:创建一个在运行时加载 .ui 文件的设计器插件小部件(从磁盘文件或嵌入式资源)。这需要一些代码和工作,但它只会编译和安装一次,并且您可以在具有不同 .ui 格式的不同项目中多次实例化它。
【讨论】:
以上是关于是否可以在 Qt Designer 中使用来自 Qt Designer 的 .ui 文件作为自定义小部件?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将模型对象的插槽连接到 QT4 -Designer 中的 GUI?
带有 Qt Designer 的 pyqtgraph:如何将 PlotItems 添加到 GraphicsLayoutWidget