Qt工具QAQ

目录

Note

使用qt遇到的一些问题记录。

QAQ

1、使用Qt 5.14.0自带的windeployqt打包程序提示Unable to find Platform Plugin的解决方法

C:\Qt\Qt5.14.0\5.14.0\mingw73_64>cd /d D:\QT_packtest

D:\QT_packtest>
D:\QT_packtest>
D:\QT_packtest>windeployqt TCPClient.exe
D:\QT_packtest\TCPClient.exe 64 bit, release executable
Direct dependencies: Qt5Core Qt5Gui Qt5Network Qt5Widgets
All dependencies   : Qt5Core Qt5Gui Qt5Network Qt5Widgets
To be deployed     : Qt5Core Qt5Gui Qt5Network Qt5Widgets
Unable to find the platform plugin.

问题原因:Qt5.14.0版本太新,windeployqt不支持。 windeployqt does not work for MinGW QTBUG-80763 Will be fixed in 5.14.1

解决方法:回滚至5.13.2,等待Qt官方更新5.14.1。 参考链接:https://blog.csdn.net/jtjljy/article/details/103829487

2、Qt自带的windeployqt打包程序

参考文档:https://www.jb51.net/article/229479.htm 如果链接不存在,参考文档链接:https://pan.baidu.com/s/1mka-1EBYlueO2ulYTlBG0Q 提取码:d7j4

(1)通过release方式构建项目。构建套件中选择release选项后,重新run一遍项目;即可在原项目目录下找到构建项目的文件夹,进入release文件夹就可以看到exe文件,这个就是代码打包出来的文件,但是缺少QT对应的依赖,所以无法执行。将其单独放在一个文件夹下面,并复制此路径。

(2)使用windeployqt工具添加依赖项。在任务管理器找到Qt命令行工具,直接搜索即可,注意要使用MinGW版本才能添加合适的依赖,也要注意bit位数,64位的项目不能用32位的MinGW来打包,这里项目和打包用的都是32位,因为32位的电脑多一些,所以兼容性会好一些(64位电脑能运行32位软件,32位软件不能运行64位电脑) 分别在此命令行工具下执行以下两条指令:

进入待操作文件夹 cd+刚刚复制的路径

cd D:\Code\QT\test

使用windeployqt工具

windeployqt Demo.exe

构建完成的exe文件能在这个文件夹下面运行,但是脱离此文件夹依旧不能独立运行,所以后面使用Enigma Virtual Box打包。

(3)使用Enigma Virtual Box打包。Enigma Virtual Box是软件虚拟化工具,它可以将多个文件封装到应用程序主文件,从而制作成为单执行文件的绿色软件。它支持所有类型的文件格式,虚拟化后的软件不释放任何临时文件到您的硬盘,文件模拟过程仅在内存运行

Enigma Virtual Box下载路径: https://enigmaprotector.com/assets/files/enigmavb.exe 直接点击即可下载

选择好输入输出路径,将需要打包的对应文件拖入打包区,点击process即可打包。这时候打包出来的Demo_boxed.exe文件就是可以独立运行和发布的exe文件了。

3、Qt无法连接MySql

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7

原因:Qt里面的mysql驱动插件不对,需要重新编译对应mysql版本的插件。

参考链接:Qt连接MySql驱动加载失败问题解决方法 https://blog.csdn.net/qq_38344751/article/details/105387341

编译新驱动:

(1)找到Qt安装目录源码 C:\Qt\Qt5.13.2\5.13.2\Src\qtbase\src\plugins\sqldrivers\mysql

(2)将源码目录加载到Qt工程,并配置工程,出现锤子可编译

(3)修改工程

/*mysql.pro*/
TARGET = qsqlmysql

HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp

#第一处修改,注释掉,因为后面会报错
#QMAKE_USE += mysql

OTHER_FILES += mysql.json

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
#include(C:\Qt\Qt5.13.2\5.13.2\Src\qtbase\src\plugins\sqldrivers/qsqldriverbase.pri)

#第二处修改,添加下载的mysql的库文件和头文件路径
#win32:LIBS += -LC:\Qt\windows\mysql-5.7.36-winx64\mysql-5.7.36-winx64\lib -llibmysql
#INCLUDEPATH += C:\Qt\windows\mysql-5.7.36-winx64\mysql-5.7.36-winx64\include
#DEPENDPATH += C:\Qt\windows\mysql-5.7.36-winx64\mysql-5.7.36-winx64\include
//以上为教程,Qt5.13连接MySQL过程记录https://blog.csdn.net/lougust/article/details/103337258,修改后弹出对话框,提示 qt中弹出“无法找到执行档,请指定一个”https://blog.csdn.net/weixin_47320074/article/details/119008180

//下面的修改是另一个教程里的,其实没太大差别,目的都是编译新插件的时候将MySql源码里的库包含进来。
INCLUDEPATH += C:\Qt\windows\mysql-5.7.36-winx64\mysql-5.7.36-winx64\include
LIBS += C:\Qt\windows\mysql-5.7.36-winx64\mysql-5.7.36-winx64\lib\libmysql.lib
DESTDIR = ../mysql/mysqlChen  //编译之后生成目标的目录

(4)点击锤子编译工程,如果qt中弹出“无法找到执行档,请指定一个”,我选择的是Qt安装目录里的编译器的qmake.exe, C:\Qt\Qt5.13.2\5.13.2\mingw73_64\bin\qmake.exe, 就执行完成编译,生成了新驱动文件。

如果编译中出现 qtcreator启动显示 No winrtrunner.exe found. 不用理会。https://segmentfault.com/a/1190000020231619

(5)将生成qsqlmysql.dll和qsqlmysqld.dll的新驱动文件放到 C:\Qt\Qt5.13.2\5.13.2\mingw73_64\bin,并且 mysql安装目录下的lib文件夹下的libmysql.dll,复制到qt的编译器的bin目录下,这样Qt就可以连接Mysql了。

例如:win10安装Qt5.13.2 [1]、MySql-5.7.36(源码安装)[2] 以及腾讯云服务器(Ubuntu 源码安装Ubuntu18.04 源码编译安装mysql)MySql-5.37.6 [3]

[1]Win10安装Qt带源码

(安装时选择源码,Qt5.13连接MySQL过程记录https://blog.csdn.net/lougust/article/details/103337258)

安装Qt的时候要勾选Sources:Qt–>Qt5.13.2–>Sources

[2]win10源码安装MySql

Win10 安装MySQL 5.7 详细教程https://blog.csdn.net/m0_37218227/article/details/109154009

[3]腾讯云服务器(Ubuntu18.04 源码编译安装mysql)MySql-5.7.36

一、下载安装包
sudo su  //进入特权模式
//这样就可以不用经常切换特权模式
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.36.tar.gz
tar -zxvf mysql-5.7.36.tar.gz

二、安装依赖包
apt install cmake bison libncurses5-dev build-essential

三、编译安装
cd mysql-5.7.36/
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DWITH_BOOST=boost
make && make install

四、基本配置
添加用户组,和文件管理
groupadd mysql
useradd -g mysql mysql
mkdir /usr/local/mysql/data
chown -R mysql /usr/local/mysql
chgrp -R mysql /usr/local/mysql

五、初始化mysql
指定数据目录data位置 datadir
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

这个会生成一个很随机的密码,要备份一下:我的是: dEFux53/NejH

六、编辑简单配置文件

注意端口号一般是3306,如果不行,就换别的,比如我的是3307

vim /etc/my.cnf
//添加下面的内容
[client]
socket = /tmp/mysql.sock

[mysqld]
port=3307
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data

七、启动mysql服务

一般启动或暂停模式:support-files/mysql.server start (stop)
下面把启动放到service下,可以快捷启动

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
update-rc.d mysqld defaults
service mysqld start

可能启动发生下面的错误,就要学会去看error.log

root@localhost mysql]# service mysql restart  
Starting MySQL...[ERROR] The server quit without updating PID file

一般在/usr/local/mysql/data 目录下面 我的是这个:DESKTOP-9I2JAHT.err
其实也可以在,my.cnf 指定error日志目录,如下面那个就很完备,据情况需要添加,有些目录需要先创建,比如logs,tmp,run

像我这个就是发生了端口冲突,所以改成了3307
————————————————

八、启动mysql
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
mysql -uroot -p'dEFux53/NejH'

//重新修改密码 为123456
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
exit 退出

修改一下my.cnf ,添加用户和密码
————————————————

九、设置远程连接

#所有主机都可以连接
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
mysql>flush privileges;
exit

参考链接:Ubuntu18.04 源码编译安装mysql https://blog.csdn.net/weixin_42973678/article/details/100107986

[4]腾讯云开启3306端口

在腾讯云后台安全组中开放3306端口才能访问,进入 安全组控制台 ,找到 安全组 ,点击 修改规则 ,然后在入站规则里点击添加规则

类型:选择自定义
来源:0.0.0.0/0
协议端口:TPC:3306
策略:允许

参考链接:https://www.jianshu.com/p/7bc3ac757fed

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦