CMake 构建 Qt 应用的若干问题
2024-08-01 22:50:37
指定 Qt 路径
构建时要通过 CMAKE_PREFIX_PATH 指定 Qt 的安装路径,这样应用才能搜索到相关头文件,比如:
1 | cmake -DCMAKE_PREFIX_PATH="C:/Qt/Qt5.7.1-vc141-x64" |
将 .qm 文件添加到 .qrc 中
在开发国际化应用程序时,我们可以将语言文件(.qm)放在磁盘上,也可以考虑放在资源文件中,这样可以避免文件被误删,或被用户胡搞。
资源文件内容可以这样写:
1 | <RCC> |
但这里有个问题,.qm
文件是从.ts
文件编译后才得到的,那么如何在编译后将其写入.qrc
资源文件中呢?
这里得先说说 qt5_create_translation 函数,这个函数会调用lupdate.exe
工具并生成.qm
文件到构建目录下。
那么我们可以单独创建一个i18n.qrc
文件作为模板,并复制到构建目录中,让它和.qm
文件在同一个位置不就行了吗!
1 | # 构建 .qm 文件 |
完美!
编辑 .ui 文件后如何立即更新
在 CMake 中有一个 CMAKE_AUTOUIC 变量,控制是否自动调用uic.exe
来更新ui_*.h
文件。
但问题在于 CMake 在编辑.ui
文件后的第一次运行无法感知到头文件的变化(会显示旧的界面),必须要构建第二次才会 rebuild 相关的源文件,这样才能看到修改后的界面,至于为什么会这样我也不清楚。
研究了一番后发现用手动生成 UI 头文件可以解决这个问题,CMake 大概是这样:
1 | # 关闭,不要自动 uic |
这里的关键就在 qt5_wrap_ui 函数,这是手动生成ui_*.h
文件的方法。这种方式生成后可以立即引起 rebuild,这样启动程序后就是最新的界面。
相关阅读
How to Integrate Qt4 qm files into binary using cmake and QRC?