最近,项目方面需要将一个原本用VS+Qt开发的界面移植到Qt Creator上面。在这个过程中遇到了一些bug然后不断debug,打算把它们分点写下来,希望对有同样需求的朋友能有一些帮助。
目前Qt的开发环境一般有两种,一种是直接使用Qt Creator(下称为“前者”),而另外一种是使用VS+Qt(下称为“后者”)进行开发。在我们的项目中,考虑到前者可以跨平台,比较方便开发,所以我们才有了移植代码的打算。
下面我分点叙述过程中发现的关于两种开发环境的一些小差异:
1、关于界面文件.ui构建的头文件的include位置
在前者中,界面文件构建的头文件(比如:addressbook.ui对应的ui_addressbook.h),在相应的addressbook.cpp中包含(#include "ui_addressbook.h")。而后者则是在addressbook.h文件中(#include "ui_addressbook.h")。所以有时候在前者的addressbook.h文件中使用一些类的时候,需要注意一下是否已经将该类所在的头文件include进来了。
2、关于定义界面类实例(*ui或者ui)的形式
下面是我在两个项目中的截图,分别使用前者和后者开发。
前者默认定义界面类的指针*ui:
后者默认定义界面类的变量ui:
所以在调用ui的成员函数以及成员变量的时候,前者只能使用“->”,而后者可以使用“.”和“->”。
3、使用数据库以及xml类
在我们的项目中,使用到了数据库相关以及和xml文件操作相关的类。
对于前者,需要在.pro文件中添加QT+=sql和QT+=xml,并include相应的头文件即可。
而对于后者,不需要在.pro文件中添加语句,但是,在新建项目的时候应该勾选相应的选项如下图:
按照上图新建之后,右键项目属性,查看附属依赖项,就会看到添加了相应的.lib文件:
这里需要强调另外的一个问题,这里的.lib都是以d结尾的,也就是说,都是用于Debug模式下的,如果要使用Release模式下的,还需要添加去掉d的.lib(添加的方法很简单,直接在已有的.lib下面输入即可),比如:
确定之后,就可以在后者随意使用Debug和Release两种模式了。
4、使用OpenCV
要想使用OpenCV,当然最最首先是需要下载OpenCV库。
在前者,使用OpenCV,需要在.pro文件中添加如下语句:
[plain] view plain copy
INCLUDEPATH+=D:\Work_Software\OpenCV3.1\opencv\build\include
LIBS+=D:\Work_Software\OpenCV3.1\opencv\build\x64\vc12\lib\*.lib
当然,等号右边的路径得改成你电脑上的opencv相应的include和lib文件夹的路径。
而在VS+Qt中使用OpenCV的方法,和在VS中配置OpenCV的方法是一样的,可以直接添加相应的属性表,或者再次对项目进行配置。具体的可以参考我另外的一片博文:
http://blog.csdn.net/qq295456059/article/details/50815290
5、关于当前路径
比如,有这样的一句代码:
[cpp] view plain copy
Mat img = imread("me.jpg");
想要读入一张名称为me的,jpg文件,那么应该将文件放在什么位置呢?
对于前者来说,
如果是在Debug模式下,则默认的当前目录是与工程文件在同一文件夹下的类似于“build-Test_Project-Desktop_Qt_5_7_0_MSVC2013_64bit-Debug”命名格式的文件。
如果是在Release模式下,则默认的当前目录是与工程文件在同一文件夹下的类似于“build-Test_Project-Desktop_Qt_5_7_0_MSVC2013_64bit-Release”命名格式的文件。
也就是说,需要将me.jpg放在相应的文件夹下面,不然是读不进来的。
而对于后者来说,
当前目录指的是项目文件夹。
还有,之前一直很好奇#include <QLabel>和#include “qlabel.h”这两种形式有什么区别,后来直接打开QLabel文件,发现里面有且仅有一句代码:没错,就是:#include “qlabel.h” 。。。 。。。
以上就是我移植过程中发现的两者的一些小区别,希望能给有需要的朋友一些帮助。
目前Qt的开发环境一般有两种,一种是直接使用Qt Creator(下称为“前者”),而另外一种是使用VS+Qt(下称为“后者”)进行开发。在我们的项目中,考虑到前者可以跨平台,比较方便开发,所以我们才有了移植代码的打算。
下面我分点叙述过程中发现的关于两种开发环境的一些小差异:
1、关于界面文件.ui构建的头文件的include位置
在前者中,界面文件构建的头文件(比如:addressbook.ui对应的ui_addressbook.h),在相应的addressbook.cpp中包含(#include "ui_addressbook.h")。而后者则是在addressbook.h文件中(#include "ui_addressbook.h")。所以有时候在前者的addressbook.h文件中使用一些类的时候,需要注意一下是否已经将该类所在的头文件include进来了。
2、关于定义界面类实例(*ui或者ui)的形式
下面是我在两个项目中的截图,分别使用前者和后者开发。
前者默认定义界面类的指针*ui:
后者默认定义界面类的变量ui:
所以在调用ui的成员函数以及成员变量的时候,前者只能使用“->”,而后者可以使用“.”和“->”。
3、使用数据库以及xml类
在我们的项目中,使用到了数据库相关以及和xml文件操作相关的类。
对于前者,需要在.pro文件中添加QT+=sql和QT+=xml,并include相应的头文件即可。
而对于后者,不需要在.pro文件中添加语句,但是,在新建项目的时候应该勾选相应的选项如下图:
按照上图新建之后,右键项目属性,查看附属依赖项,就会看到添加了相应的.lib文件:
这里需要强调另外的一个问题,这里的.lib都是以d结尾的,也就是说,都是用于Debug模式下的,如果要使用Release模式下的,还需要添加去掉d的.lib(添加的方法很简单,直接在已有的.lib下面输入即可),比如:
确定之后,就可以在后者随意使用Debug和Release两种模式了。
4、使用OpenCV
要想使用OpenCV,当然最最首先是需要下载OpenCV库。
在前者,使用OpenCV,需要在.pro文件中添加如下语句:
[plain] view plain copy
INCLUDEPATH+=D:\Work_Software\OpenCV3.1\opencv\build\include
LIBS+=D:\Work_Software\OpenCV3.1\opencv\build\x64\vc12\lib\*.lib
当然,等号右边的路径得改成你电脑上的opencv相应的include和lib文件夹的路径。
而在VS+Qt中使用OpenCV的方法,和在VS中配置OpenCV的方法是一样的,可以直接添加相应的属性表,或者再次对项目进行配置。具体的可以参考我另外的一片博文:
http://blog.csdn.net/qq295456059/article/details/50815290
5、关于当前路径
比如,有这样的一句代码:
[cpp] view plain copy
Mat img = imread("me.jpg");
想要读入一张名称为me的,jpg文件,那么应该将文件放在什么位置呢?
对于前者来说,
如果是在Debug模式下,则默认的当前目录是与工程文件在同一文件夹下的类似于“build-Test_Project-Desktop_Qt_5_7_0_MSVC2013_64bit-Debug”命名格式的文件。
如果是在Release模式下,则默认的当前目录是与工程文件在同一文件夹下的类似于“build-Test_Project-Desktop_Qt_5_7_0_MSVC2013_64bit-Release”命名格式的文件。
也就是说,需要将me.jpg放在相应的文件夹下面,不然是读不进来的。
而对于后者来说,
当前目录指的是项目文件夹。
还有,之前一直很好奇#include <QLabel>和#include “qlabel.h”这两种形式有什么区别,后来直接打开QLabel文件,发现里面有且仅有一句代码:没错,就是:#include “qlabel.h” 。。。 。。。
以上就是我移植过程中发现的两者的一些小区别,希望能给有需要的朋友一些帮助。