Qt问题集锦:编译运行后界面不更新
问题描述
在使用Qt进行界面设计时,我们经常要修改界面,但有时会莫名其妙的遇到明明修改了界面,运行后界面不更新的问题。初学者遇到这类问题时,往往不知所措,百度也不太容易找到解决办法,通常是重新构建、Debug和Release切换、qmake等各种方式搭配使用,但并不一定解决问题。本文从问题分析入手,帮助大家理解并解决问题。
问题分析
在分析问题前,我们先看下Qt源码和生成文件的目录中,有关界面文件的结构。假设我们选择的是Release编译,勾选Shadow build,如下图所示,会在源码所在根目录自动生成一个Release文件夹,所有的生成文件都会存放在该文件,包括应用程序.exe
在这里,请注意,我们要关注的目标是ui_mainwindow.h文件,问题原因也在这里。点开所有文件目录,我们发现,有两处都有ui_mainwindow.h文件,分别在源码目录、MinGW_32bit-Release目录,测试可发现,后者在界面修改并运行后实时更新,而前者不一定更新。源码目录的ui_mainwindow.h文件没更新,这就是导致问题的根本原因。
问题解决
既然找到了原因,解决问题的方向也就比较明确了,那就是更新源码目录的ui_mainwindow.h文件。这里给出两个解决方法。
方法一:替换源码目录的ui_mainwindow.h文件
既然MinGW_32bit-Release目录的ui_mainwindow.h文件可以随界面更新,那么这个文件复制到源码目录,替换掉原来的ui_mainwindow.h文件,即可解决问题。
方法二:根治法,修改.pro路径,指向更新文件
既然MinGW_32bit-Release目录的ui_mainwindow.h文件可以随界面更新,那么把编译运行调用的UI文件指向更新的ui_mainwindow.h,即可解决问题。操作步骤:
- .pro文件,增加 UI_DIR=./UI,是的UI路径指向相对路径(MinGW_32bit-Release目录),该目录的ui_mainwindow.h实时更新;
- 删除源码目录中的ui_mainwindow.h;
- 清理项目,重新qmake,重新构建。
== 注意:若Debug中有文件,也一并清理或手动删除==
至此,以后再不会被界面不更新的问题困扰。