QT使用MySql的配置(使用addLibraryPath载入插件),编译QT的MySql驱动问题及解决方案(自己使用libmysql.lib进行编译mysql.pro,万不得已可以查看Makefile.Debug以解决问题)
2010/04/23:Fixes : 更新批处理,以兼容WIN7。
第一次系统地玩QT,于是诞生了此预备式:
【QT版本4.6.0(VS2008编译版),开发平台推荐使用Qt Creator(最新1.3版),系统这里使用Windows Xp】
QT & Qt Creator & MySql安装:
QT:不知道QT开发人员怎么想的,总是跟空格过不去,安装QT时尽量将其装在根目录下,路径中尽量不要有中文,否则由于这问题出现诡异情况,GOOGLE都不一定好使~
Qt Creator:我的Qt Creator是在VS2008安装完成之后装的。装完Creator,它就默认使用VS编译器了(如果有问题,从VS环境变量、QT环境变量入手!)。但这也带来一个问题,就是调试器不能用GDB,要用微软的CDB(下载地址),在上面挑个最新版的下载安装。我这里Creator用的是1.3版的,对于CDB兼容性还是有问题的,会提示找不到"dbgeng.dll"。这时需要把CDB安装文件夹中的"dbghelp.dll"拷贝到Creator的Bin目录下,完成后就可以正常使用CDB调试了。
MySql:MySql装上去通常会出现万恶的1067错误,针对该错误的解决方法可谓五花八门。这里MySql建议安装完全版的(除非很了解MySql,不然就不要安装Essential版),装的时候也是尽量挑英文无空格路径装,免得万一因路径出问题折腾。MySql的配置方法:
- 把my-small.ini拷贝成my.ini
- 在其中的[client]下加上default-character-set=GBK;在[mysqld]下加上default-character-set=GBK、basedir = "D:\MySql"(MySql路径)、datadir = "D:\MySql\data"(数据库路径)、tmpdir = "D:\MySql\\temp"(临时文件夹,注意双"\"转义"\t")。其中各路径根据MySql安装情况自己修改。
- 在my.ini旁边创建一个文本文件,文件名改为Create.bat。用记事本打开,粘进如下代码:
@echo off
cd/d %~dp0
@echo Build DataBase ...
mkdir data
mkdir temp
copy /V /Y ".\my.ini" "%windir%\my.ini"
.\bin\mysqld.exe --defaults-file=".\my.ini" --console
@echo Failure.
pause
并运行该批处理。如果最后未出现Failure输出,则创建数据库成功!创建成功后,关闭Create.bat批处理运行窗口。
- 在my.ini旁边再创建一个文本文件,文件名改为Rebuild_And_Start_Service.bat。用记事本打开,粘进如下代码:
@echo off
cd/d %~dp0
@echo Now Reinstall MySql Service ...
.\bin\mysqld.exe --remove
.\bin\mysqld.exe --install MySql
@echo Start Service ...
net start MySql
@echo done.
pause
并运行该批处理。人品不错的话,应该是顺利启动服务了,碰1067的话GOOGLE去吧~
- 为了日后管理方便,需要再创建个批处理来停止MySql服务。 在my.ini旁边再创建一个文本文件,文件名改为Stop_Service.bat。用记事本打开,粘进如下代码:
@echo off
net stop MySql
echo done.
pause
并运行该批处理。关闭服务的批处理通常都是最好使的,双击即关闭。
- 再补充一个启动MySql服务的批处理Start_Service.bat,便于在Stop_Service.bat运行后再次启动服务:
@echo off
net start MySql
echo done.
pause
- 上面一切都搞定,MySql服务运行后,就可以运行MySql安装文件夹下Bin目录中的mysql.exe,试试MySql功能正常不。
- MySql可以启动并正常使用后,将MySql数据库驱动(点击看编译方法)拷贝到“%QTDIR%\plugins\sqldrivers”中。在MySql安装目录中找到“libmysql.dll”,并将其拷贝到“%QTDIR%\bin”下。
关于带数据库驱动的QT程序的部署:在QT程序的main函数中,使用QCoreApplication::addLibraryPath()添加库文件加载路径。
QT的中文化
上面的已经准备完成了,可以开始编写QT程序了。用Designer拖个框啥的,上面的文字标签可以直接打中文(也能够正常显示),现在的Designer国际化方面做得已经很好了,默认就把所有界面标签文字转为可翻译的,这样方便未来对软件国际化。但如果使用如QMessageBox来弹个对话框,代码里打入中文会导致对话框最终显示出来为乱码。解决方案是:QT程序中所有用到字符串的地方,最好使用tr来把字符串括起来。一是方便对其国际化;二是可以在main函数中加入tr区域选择代码来消除乱码。修改后的main函数如下:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//设置tr以及地域。
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
//添加库加载路径。
QCoreApplication::addLibraryPath(QCoreApplication::applicationDirPath() + '/' + PLUGINS_NAME);
Widget w;
w.show();
return a.exec();
}
注意:tr只有在类中已经继承了QObject时才可以直接使用,否则可以使用QObject::tr()。
做毕业设计要用到MySql,界面方面想用下QT,顺便学习一下QT的使用。上去就碰到问题,没有MySql的驱动(其实在.\Qt\4.6.0\plugins\sqldrivers目录下有,后来编译完了才发现,这里要崩溃一下~)。GOOGLE了一下,翻了翻网页,就开始编译驱动了。
这里使用QT4.6.0版本和VS2008自带的编译器
使用的命令行参数是:
qmake –o Makefile INCLUDEPATH+="D:\Program Files\MySQL\MySQL Server 5.1\include" LIBS+="D:\Program Files\MySQL\MySQL Server 5.1\lib\opt\libmysql.lib" mysql.pro
nmake
跟预料中的一样,编译出错,错误是"cannot find file: mysql.pro",费了半天劲终于发现我进入的目录是".\Qt\4.6.0\src\sql\drivers\mysql"而不是传说中的".\Qt\4.6.0\src\plugins\sqldrivers\mysql"(本目录才是正确路径!)。发生本错误的同志们一定要检查一下命令行的路径进的是否正确!
一个问题解决了,qmake成功完成,开始nmake。这里先是碰到了qsqlmysqld_resource.rc中找不到"WinVer.h"的错误。找了找,发现WinVer.h头文件居然在Windows SDK的文件夹下,于是在".\Microsoft Visual Studio 9.0\Common7\Tools"中找到了vsvars32.bat设置环境变量的批处理,把该批处理拖入命令行窗口运行一遍(注意该批处理仅设置本次命令行窗口中的环境变量,并未修改注册表,所以每次打开个新命令行窗口都要运行一次批处理才可获得其中包含的环境变量设置!),再nmake,找不到WinVer.h的问题解决了。
再次nmake,这次问题就诡异了,居然找不到"mysql.h"!但mysql.h已经在qmake的INCLUDEPATH参数中包含进去了,怎么可能找不到?郁闷,打开Makefile.Debug看看,发现里面INCLUDE进去的"D:\Program Files\MySQL\MySQL Server 5.1\include"每个空格处都被认为是一个路径,好好的路径给分的希碎,qmake的智商太低了!没法,把MySQL Server 5.1文件夹下的include和lib文件夹直接拷贝到根目录下,这样INCLUDEPATH和LIBS路径均无空格,再次qmake、nmake,OK了!
总结:QT编译MySql驱动注意要点:
- 先检查".\Qt\4.6.0\plugins\sqldrivers"中有无sql驱动,有的话就别费这劲编译了!
- 安装MySql时要勾住“C Include Files 和 Lib Files”选项,这样才能装上MySql的头文件和链接库。
- 安装MySql时路径中不要有空格,不然编译驱动太费劲(上面的找不到"mysql.h"错误)。
- 命令行进行qmake和nmake前,一定要先转入正确目录(上面的"cannot find file: mysql.pro"错误)!
- 在nmake前最好运行一遍vsvars32.bat批处理(上面的找不到"WinVer.h"错误)。
QT使用MySql的配置(使用addLibraryPath载入插件),编译QT的MySql驱动问题及解决方案(自己使用libmysql.lib进行编译mysql.pro,万不得已可以查看Makefile.Debug以解决问题)的更多相关文章
- MYSQL主从复制配置(整理)
MYSQL主从原理及过程 原理 Mysql的 Replication 是一个异步的复制过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),从一个 Mysql instace(我们称之为 ...
- linux编译Qt+mysql驱动+可执行文件移植目标机
前言: 如果希望自己的Qt/C++程序在目标机上运行,最简单的方法就是在目标机上安装一个Qtcreater[Qtxxx.run],然后编译release的可执行文件,直接拉起即可. 但是有些环境情况比 ...
- mysql主从配置
引言: 双11,阿里云服务器打折,于是我忍不住又买了一台服务器,于是咱也是有两台服务器的爷们了,既然有了两台服务器,那么肯定要好好利用一下吧,那么就来玩玩mysql的主从配置吧. 准备 两台数据库服务 ...
- mysql+ssh 配置(转载)
Mysql+ssh配置 一.Linux平台间mysql+ssh配置 本机地址为:192.168.189.133 mysql服务器地址为:192.168.189.139 linux命令行下使用ssh命令 ...
- Mysql主从配置,实现读写分离
大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢 ...
- MySQL 主从配置
mysql主从复制指两个服务器之间数据库的同步,当主服务器的数据进行了变更,从服务器也会自动更新,其过程是通过bin-log日志实现的,本质是binlog日志的传输. mysql主从分两个角色 1.主 ...
- Linux下PHP+MYSQL+APACHE配置方法
apache: http://www.apache.org mysql: http://www.mysql.com php: http://www.php.net/downloads.php g ...
- Mysql优化系列(1)--Innodb引擎下mysql自身配置优化
1.简单介绍InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎.InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读.这些特色 ...
- CentOS 7下的 Mysql 主从配置
最近在玩mysql主从配置,在此记录一下 一.前言 1.安装两个虚拟机(CentOS 7).iP分别是192.168.47.131 和192.168.47.133.其中192.168.47.133作为 ...
随机推荐
- Spring异步方法注解 @Async
@Async 0. 介绍 在Spring 3.x之后,通过内置@Async标明异步方法,可以简化异步开发流程. @Async既可提供无返回值的调用,也可提供有返回值的调用,下文将分别介绍两种使用方式. ...
- IIS元数据库失败该如何解决-重新安装ASP.NET
装了VS2005再装IIS,结果出了些小问题 “访问IIS元数据库失败 ” 思考可能是次序出了问题,解决 1.打开CMD,进入 C:\WINDOWS\Microsoft.NET\Framework\v ...
- 关于linux下如何使用svn 客户端
1 yum install -y subversion (下载svn) 2 svn chekout "你的svn地址" 然后会询问? 我也不知道是嗄意思 , 大体就是权限什么乱七八 ...
- Android中TabHost中实现标签的滚动以及一些TabHost开发的奇怪问题
最近在使用TabHost的时候遇到了一些奇怪的问题,在这里总结分享备忘一下. 首先说一点TabActivity将会被FragmentActivity所替代,但是本文中却是使用的TabActivity. ...
- css 单选框 样式 填充自定义背景 after
input[type='radio'] //width 16px //height 16px display none //input[type='radio']:chcked // backgoun ...
- 数学概念的提出(一) —— 熵的定义式 H(x)=-log2(p(x))
h(x)=−log2p(x) 考虑一个离散型随机变量 x,当我们观测到该变量的一个特定值,问此时我们通过该值获得的关于该变量的信息量是多少? 信息量可视为"意外的程度"(degre ...
- WPF 绑定父类属性
原文:WPF 绑定父类属性 1.绑定父控件的属性. <ContextMenu x:Key="ContextMenuColoum"> <MenuItem Heade ...
- Emgu-WPF 激光雷达研究-移动物体跟踪2
原文:Emgu-WPF 激光雷达研究-移动物体跟踪2 初步实现了去燥跟踪,并用圆点标注障碍物 https://blog.csdn.net/u013224722/article/details/8078 ...
- 在vs2015上使用asp.net core+ef core
官方的文档https://docs.asp.net/en/latest/tutorials/first-mvc-app/start-mvc.html 先来看一下实现的效果
- php判断是否是移动设备
function isMobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) { ...