第一次系统地玩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的中文化
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()。
