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


