我的Eclipse+Qt学习笔记

这篇是我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();
}


原文地址:https://www.cnblogs.com/AriLee/p/1997279.html