Linux和windows中qt的安装、使用、打包与卸载

一、下载qt

官网下载,选择qt/下的完整安装包,会直接安装qtcreator:

在这里插入图片描述

选择你要安装版本下的.run(Linux)或.exe(windows)文件下载

在这里插入图片描述

二、ubuntu安装qt

2.1 安装qt

cd ~/Downloads
sudo chmod +x qt-opensource-linux-x64-5.12.8.run
sudo ./qt-opensource-linux-x64-5.12.8.run

一路默认,安装过程中需要登陆的话,断网后重新安装,中间选择安装模块根据需要选择,qtcreator和gcc编译器一定要安装,图中漏选了编译器

在这里插入图片描述

记住使用sudo是将qt安装到了/opt目录下,后面卸载需要知道安装目录

2.2 配置qt

安装 g++

sudo apt-get install g++

安装 openGL 库

sudo apt-get install mesa-common-dev

添加环境路径

sudo gedit ~/.bashrc
export PATH=/opt/Qt5.12.8/Tools/QtCreator/bin:$PATH

打开终端,运行qtcreator

qtcreator

在这里插入图片描述

三、windows安装qt

双击安装包安装,不想登录账号就先断网,一路默认,只是下面选择要安装的模块,最重要的编译器和QtCreator一定要安装:

在这里插入图片描述
在这里插入图片描述

四、简单使用qt

4.1 创建项目

点击NEW

在这里插入图片描述

第一项为GUI,第二项为控制台编程,以选择GUI为例,填写项目名称,选择路径,并确定是否设置为默认路径:

在这里插入图片描述

next,Details设置类(窗口)名称,选择三种基类,设置是否生成ui,然后一路默认,创建完成

在这里插入图片描述

4.2 调试项目

在这里插入图片描述

双击ui文件设计界面,左侧添加控件,右侧设置属性,中间为设置界面,下方连接信号槽:

在这里插入图片描述

左下角从下到上编译、调试、运行以及设置编译模式:

在这里插入图片描述

4.3 cmake编译

创建项目时编译系统选择cmake

在这里插入图片描述
自动生存CMakeLists.txt
在这里插入图片描述
编译的时候可以直接使用qtcreator,也可以使用cmake方式,进入项目文件夹下:

mkdir build && cd build
cmake ..
make -j4

五、C++(qt)与Python混合编程

以下内容需要注意Qt的位数需要和Python的位数一致(64/32),例如我的Qt5.12.8(MinGW64_bit)+Python3.10.0(64bit)(Windows) / Python3.8.0(64bit) (ubuntu)

5.1 配置Python运行环境(单个脚本运行)

在Tools->Options…->Environment->External Tools左下角添加新的目录以及工具(名称自定义)

在这里插入图片描述

在右侧填入配置:
Python解释器:找到自己安装的python的目录下的python.exe,我这里是(D:\Python\python.exe),
参数:%{CurrentDocument:FilePath}
工作目录:%{CurrentDocument:Path}

对于Linux:
Python解释器:/usr/bin/python3.8
在这里插入图片描述

5.2 添加Python脚本并运行

在项目中新建文件,选择Python脚本文件

在这里插入图片描述

在新建的脚本文件中编写代码,如(matplotlib等其他Python库需要去命令行 pip install xxx 安装):

# This Python file uses the following encoding: utf-8
import matplotlib.pyplot as plt
# if __name__ == "__main__":
#     pass
def temperImg():
    plt.plot([1,2,1,4])
    plt.show()
temperImg()

点击Tools->External找到刚刚添加的Python解释器运行:

在这里插入图片描述
在这里插入图片描述

5.3 混合编程

5.3.1 配置Python库

创建了qt工程后编译生成release文件夹,将Python安装的文件夹整个复制到release文件夹下,以便Qt生成的可执行程序能够在当前目录下找到Python(release模式下,方便后面打包)

在这里插入图片描述

项目文件.pro 添加Python依赖头文件和库(在Python的include和libs文件夹内),指定位置为刚刚复制的文件夹内(注意-LD不是分开的,没有写错)

INCLUDEPATH += -I D:\qt5.12.8\works\build-qtEnvi-Desktop_Qt_5_12_8_MinGW_64_bit-Release\release\Python310\include
LIBS += -LD:\qt5.12.8\works\build-qtEnvi-Desktop_Qt_5_12_8_MinGW_64_bit-Release\release\Python310\libs -lpython310

在这里插入图片描述

对于Linux:

INCLUDEPATH += -I /usr/include/python3.8/
LIBS += -L /usr/lib/python3.8/config-3.8-x86_64-linux-gnu -lpython3.8

5.3.2 编写程序

scriptFirst.py代码:

import matplotlib.pyplot as plt
def temperImg():
    plt.plot([1,2,1,4])
    plt.show()
temperImg()

C++调用Python的代码和函数(我直接写在了主函数中),有几点需要注意(代码中也有):

  • 由于python头文件中的slots和Qt中的信号槽相冲突,通过取消再恢复定义来解决
  • 由于需要打包发布应用程序,因此需要指定可执行文件寻找的Python主目录
  • 在创建.py文件时不要将.py文件命名为test.py,会和python定义的test.py重复,运行会报错找不到.py文件
  • 将.py文件中的函数名命名为fun()可能会报错
#include "qtenvimain.h"

// 由于python头文件中的slots和Qt中的信号槽相冲突,通过以下代码解决
#undef slots
#include <Python.h>
#define slots Q_SLOTS

#include <QApplication>
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    
    
    QApplication a(argc, argv);
    qtEnviMain w;
    w.show();

	// 0 准备
    // 0.1 由于需要打包发布应用程序,因此需要指定可执行文件寻找的Python主目录,通过以下代码实现
    QString path = QCoreApplication::applicationDirPath() + "/Python310";
    Py_SetPythonHome((wchar_t*)(reinterpret_cast< const wchar_t* >(path.utf16())));
    //  0.2 初始化python模块
    Py_Initialize();
    // 查看是否成功初始化
    if ( !Py_IsInitialized() ){
    
    
        return -1;
    }
    // PyRun_SimpleString:简单执行python命令的函数
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.argv = ['python.py']");
    // 0.3 添加目录地址:把python文件放在此程序debug/realse文件内,
    // 否则会出现没有找到python文件的错误,还有一种可能是python文件语法错误也会找不到python文件
    PyRun_SimpleString("sys.path.append('./')");

    // 无参无返回值调用
    // 1 导入scriptSecond.py模块
    PyObject* pModule;
    pModule = PyImport_ImportModule("scriptFirst");
    // 判断.py文件是否能调用
    if (!pModule){
    
    
        printf("Cant open python file!\n");
        return -1;
    }
    // 2 获取scriptSecond模块中的temperImg函数
    PyObject* pFunhello;
    pFunhello = PyObject_GetAttrString(pModule,"temperImg");
    if(!pFunhello){
    
    
        cout<<"Get function hello failed"<<endl;
        return -1;
    }
    // 3 无参调用temperImg函数
    PyObject_CallObject(pFunhello,NULL);

    // 4 调用结束,清理Python
    Py_Finalize();

    return a.exec();
}

5.3.3 运行

ctrl+r 运行整个项目,运行结果是Cant open python file ! 需要将编写的Python脚本(scriptFirst.py)也复制到release文件夹下(说实话有点麻烦,在编写py文件的时候,但是还没找到更好的办法解决),再次运行成功

在这里插入图片描述

Linux同样复制到(没有子文件夹):

在这里插入图片描述

六、qt程序打包

6.1 Windows下

6.1.1 仅C++程序的打包

在release模式下编译程序,然后将release文件夹下的.exe文件复制到要制作的(随便/项目需要,自定义)程序文件夹下,并复制路径D:\qt5.12.8\works\MyAPP(你自己的):
在这里插入图片描述

win搜索qt,打开带有终端标志的qt程序

在这里插入图片描述
cd 到打包程序的文件夹下,使用windeployqt.exe打包程序(自动找到程序依赖的库并复制到此文件夹下):
在这里插入图片描述
打包成功,点击.exe文件即可运行程序
在这里插入图片描述

6.1.2 与Python混合程序的打包

(1)首先将编写的.py文件、Python安装文件夹以及其下的python310.dll和python3.dll文件复制到打包程序文件下:

在这里插入图片描述

(2)按照windeployqt常规方式打包.exe

在这里插入图片描述

打包结束后,可以换一台没有qt和python运行环境的电脑下运行.exe文件进行测试是否裸机打包成功

七、Ubuntu卸载qt

安装时说了使用sudo将qt安装到了/opt目录下,进入到qt的安装目录下,运行./MaintenanceTool
在这里插入图片描述
根据提示卸载:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zardforever123/article/details/127132687