当前位置:   article > 正文

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

qmake jom

目录

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文件:
  1. SOURCES += main.cpp   //源码
  2. CONFIG += console         //控制台
  • 同一个目录下创建一个main.cpp文件:
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. cout<<"test for qmake"<<endl;
  6. getchar();
  7. return 0;
  8. }
  • 再打开   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
  1. call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
  2. qmake -o makefile testqmake.pro
  3. jom /f makefile
  4. pause
  • main.cpp
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. cout<<"test for qmake"<<endl;
  6. getchar();
  7. return 0;
  8. }
  • 点击make.bat:就会直接生成结果。如果出现这个错误,可能是没用Visual Studio Tools 。而是Mingw的。

LINUX下:

1.环境变量:

env 可以查看

2.查看目录,使用qmake生成makefile

3.执行make

  • 或者,创建一个脚本:

  1. export PATH=/opt/Qt5.9.0/5.9/gcc_64/bin:$PATH
  2. qmake -o makefile testqmake.pro
  3. 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

  1. #ifndef XGLOBAL_H
  2. #define XGLOBAL_H
  3. #include <QtCore/qglobal.h>
  4. #ifdef LIBDLL_LIB
  5. #define XEXPORT Q_DECL_EXPORT
  6. #else
  7. #define XEXPORT Q_DECL_IMPORT
  8. #endif
  9. #endif // XGLOBAL_H

xsocket.h

  1. #ifndef XSOCKET_H
  2. #define XSOCKET_H
  3. #include "xglobal.h"
  4. class XEXPORT XSocket
  5. {
  6. public:
  7. XSocket();
  8. };
  9. #endif

xsocket.cpp

  1. #include "xsocket.h"
  2. #include <iostream>
  3. using namespace std;
  4. XSocket::XSocket()
  5. {
  6. cout<<"create Xsocket"<<endl;
  7. }

 

 

libdll.pro

  1. SOURCES +=xsocket.cpp //源文件
  2. HEADERS += xsocket.h \ //头文件
  3. xglobal.h
  4. TEMPLATE=lib //生成动态库
  5. DEFINES += LIBDLL_LIB //宏定义
  6. DESTDIR = "../../lib" //lib库文件输出路径
  7. DLLDESTDIR = "../../bin" //dll动态文件输出路径
  8. #CONFIG +=staticlib //这个是生成静态库文件
  9. #CONFIG +=console //生成控制台
  10. CONFIG(debug,debug|release){
  11. TARGET = libdll_d
  12. }else{
  13. TARGET=libdll
  14. }
  15. message($$TARGET)

pro项目文件中设置dll和lib的输出路径并测试

测试文件的代码:

testlibdll.pro

  1. QT += core
  2. QT -= gui
  3. INCLUDEPATH += ../libdll //头文件的路径
  4. LIBS += -L../../lib -llibdll //-l是指定链接哪个库
  5. CONFIG += c++11
  6. TARGET = testlibdll
  7. CONFIG += console
  8. CONFIG -= app_bundle
  9. TEMPLATE = app
  10. SOURCES += main.cpp
  1. #include <QCoreApplication>
  2. #include "xsocket.h"
  3. #include <iostream>
  4. using namespace std;
  5. int main(int argc, char *argv[])
  6. {
  7. QCoreApplication a(argc, argv);
  8. cout<<"test lib"<<endl;
  9. XSocket x;
  10. return a.exec();
  11. }

8. 在ubuntu下测试so库

在linux平台下,会自动加成:liblibdll.so

库:

调用:

测试的时候注意动态库的路径问题。

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

10 .qtcreator的qmake跨平台配置

测试代码:

  1. QT += core gui
  2. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
  3. TARGET = mkspecs
  4. TEMPLATE = app
  5. DEFINES += QT_DEPRECATED_WARNINGS
  6. win32:TARGET = winmkspecs
  7. linux:TARGET = linuxmkspecs
  8. win32{
  9. message(win32)
  10. }
  11. linux{
  12. message(linux)
  13. }
  14. !linux{
  15. message("not linux")
  16. }
  17. !win32{
  18. message("not windows")
  19. }
  20. win32|linux{
  21. message("win or linux")
  22. }
  23. message($$QMAKESPEC)
  24. win32-g++{
  25. message(win32-g++)
  26. }
  27. win32-msvc{
  28. message(win32-msvc)
  29. }
  30. SOURCES += \
  31. main.cpp \
  32. widget.cpp
  33. HEADERS += \
  34. widget.h
  35. FORMS += \
  36. widget.ui

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/300199
推荐阅读
相关标签
  

闽ICP备14008679号