C++QT5跨平台界面编程原理--qmake在QtCreator中的使用

目录

1.qt项目由源码和界面资源文件到程序的步骤分析

2.配置vs和qmake环境变量执行qmake生成makefile

 3.通过批处理完成qt项目编译并移植到ubuntu下完成qt项目配置和编译

4.qmake的pro项目导出为vs项目

5. qmake引入qt库创建窗口设置头文件

6. qmake语法设置pro中的库导入路径和导入库导入opencv

7. qmake创建动态链接和静态链接库并在windows中输出dll和lib

8. 在ubuntu下测试so库

9. qtcreator的debug版本和release版本配置和设置

10 .qtcreator的qmake跨平台配置

 

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

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值