Qt vs2017程序打包发布(图文详细步骤)

Posted cpp_learner

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt vs2017程序打包发布(图文详细步骤)相关的知识,希望对你有一定的参考价值。

你是否还在苦恼,自己辛辛苦苦写的代码程序,仅仅只能在自己电脑上运行,却无法发送到好友、舍友电脑上运行,这怎么能行,自己好不容易写的一个逼格高点的程序,怎能不分享给好友、舍友呢?今天这篇文章就教你Qt程序如何打包发送给好友、舍友们运行体验,让你成为他们中最靓的仔!o( ̄︶ ̄)o


一、撸代码

第一步首先是得有代码啊!
当然,这篇博客不会教你怎么写代码,最下面我会将我的测试代码放在哪里,有需要的自提。

首先需要写一个简单的应用程序,需要包含功能:点击按钮界面显示图片;点击按钮开始播放音频;单击按钮打开文件读取文件中的全部内容显示在界面上。

我们需要实现如上的全部功能,下面是一些设置路径的代码

  1. 图片路径

    // 相对路径
    //ui.label->setPixmap(QPixmap("./picture/1.jpg"));	// 设置图像属性
    
    // 绝对路径
    ui.label->setPixmap(QPixmap("E:\\\\QTproject\\\\Text\\\\Text\\\\1.jpg"));	// 设置图像属性
    
  2. 音频路径

    // 相对路径
    //player->setMedia(QUrl::fromLocalFile("./picture/徐梦圆 - China-X.mp3"));	// 设置媒体流
    
    // 绝对路径
    player->setMedia(QUrl::fromLocalFile("E:\\\\QTproject\\\\Text\\\\Text\\\\徐梦圆 - China-X.mp3"));	// 设置媒体流
    
  3. 文件路径

    // 相对路径
    //ui.label->setPixmap(QPixmap("./picture/1.jpg"));	// 设置图像属性
    
    // 绝对路径
    QFile file("E:\\\\QTproject\\\\Text\\\\Text\\\\sql.txt");
    

注意
上面图片、音频、文件路径中一共有两个路径,一个是相对路径,一个是绝对路径。
其中,绝对路径是给我们在代码中进行测试的,测试运行程序是否可以正常显示图片,正常播放音频,正常打开文件。当都是正常的,说明代码没有写错,路径也没有写错。
然后相对路径是我们打包程序后所需要使用到的路径,程序打包后,需要从相对路径进行读取素材,否则会出问题!

所以上面测试阶段先将相对路径代码注释掉;打包阶段就注释绝对路径代码,显示相对路径代码。

有人可能还搞不懂什么是相对路径,什么是绝对路径。
相对路径:在.exe文件为起始路径;例如:./ …/等
绝对路径:在初始地方为起始路径;例如:C:\\abc\\cba等


二、准备素材

在Release 或 Debug文件夹下,也就是相对路径里(根据自己的编译方式),我创建了一个picture文件夹,里面有两张图片、一首音频、一个.txt文件。
在这里插入图片描述

也在.h和.cpp文件路径下准备了同样的素材
在这里插入图片描述


三、打包

1. 绿色版

  1. 找到qt安装的bin目录,并复制
    在这里插入图片描述

  2. 添加环境变量
    在这里插入图片描述

  3. 按win键,找到Qt目录,找到qt再带的打包工具,根据自己的编译环境选择
    在这里插入图片描述
    打开后如下:
    在这里插入图片描述

  4. 确保自己的.exe文件可以运行
    在这里插入图片描述

  5. 切换至.exe路径下,并写上 windeployqt 空格 .exe文件
    如下图
    在这里插入图片描述

  6. 出现此字样说明以及打包成功
    在这里插入图片描述

  7. 再次进入.exe路径下,就可以发现多了许多文件
    在这里插入图片描述

  8. 双击运行测试
    在这里插入图片描述
    可以正常运行并显示,但是,图片,音频等这些只能在自己的电脑上显示,因为代码中我们用的是绝对路径,所以在别人的电脑上是无法运行的,不信看下面测试。

  9. 在虚拟机中进行测试
    将整个Release文件夹都赋值到虚拟机下
    在这里插入图片描述
    打开双击.exe测试
    在这里插入图片描述
    怎么样都无法进行显示,即使里面picture文件夹里有素材,但是我们的代码不是使用它那里的路径,所以导致无法显示。

  10. 解决办法,代码中将路径改成相对路径,再一次编辑即可
    编译后,我们将文件再一次复制到虚拟机中运行测试,发现可以正常显示图片、播放音频、打开文件等操作。
    在这里插入图片描述

这种方式比较灵活,可以随便更改文件的内容,更改图片,显示不一样的图片,例如:
在这里插入图片描述

2. .exe版

网上下载打包工具 Enigma Virtual Box
下面有网盘下载连接

在这里插入图片描述

  1. 导入文件
    在这里插入图片描述

  2. 可以更改打包好的.exe文件路径和名字
    在这里插入图片描述

  3. 拖入全部文件
    在这里插入图片描述

  4. 压缩文件
    在这里插入图片描述

  5. 点击打包
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  6. 拷贝到虚拟机中测试
    在这里插入图片描述
    测试可以正常显示,打包成功!


素材与打包软件

链接:https://pan.baidu.com/s/1I_EWi9SRw298VnUMz2Egxg
提取码:cppp

代码
.h文件:

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_Text.h"

#include <QtMultimedia/QMediaPlayer>	// VS向.pro文件添加代码的方式

#pragma execution_character_set("utf-8") // qt支持显示中文

class Text : public QMainWindow {
	Q_OBJECT

public:
	Text(QWidget *parent = Q_NULLPTR);
	~Text();

private slots:
	void on_showBtn_clicked();
	void on_playBtn_clicked();
	void on_textSqlBtn_clicked();

private:
	Ui::TextClass ui;
	QMediaPlayer *player;
	bool flag;
};

.cpp文件:

#include "Text.h"

#include <qmessagebox.h>
#include <qdebug.h>
#include <Qfile>


//#pragma execution_character_set("utf-8") // qt支持显示中文

Text::Text(QWidget *parent)
	: QMainWindow(parent) {
	ui.setupUi(this);

	flag = false;

	player = new QMediaPlayer;

	// 相对路径
	player->setMedia(QUrl::fromLocalFile("./picture/徐梦圆 - China-X.mp3"));	// 设置媒体流

	// 绝对路径
	//player->setMedia(QUrl::fromLocalFile("E:\\\\QTproject\\\\Text\\\\Text\\\\徐梦圆 - China-X.mp3"));	// 设置媒体流

	// 指定当点击右上角叉时所做的操作
	connect(this, &Text::destroyed, [=]() {
		qDebug() << "程序退出..." << endl;
	});
}


Text::~Text() {

}


// 显示与隐藏图片
bool text = false;
void Text::on_showBtn_clicked() {

	// 相对路径
	ui.label->setPixmap(QPixmap("./picture/1.jpg"));	// 设置图像属性

	// 绝对路径
	//ui.label->setPixmap(QPixmap("E:\\\\QTproject\\\\Text\\\\Text\\\\1.jpg"));	// 设置图像属性

	ui.label->setScaledContents(true);	// 缩放图片大小,使得图片大小正好填充label空间

	if (!text) {		
		ui.label->show();
		text = true;
	} else {
		ui.label->hide();
		text = false;
	}
}


// 播放与暂停音乐
void Text::on_playBtn_clicked() {
	if (flag == false) {
		this->player->play();
		flag = true;
	} else {
		this->player->pause();
		flag = false;
	}
}


// 打开文件,读取文件内容,显示与隐藏
bool textSql = false;
void Text::on_textSqlBtn_clicked() {
	// 相对路径
	QFile file("./picture/sql.txt");

	// 绝对路径
	//QFile file("E:\\\\QTproject\\\\Text\\\\Text\\\\sql.txt");

	QString text = "";

	if (!file.exists()) {
		text = QString("文件不存在!").toUtf8();
		qDebug() << text;
		return;
	}

	// 以纯文本与只读方式打开文件
	if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
		text = QString("文件打开失败!").toUtf8();
		qDebug() << text;
		return;
	}

	//读取文件的全部内容
	text = file.readAll();
	
	ui.label_2->setText(text);

	if (!textSql) {
		ui.label_2->show();
		textSql = true;
	} else {
		ui.label_2->hide();
		textSql = false;
	}	
}

总结
到此位置,程序已经打包完毕;只要按照图中步骤来操作,就不会出现问题,快分享给自己的小伙伴去吧!

注意:
一定要注意打包的程序需要使用相对路径

以上是关于Qt vs2017程序打包发布(图文详细步骤)的主要内容,如果未能解决你的问题,请参考以下文章

vs2017+Qt5.92程序打包

VS2017配置Qt5.14(详细教程)

Qt程序打包成exe可执行文件图文教程(图文并茂,且用到了filepack)

2017最新xcode打包APP详细图文

2017最新xcode打包APP详细图文

2017最新xcode打包APP详细图文