1. 前言
QT是一个跨平台的C++图形化应用程序开发框架,它可以用于开发多种类型的应用程序,例如桌面软件、嵌入式设备应用、移动应用以及各种图形化用户界面等。而在日常的开发中,很多情况下需要连接数据库,这篇文章将介绍如何使用QT连接MSSQL。
2. 安装Qt库与MSSQL
2.1 安装Qt库
在开始使用QT连接MSSQL之前,需要先安装QT库。QT的官网提供了QT的下载和安装方法,读者可以根据自己的平台选择安装QT。
2.2 安装MSSQL
在使用QT连接MSSQL之前,也需要安装MSSQL数据库。MSSQL的安装和配置比较繁琐,这里我们不做过多介绍,读者可以参照微软官网的教程进行安装。
3. QT连接MSSQL
3.1 创建QT工程
首先,我们需要创建一个QT工程来实现连接MSSQL。打开QT Creator,选择File -> New File or Project,在弹出的窗口中选择QT Console Application,然后点击Next。
在Name和Location中填写项目名称和选择项目存放的位置,然后点击Next。
在Kit Selection中选择需要的Kit,然后点击Next。
在Class Information中选择Main Window和Add Minimize和Maximize按钮。然后点击Next。
选择项目文件的存储路径以及项目默认的命名空间,然后点击Finish。至此,新的QT项目创建完成。
3.2 连接MSSQL数据库
在QT Creator中选择File -> New File or Project,在弹出的窗口中选择QT Designer Form Class。在右下角的Class Name中填写连接MSSQL数据库的类名,然后点击Next。
在Widget Type中选择Dialog并点击Next。选中“Also create a .ui file”以及“Create form”选项,然后选择存放的路径和文件名,最后点击完成。
在main.cpp中添加以下代码:
#include "mainwindow.h"
#include "logindlg.h"
#include <QApplication>
#include <QSqlDatabase>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
LoginDlg dlg;
if(dlg.exec() == QDialog::Accepted)//如果登录成功,则进入主界面
{
MainWindow w;
w.show();
return a.exec();
}
else return 0;
}
在logindlg.cpp中添加以下代码:
#include "logindlg.h"
#include "ui_logindlg.h"
#include <QMessageBox>
#include <QSqlDatabase>
#include <QDebug>
#include <QtSql>
#include <QString>
LoginDlg::LoginDlg(QWidget *parent) :
QDialog(parent),
ui(new Ui::LoginDlg)
{
ui->setupUi(this);
ui->lineEdit_password->setEchoMode(QLineEdit::Password);//将密码隐藏
connect(ui->pushButton_login,SIGNAL(clicked()),this,SLOT(onButtonLogin()));
connect(ui->pushButton_exit,SIGNAL(clicked()),this,SLOT(onButtonExit()));
}
LoginDlg::~LoginDlg()
{
delete ui;
}
void LoginDlg::onButtonLogin()
{
QString name=ui->lineEdit_username->text();
QString pwd=ui->lineEdit_password->text();
if(name==""||pwd=="")
{
QMessageBox::information(this,"警告","用户名和密码不能为空!");
}
else
{
QSqlDatabase db=QSqlDatabase::addDatabase("QODBC");
QString dsn=QString::fromLocal8Bit("www.saasi.cn");
db.setHostName("127.0.0.1");
db.setPort(1433);
db.setDatabaseName(dsn);
QString str=QString("DRIVER={SQL Server};SERVER=%1;DATABASE=%2;UID=%3;PWD=%4").
arg(db.hostName()).arg(dsn).arg(name).arg(pwd);
db.setUserName(name);
db.setPassword(pwd);
if(db.open())
{
QMessageBox::information(this,"提示","数据库连接成功!");
this->accept();
}
else
{
QMessageBox::information(this,"错误","数据库连接失败,请检查用户名和密码是否正确!");
}
}
}
void LoginDlg::onButtonExit()
{
this->close();
}
在logindlg.h中添加以下代码:
#ifndef LOGINDLG_H
#define LOGINDLG_H
#include <QDialog>
namespace Ui {
class LoginDlg;
}
class LoginDlg : public QDialog
{
Q_OBJECT
public:
explicit LoginDlg(QWidget *parent = 0);
~LoginDlg();
private:
Ui::LoginDlg *ui;
private slots:
void onButtonLogin();
void onButtonExit();
};
#endif // LOGINDLG_H
在mainwindow.h中添加以下代码:
#include <QMainWindow>
#include <QSqlTableModel>
#include <QSqlQuery>
#include <QSqlQueryModel>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QSqlTableModel *model;
QSqlQueryModel *queryModel;
QSqlQuery *query;
void configureTableView();
private slots:
void on_comboBox_currentIndexChanged(const QString &arg1);
void on_pushButton_query_clicked();
};
在mainwindow.cpp中添加以下代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlDatabase>
#include <QMessageBox>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->statusBar->showMessage(tr("Ready"));
model = new QSqlTableModel(this);
queryModel = new QSqlQueryModel(this);
this->configureTableView();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::configureTableView()
{
ui->tableView->setModel(queryModel);
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
void MainWindow::on_comboBox_currentIndexChanged(const QString &arg1)
{
if(arg1=="table1") //根据选择的表名,执行相应的SQL语句
{
queryModel->setQuery("select * from table1");
}
else if(arg1=="table2")
{
queryModel->setQuery("select * from table2");
}
else if(arg1=="table3")
{
queryModel->setQuery("select * from table3");
}
else if(arg1=="table4")
{
queryModel->setQuery("select * from table4");
}
}
void MainWindow::on_pushButton_query_clicked()
{
QString sql=ui->textEdit->toPlainText();
if(sql.isEmpty())
{
QMessageBox::information(this,tr("Waring"),tr("The sql sentence is empty!"));
return;
}
queryModel->setQuery(sql);
}
3.3 实现功能
在MainWindow中的configureTableView函数中,设置了QTableView等属性,以便于显示查询结果。
在on_comboBox_currentIndexChanged中,根据combobox的选择来执行相应的SQL语句,并将执行结果显示在TableView上。
在on_pushButton_query_clicked中,用户可以自己输入SQL语句进行查询,并将查询结果显示在TableView上。
3.4 运行程序
在QT Creator中点击“Run”,然后输入用户名和密码,点击登录按钮,成功登录后就可以选择需要查询的表或输入相应的SQL语句进行查询了。
4. 总结
本文介绍了如何在QT环境下连接MSSQL数据库,并实现了简单的查询功能。读者可以在此基础上进行更复杂的操作。需要注意的是,QT支持多种数据库的连接,读者可以根据自己的需要选择不同的数据库。