这篇是我10年学习QT的一些学习笔记,和大家一起分享:
1. 安装Qt
1.1 安装qt和mingw
到Qt(http://trolltech.com/developer/downloads/qt),直接下载qt-win-opensource-4.3.2-mingw.exe,安装即可。此版本已经集成了编译环境Mingw(注意:只是编译环境不包括IDE,Eclipse才是真正的IDE),在安装过程中选择自动下载并安装Mingw即可(如果你安装时没有选择安装Mingw那么你也可以手动安装)。
1.2安装调试工具GDB
首先下载GDB(http://jaist.dl.sourceforge.net/sourceforge/mingw/gdb-6.3-2.exe)
下载后安装到刚才安装MinGW的文件夹下。有了他才可以使用Eclipse的调试功能
2.设置QT和Mingw的环境变量
假设QT和Mingw目录分别是:
D:\Qt\4.4.3;
D:\MinGW;
现在打开右键我的电脑,系统属性-高级-环境变量
设置如下
变量:Path
值:D:\MinGW\bin; D:\Qt\4.4.3\bin; D:\MinGW\mingw32\bin;
变量:Lib
值:D:\MinGW\lib; D:\Qt\4.4.3\lib;
变量:include
值:D:\MinGW\include; D:\Qt\4.4.3\include;
变量:QTDIR
值:D: \Qt\4.4.3
3.安装Eclipse
3.1 Eclipse下载(http://www.eclipse.org/downloads/)
3.2 把QT和MinGW集成到Eclipse中
下载Eclipse插件(http://trolltech.com/developer/downloads/qt/eclipse-integration-download)
在安装时选择你之前安装的Eclipse和MinGW的路径即可
注意安装过程中遇到得问题:
1、下载 mingw-utils,将其中的 reimp.exe 放到 Qt 自带的 MinGW 的 bin 目录下。
2、mysql安装要全部安装,否则会不到lib和include目录。
3、在c:下建一个mysql目录,将其安装目录下得lib和include复制过去
4. MySQL 自带的 .lib 文件是为 VC 准备的,所以先要生成 MinGW 能认识的 .a 文件:
C:\mysql\lib\opt>d:\Qt\2009.01\mingw\bin\reimp.exe libmysql.lib
操作成功的话会生成 LIBMYSQL.def 和 liblibmysql.a。
5. 编译 Qt 的 MySQL 驱动:
D:\Qt\2009.01\qt\src\plugins\sqldrivers\mysql>qmake -o Makefile "INCLUDEPATH+=C:/MYSQL/INCLUDE" "LIBS+=C:/MYSQL/LIB/OPT/liblibmysql.a" mysql.pro
D:\Qt\2009.01\qt\src\plugins\sqldrivers\mysql>make
见附图1.2.3.
qt连接数据库测试:
两种方式:1、dns 2、字符串 详细请看测试代码
#include <QtGui>
#include <QApplication>
#include <QtSql>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QTextCodec>
#include <QStringList>
#include <QDebug>
#include <QSqlError>
QString getMSSQLConnectionString(const QString &host, const QString &user,
const QString &pass, const QString &dbname) {
return QString("DRIVER={%1};SERVER=%2;DATABASE=%3;UID=%4;PWD=%5") .arg(
"SQL Server") .arg(host).arg(dbname).arg(user).arg(pass);
}
static bool CreateMsSqlServerConn() {
QSqlDatabase dbconn = QSqlDatabase::addDatabase("QODBC");
QString
dsn =
QString(
"Driver={sql server};server=LYQ-COM\\SQL2005;database=wgdb;uid=sa;pwd=111111");
//dbconn.setDatabaseName("test");
dbconn.setDatabaseName(dsn);
dbconn.setHostName(QString("LYQ-COM\\SQL2005"));
//dbconn.setPort(1433);
dbconn.setUserName(QString("sa"));
dbconn.setPassword(QString("111111"));
bool r = dbconn.open();
if (!r) {
QMessageBox::critical(0, QObject::tr("Database Error"),
dbconn.lastError().text() + dsn);
return false;
}
QSqlQuery query = QSqlQuery(dbconn);
QTextCodec *BianMa = QTextCodec::codecForName("GBK");
///query.exec("Insert into [tblTest] (F_cName,F_cSex) values('test','test')");
query.exec(BianMa->toUnicode(
"Insert into [tblTest] (F_cName,F_cSex) values('李四1','女1')"));
/* QT4 中文乱码之解决
*
///以下代码在E文XP环境下测试OK
////QTextCodec *TxtCode = QTextCodec::codecForName ("GBK");
///需要引用中文的地方如下:
///TxtCode ->toUnicode("中国System Starting...");
*/
QMessageBox::critical(0, "test", "OK!!!");
return true;
}
static bool CreateMySqlConnection() {
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("wgdb");
db.setUserName("root");
db.setPassword("111111");
if (!db.open()) {
QMessageBox::critical(0, QObject::tr("Database Error"),
db.lastError().text());
return false;
}
QSqlQuery query;
//query.exec("insert into book values( 3, 'title', 'author') ");
query.exec("select `StrName`,`StrAge` from test1 ");
while (query.next()) {
QString title = query.value(0).toString();
QString author = query.value(1).toString();
QMessageBox::critical(0, title, author);
}
return true;
}
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QSqlDatabase db1 = QSqlDatabase::addDatabase("QODBC");
db1.setDatabaseName(getMSSQLConnectionString("LYQ-COM\\SQL2005", "sa",
"111111", "WGDB"));
if (!db1.open()) {
QMessageBox::critical(0, QObject::tr("Database Error Conn.."),
db1.lastError().text());
} else {
QSqlQuery query1 = QSqlQuery(db1);
QTextCodec *BianMa = QTextCodec::codecForName("GBK");
///query.exec("Insert into [tblTest] (F_cName,F_cSex) values('test','test')");
query1.exec(BianMa->toUnicode(
"Insert into [tblTest] (F_cName,F_cSex) values('李四1','女1')"));
/* QT4 中文乱码之解决
*
///以下代码在E文XP环境下测试OK
////QTextCodec *TxtCode = QTextCodec::codecForName ("GBK");
///需要引用中文的地方如下:
///TxtCode ->toUnicode("中国System Starting...");
*/
QMessageBox::critical(0, "Insert Sucess!", "OK!!!");
}
qDebug() << "Available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug() << "\t" << driver;
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
qDebug() << "ODBC driver valid?" << db.isValid();
/*
if (!CreateMsSqlServerConn()){
return 1;
}
if (!CreateMySqlConnection()){
return 1;
}
*/
AAA w;
w.show();
return a.exec();
}