Qt开发,将数据库封装
开发环境vs2010+Qt4.8.6
项目目录树:
SourceFiles:
- main.cpp
- UserSqlClass.h
- UserSqlClass.cpp
SQL:
- sql_interface.h
- sql_interface.cpp
main.cpp
#include <QtGui/QApplication>
#include <QtCore>
#include <QtSql>
int main(int argc,char *argv[])
{
QApplication a(argc,argv);
UserSqlClass w;
w.show();
return a.exec();
}
数据库类SqlClass的声明形式:
sql_interface.h
class SqlClass : publc QObject
{
Q_OBJECT
private:
QSqlDatabase* db;
public:
SqlClass(QObject* parent = 0);
virtual ~SqlClass();
public:
bool OpenDatabase();
};
类SqlClass的实现
sql_interface.cpp
SqlClass::SqlClass(QObject* parent):QObject(parent)
{
}
bool SqlClass::OpenDatabase()
{
db = &QSqlDatabase::addDatabase("QODBC","xxxx");
if(!db->isValid())
{
qDebug() << db->lastError().text();
return false;
}
db->setHostName("xxx,xx,xx,xx");
db->setDatabaseName("DRIVER={SQL SERVER};SERVER=xx.xx.xx.xx;DATABASE=xxx");
db->setUserName("xxx");
db->setPassword("123456"):
if( !db->open() )
{
QMessageBox::warning(NULL,"database error","Cannot open DB",QMessageBox::Cancel);
return false;
}
return true;
}
SqlClass::~SqlClass()
{
}
UserSqlClass类的声明形式。
UserSqlClass.h
class UserSqlClass : public QMainWindow
{
Q_OBJECT
private:
Ui::UserSqlClass ui;
SqlClass* mainSql;
public:
UserSqlClass(QWidget *parent=0,Qt::WFlags flags = 0);
~UserSqlClass();
};
UserSqlClass的构造函数:
UserSqlClass.cpp
UserSqlClass::UserSqlClass(QWidget *parent,Qt::WFlags flags) : QMainWindow(parent,flags)
{
ui.setupUi(this);
mainSql = new SqlClass(this);
}
UserSqlClass::~UserSqlClass()
{
}
这里很多都是比较基础的知识点,不做过多解释。
主要讲解的是SqlClass类的声明。
QObject是所有Qt类的基类,所有如果像需要用到信号槽的最好是需要继承QObject,而类SqlClass声明里的Q_OBJECT宏也是必须的。
还要注意的是SqlClass的析构函数使 虚析构函数,这样可以在释放的时候向下释放,相关知识可查虚析构函数。
原本这里的db设置是打算写成传参函数的,这样的扩展性会比较强一点,而这里主要用于做简单例子也就免去了。
还有最最总要的一点是将,QSqlDatabase db,SqlClass mainSql声明为指针,这里可保证是对同一次链接对象进行操作。面向对象的思想就是将一次链接视为一个对象,这个对象就可以执行SQL操作。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。