在运行时向主窗口添加Qt小部件
Adding Qt Widgets to MainWindow at Run Time
我的情况如下:
我正在开发一个c++应用程序在Creator/Designer与Qt 5.6在Windows 7 64位
我正在设计一个骨架GUI,它自己不会做很多事情。它主要提供了一种机制来集成由其他开发人员构建的工程工具(如果您愿意,请不要将插件与Qt本身混淆)。框架将安装在办公室周围的工作站上,它应该能够从网络位置拉出这些插件并将它们安装到框架中,而无需重新编译。在启动时,框架应该读取它的插件列表,并相应地构建它的菜单、工具栏和UI Widgets。
所以问题最终是: Qt是否提供了一种在运行时将。ui文件和相关代码添加到QMainWindow的方法?
是否可以这样做,即在创建新插件时不必更改、重新编译和重新部署框架?
这是一个在Designer中创建的计算器UI被动态地拉入另一个程序的例子,但似乎这个方法只使用。UI文件。换句话说,框和按钮是从.ui文件中提取的,但其逻辑是在"框架"中实现的。我需要做一些类似于在运行时将计算器嵌入为其自己的全功能小部件的事情。
附带问题:如果Qt没有提供一个很好的机制,那么让其他开发人员为我的特定情况将他们的插件编译为dll是否有缺点?
对于Qt应用程序的功能有一些基本的误解。你看到的每一个小部件都是通过执行c++代码实例化的——这一切都是在运行时动态完成的。uic将foo.ui
文件转换为ui_foo.h
文件。它定义了一个类,可以用子类填充基小部件。
您可以使用QUiLoader
来解析.ui
文件并在运行时实例化其对象,但是这样做没有什么意义,因为其他代码仍然是c++,所以最简单的是有一个插件项目将.ui
文件转换为c++,然后沿着其他代码编译并将它们链接到插件dll中。
插件是简单的.dll
s,理想情况下提供Qt插件系统可使用的功能,具有所需的所有代码:通过uic来自.ui
文件的代码,以及插件作者手工编写的代码。插件是一个对象工厂:它将创建QObject
实例,然后为您的骨架提供所需的所有小部件和其他对象。
。这些插件是.dll
s,你当然可以自由地从网络位置下载到缓存文件夹,并在运行时打开它们。
要获得灵感,您应该查看Qt Creator本身的源代码。它是一个完全基于插件的应用程序,核心是一个插件容器,没有做太多的事情。也许您可以重用Qt Creator核心作为您的应用程序的基础,不做任何更改或只做很小的更改。它将附带一个网络发现插件,从服务器获取剩余的插件并进入缓存,然后加载它们。这样一个插件大概可以用150行代码编写,不包括最小的样板文件:)
- 由于PC显示设置的更改,Qt小部件被部分剪裁
- 有没有办法区分Qt小部件是通过鼠标单击还是通过按表键获得焦点?
- 在Qt小部件应用程序中,在重载的"paintEvent"中的"setValue"
- Qt小部件中的摄像头访问
- 精灵动画查看器应该使用哪些Qt小部件
- Qt小部件将子布局堆叠在彼此之上
- 将STL文件添加到QT小部件
- Qt小部件应用程序"Library not registered"错误
- 为什么我的Qt小部件的焦点被改变了?
- 如何将开关QML添加到QT小部件
- 从另一个线程更新QT小部件的一种详细方法
- QT小部件应用程序输出到控制台
- 在屏幕上的确切位置保存和恢复Qt小部件
- 在Qt小部件应用程序中显示cmd终端
- QSqlError("',"',"',) 在 QT 小部件应用程序中
- 处理自定义QT小部件中的输入事件
- 未找到"png.h"文件,当包含在Qt小部件项目中时
- 从 Qt 小部件应用程序调用 pyqt widget
- 当您通过Qt小部件打开文件时,是否可以'pop-up'文件?
- 如何在Qt小部件应用程序中翻译外部文件中的字符串?