目录
2.配置vs和qmake环境变量执行qmake生成makefile
3.通过批处理完成qt项目编译并移植到ubuntu下完成qt项目配置和编译
6. qmake语法设置pro中的库导入路径和导入库导入opencv
7. qmake创建动态链接和静态链接库并在windows中输出dll和lib
9. qtcreator的debug版本和release版本配置和设置
1.qt项目由源码和界面资源文件到程序的步骤分析
1.编译pro生成makefile(经常出现问题自己要执行这一步)
2.windows下,例如,vs编译的话,就用jom(生成界面源码)或make
- 生成界面代码
- 生成信号槽代码
回顾:
2.配置vs和qmake环境变量执行qmake生成makefile
- 创建testqmake.pro文件:
SOURCES += main.cpp //源码
CONFIG += console //控制台
- 同一个目录下创建一个main.cpp文件:
#include <iostream>
using namespace std;
int main()
{
cout<<"test for qmake"<<endl;
getchar();
return 0;
}
- 再打开 cmd ,找到这个路径:
qmake -o makefile testqmake.pro
注意:就会有环境变量没设置的错误:
- 可以借鉴vs的环境变量 例如:vcvsall.bat
同目录下创建make.bat 文件: 加引号是为了防止从空格出断开
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"
在cmd下再次指向上述语句:
- 现在执行:
- 生成:
注意:
如果使用qmake 或者 jom 要配置环境变量
第一个是qmake 第二个是 jom的路径
- jom生成exe文件
3.通过批处理完成qt项目编译并移植到ubuntu下完成qt项目配置和编译
- 现在可以删除以前生成的文件,更改为:make.bat
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
qmake -o makefile testqmake.pro
jom /f makefile
pause
- main.cpp
#include <iostream>
using namespace std;
int main()
{
cout<<"test for qmake"<<endl;
getchar();
return 0;
}
- 点击make.bat:就会直接生成结果。如果出现这个错误,可能是没用Visual Studio Tools 。而是Mingw的。
LINUX下:
1.环境变量:
env 可以查看
2.查看目录,使用qmake生成makefile
3.执行make
- 或者,创建一个脚本:
export PATH=/opt/Qt5.9.0/5.9/gcc_64/bin:$PATH
qmake -o makefile testqmake.pro
make
4.qmake的pro项目导出为vs项目
第一种:导出vs的工程
生成:
第二种:直接在VS插件中打开
5. qmake引入qt库创建窗口设置头文件
加入qt库:
编写代码:
注意:多看文档,加什么怎么加,都在文档里有
加载qt内部库
头文件引用:
message可以打印出路径来查看
opencv2 在include 路径下。
6. qmake语法设置pro中的库导入路径和导入库导入opencv
先看一下加了opencv的库:
就会报错:缺少库
库引|用和库路径指定
说明:DESTDIR 这是指定运行的路径(或者在项目里直接添加RUN里,也可以在这里)
TARGET:指定生成的名字
结果:
7. qmake创建动态链接和静态链接库并在windows中输出dll和lib
1.QTCreator创建一个Library c++共享库
.cpp文件 构造函数
头文件:
这里有 宏 判断:区分 库本身调用 还是 导入调用
2.手动创建
xglobal.h
#ifndef XGLOBAL_H
#define XGLOBAL_H
#include <QtCore/qglobal.h>
#ifdef LIBDLL_LIB
#define XEXPORT Q_DECL_EXPORT
#else
#define XEXPORT Q_DECL_IMPORT
#endif
#endif // XGLOBAL_H
xsocket.h
#ifndef XSOCKET_H
#define XSOCKET_H
#include "xglobal.h"
class XEXPORT XSocket
{
public:
XSocket();
};
#endif
xsocket.cpp
#include "xsocket.h"
#include <iostream>
using namespace std;
XSocket::XSocket()
{
cout<<"create Xsocket"<<endl;
}
libdll.pro
SOURCES +=xsocket.cpp //源文件
HEADERS += xsocket.h \ //头文件
xglobal.h
TEMPLATE=lib //生成动态库
DEFINES += LIBDLL_LIB //宏定义
DESTDIR = "../../lib" //lib库文件输出路径
DLLDESTDIR = "../../bin" //dll动态文件输出路径
#CONFIG +=staticlib //这个是生成静态库文件
#CONFIG +=console //生成控制台
CONFIG(debug,debug|release){
TARGET = libdll_d
}else{
TARGET=libdll
}
message($$TARGET)
pro项目文件中设置dll和lib的输出路径并测试
测试文件的代码:
testlibdll.pro
QT += core
QT -= gui
INCLUDEPATH += ../libdll //头文件的路径
LIBS += -L../../lib -llibdll //-l是指定链接哪个库
CONFIG += c++11
TARGET = testlibdll
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
#include <QCoreApplication>
#include "xsocket.h"
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
cout<<"test lib"<<endl;
XSocket x;
return a.exec();
}
8. 在ubuntu下测试so库
在linux平台下,会自动加成:liblibdll.so
库:
调用:
测试的时候注意动态库的路径问题。
9. qtcreator的debug版本和release版本配置和设置
10 .qtcreator的qmake跨平台配置
测试代码:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = mkspecs
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
win32:TARGET = winmkspecs
linux:TARGET = linuxmkspecs
win32{
message(win32)
}
linux{
message(linux)
}
!linux{
message("not linux")
}
!win32{
message("not windows")
}
win32|linux{
message("win or linux")
}
message($$QMAKESPEC)
win32-g++{
message(win32-g++)
}
win32-msvc{
message(win32-msvc)
}
SOURCES += \
main.cpp \
widget.cpp
HEADERS += \
widget.h
FORMS += \
widget.ui