☰
插件式框架学习(2)
2026/10/26 2:02:02 网站建设 项目流程

你是否听过一种思路,我会创建一个xxx.ui,我的主进程就是可以加载这个xxx.ui并显示


我指的就是Qt的.ui文件,但是我希望实现一种修改后不需要重新编译运行的效果,就是修改后,我直接打开程序,就可以看到变化,不需要重新编译


可以,Qt 支持这种方式,关键是运行时从外部加载.ui文件。

流程是:

  1. 用 Qt Designer 修改并保存xxx.ui。
  2. 主程序启动时,用QUiLoader读取这个文件。
  3. 再次打开程序,就能看到修改后的界面,无须重新编译。

如果你用 C++,核心代码类似这样:

QApplication app(argc, argv); QFile file(QCoreApplication::applicationDirPath() + "/main.ui"); if (!file.open(QIODevice::ReadOnly)) return 1; QUiLoader loader; QWidget *window = loader.load(&file); if (!window) return 1; window->show(); return app.exec();

需要区分两种用法:

方式修改.ui后是否需要重新编译
用uic生成代码,再编译进程序需要
用QUiLoader在运行时加载外部.ui不需要

是的,你实现一下吧,就基于当前ApplicationHost,我不想使用QMainWindow window;了

新代码:

const QString uiPath = QDir(QCoreApplication::applicationDirPath()) .filePath("ui/main.ui"); QFile file(uiPath); if (!file.open(QIODevice::ReadOnly)) { qCritical().noquote() << "Cannot open UI:" << uiPath << file.errorString(); return false; } QUiLoader loader; // UI 中的相对图片路径以 UI 所在目录为基准。 loader.setWorkingDirectory(QFileInfo(file).absoluteDir()); window.reset(loader.load(&file)); if (!window) { qCritical().noquote() << "Cannot load UI:" << uiPath << loader.errorString(); return false; }

好了,这一版实现了可以动态读取ui文件的逻辑

Release v1.0.2:支持外部 UI 动态加载 · lianpeiliang/LearnFramework

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询