Qt_SQL数据库开发

来源:互联网 发布:标准acl是基于目标端口 编辑:程序博客网 时间:2024/09/21 09:03
//2011年8月30日  晴
//头文件 connection.h
#ifndef CONNECTION_H#define CONNECTION_H#include <QObject>#include <QTextCodec>#include <QDebug>#include <QSqlDatabase>#include <QSqlQuery>bool static createConnection(){    QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));    //1.定义数据库的驱动程序    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");    //2.定义数据库名字    //db.setDatabaseName(":memory:");  //内存中的数据库,只在程序运行的时候存在    db.setDatabaseName("test.db"); //物理上载磁盘上存在的数据库    //3.打开数据库    if(!db.open())    {        qDebug()<<"数据库打开失败";        return false;    }    //4.操作数据库中的数据    QSqlQuery query;    //创建表    query.exec("create table Stu(id int primary key, name varchar(16));");    //插入数据    query.exec(QObject::tr("insert into Stu values(101, '张三丰');"));    query.exec(QObject::tr("insert into Stu values(102, '张无忌');"));    query.exec(QObject::tr("insert into Stu values(103, '赵敏');"));    query.exec(QObject::tr("insert into Stu values(104, '周芷若');"));    query.exec(QObject::tr("insert into Stu values(105, '小昭');"));    return true;}#endif // CONNECTION_H
//widget.h头文件
 
#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QSqlTableModel>namespace Ui {    class Widget;}class Widget : public QWidget {    Q_OBJECTpublic:    Widget(QWidget *parent = 0);    ~Widget();protected:    void changeEvent(QEvent *e);private:    Ui::Widget *ui;    QSqlTableModel *model;private slots:    void on_btnTable_clicked();    void on_btnQuery_clicked();    void on_btnSortDes_clicked();    void on_btnSortAsc_clicked();    void on_btnDel_clicked();    void on_btnInsert_clicked();    void on_btnRoll_clicked();    void on_btnCommit_clicked();};#endif // WIDGET_H

//widget.cpp文件-成员函数-槽函数

#include "widget.h"#include "ui_widget.h"#include <QMessageBox>#include <QModelIndex>Widget::Widget(QWidget *parent) :    QWidget(parent),    ui(new Ui::Widget){    ui->setupUi(this);    //构造TableModel对象    model = new QSqlTableModel(this);    //选定表    model->setTable("Stu");    model->setEditStrategy(QSqlTableModel::OnManualSubmit);    //选定所有的行    model->select();    //将model和界面组件相关联    ui->tableView->setModel(model);}Widget::~Widget(){    delete ui;}void Widget::changeEvent(QEvent *e){    QWidget::changeEvent(e);    switch (e->type()) {    case QEvent::LanguageChange:        ui->retranslateUi(this);        break;    default:        break;    }}void Widget::on_btnCommit_clicked(){    //开始一个事务    model->database().transaction();    if(model->submitAll())    {        model->database().commit();    }    else    {        model->database().rollback();        QMessageBox::warning(this, tr("提交"), tr("数据库提交失败,所有修改进行回滚"));    }}void Widget::on_btnRoll_clicked(){    //撤销的是没有提交的数据,一旦数据写入到数据库中后,就没有办法撤销,只能进行删除    model->revertAll();}void Widget::on_btnInsert_clicked(){    int row = model->rowCount();    //先在model中插入行    model->insertRow(row);    //在model中新插入的行中设置数据,每一个setData可以设置表中的一个字段的值    model->setData(model->index(row, 0), 110);    model->setData(model->index(row, 1), tr("阳顶天"));    model->submitAll();}void Widget::on_btnDel_clicked(){    //获取到tableView的选中行的索引    int curIndex = ui->tableView->currentIndex().row();    //从model中删除特定索引的行    model->removeRow(curIndex);    if(QMessageBox::Yes == QMessageBox::warning(this, tr("删除数据"), tr("选中的行即将从数据表中删除\n你确定要删除该行?"), QMessageBox::Yes | QMessageBox::No))    {        model->submitAll();    }    else    {        model->revert();    }}void Widget::on_btnSortAsc_clicked(){    model->sort(0, Qt::AscendingOrder);    model->select();}void Widget::on_btnSortDes_clicked(){    model->sort(1, Qt::DescendingOrder);    model->select();}void Widget::on_btnQuery_clicked(){    QString txt = ui->lineEdit->text();    //设置model的过滤器(实际上,过滤器就是查询语句中where部分的语句)    model->setFilter(tr("name = '%1'").arg(txt));    model->select();}void Widget::on_btnTable_clicked(){    model->setTable("Stu");    model->select();}

 

//main 主函数

#include <QtGui/QApplication>#include "widget.h"#include "connection.h"#include <QMessageBox>#include <QObject>int main(int argc, char *argv[]){    QApplication a(argc, argv);    //QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));    if(!createConnection())    {        //QMessageBox::warning(0, "dd", "dd");        return 1;    }    Widget w;    w.show();    return a.exec();}


//自动生成的ui_widget.h文件

/********************************************************************************** Form generated from reading UI file 'widget.ui'**** Created: Mon Aug 29 14:50:52 2011**      by: Qt User Interface Compiler version 4.6.2**** WARNING! All changes made in this file will be lost when recompiling UI file!********************************************************************************/#ifndef UI_WIDGET_H#define UI_WIDGET_H#include <QtCore/QVariant>#include <QtGui/QAction>#include <QtGui/QApplication>#include <QtGui/QButtonGroup>#include <QtGui/QHBoxLayout>#include <QtGui/QHeaderView>#include <QtGui/QLineEdit>#include <QtGui/QPushButton>#include <QtGui/QTableView>#include <QtGui/QVBoxLayout>#include <QtGui/QWidget>QT_BEGIN_NAMESPACEclass Ui_Widget{public:    QPushButton *btnQuery;    QPushButton *btnTable;    QLineEdit *lineEdit;    QWidget *widget;    QHBoxLayout *horizontalLayout;    QTableView *tableView;    QVBoxLayout *verticalLayout;    QPushButton *btnCommit;    QPushButton *btnRoll;    QPushButton *btnInsert;    QPushButton *btnDel;    QPushButton *btnSortAsc;    QPushButton *btnSortDes;    void setupUi(QWidget *Widget)    {        if (Widget->objectName().isEmpty())            Widget->setObjectName(QString::fromUtf8("Widget"));        Widget->resize(372, 400);        btnQuery = new QPushButton(Widget);        btnQuery->setObjectName(QString::fromUtf8("btnQuery"));        btnQuery->setGeometry(QRect(280, 310, 75, 23));        btnTable = new QPushButton(Widget);        btnTable->setObjectName(QString::fromUtf8("btnTable"));        btnTable->setGeometry(QRect(280, 350, 75, 23));        lineEdit = new QLineEdit(Widget);        lineEdit->setObjectName(QString::fromUtf8("lineEdit"));        lineEdit->setGeometry(QRect(100, 310, 161, 20));        widget = new QWidget(Widget);        widget->setObjectName(QString::fromUtf8("widget"));        widget->setGeometry(QRect(10, 40, 351, 251));        horizontalLayout = new QHBoxLayout(widget);        horizontalLayout->setSpacing(6);        horizontalLayout->setContentsMargins(11, 11, 11, 11);        horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));        horizontalLayout->setContentsMargins(0, 0, 0, 0);        tableView = new QTableView(widget);        tableView->setObjectName(QString::fromUtf8("tableView"));        horizontalLayout->addWidget(tableView);        verticalLayout = new QVBoxLayout();        verticalLayout->setSpacing(6);        verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));        btnCommit = new QPushButton(widget);        btnCommit->setObjectName(QString::fromUtf8("btnCommit"));        verticalLayout->addWidget(btnCommit);        btnRoll = new QPushButton(widget);        btnRoll->setObjectName(QString::fromUtf8("btnRoll"));        verticalLayout->addWidget(btnRoll);        btnInsert = new QPushButton(widget);        btnInsert->setObjectName(QString::fromUtf8("btnInsert"));        verticalLayout->addWidget(btnInsert);        btnDel = new QPushButton(widget);        btnDel->setObjectName(QString::fromUtf8("btnDel"));        verticalLayout->addWidget(btnDel);        btnSortAsc = new QPushButton(widget);        btnSortAsc->setObjectName(QString::fromUtf8("btnSortAsc"));        verticalLayout->addWidget(btnSortAsc);        btnSortDes = new QPushButton(widget);        btnSortDes->setObjectName(QString::fromUtf8("btnSortDes"));        verticalLayout->addWidget(btnSortDes);        horizontalLayout->addLayout(verticalLayout);        retranslateUi(Widget);        QMetaObject::connectSlotsByName(Widget);    } // setupUi    void retranslateUi(QWidget *Widget)    {        Widget->setWindowTitle(QApplication::translate("Widget", "Widget", 0, QApplication::UnicodeUTF8));        btnQuery->setText(QApplication::translate("Widget", "\346\237\245\350\257\242", 0, QApplication::UnicodeUTF8));        btnTable->setText(QApplication::translate("Widget", "\350\277\224\345\233\236\345\205\250\350\241\250", 0, QApplication::UnicodeUTF8));        btnCommit->setText(QApplication::translate("Widget", "\346\217\220\344\272\244", 0, QApplication::UnicodeUTF8));        btnRoll->setText(QApplication::translate("Widget", "\346\222\244\351\224\200", 0, QApplication::UnicodeUTF8));        btnInsert->setText(QApplication::translate("Widget", "\346\217\222\345\205\245", 0, QApplication::UnicodeUTF8));        btnDel->setText(QApplication::translate("Widget", "\345\210\240\351\231\244", 0, QApplication::UnicodeUTF8));        btnSortAsc->setText(QApplication::translate("Widget", "\345\215\207\345\272\217\346\216\222\345\272\217", 0, QApplication::UnicodeUTF8));        btnSortDes->setText(QApplication::translate("Widget", "\351\231\215\345\272\217\346\216\222\345\272\217", 0, QApplication::UnicodeUTF8));    } // retranslateUi};namespace Ui {    class Widget: public Ui_Widget {};} // namespace UiQT_END_NAMESPACE#endif // UI_WIDGET_H



 

	
				
		
原创粉丝点击