Qt筆記——數據庫的圖形界面


1將讀取的數據通過表格的方式顯示出來

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QSqlTableModel>
namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_BtnAdd_clicked();

    void on_BtnSure_clicked();

    void on_BtnCancel_clicked();

    void on_BtnDel_clicked();

    void on_BtnFind_clicked();

private:
    Ui::Widget *ui;
    QSqlTableModel *model;
};

#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery>
#include <QVariantList>
#include <QSqlTableModel>
#include <QSqlRecord>
#include <QItemSelectionModel>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //打印Qt支持的數據庫驅動
    qDebug()<<QSqlDatabase::drivers();
    //添加Sqlite數據庫
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    //設置數據庫
    db.setDatabaseName("../info.db");

    //打開數據庫
    if(!db.open())
    {
        QMessageBox::warning(this,"error",db.lastError().text());
        return;
    }

    //設置模型
    model = new QSqlTableModel(this);
    model->setTable("student");//指定使用哪個表
    //把model->放在view
    ui->tableView->setModel(model);
    //顯示model的數據
    model->select();
    model->setHeaderData(0,Qt::Horizontal,"學號");

    //設置model的編輯模式,手動提交修改
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);

    //設置view中的數學庫不允許修改
    //ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);

}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_BtnAdd_clicked()
{
    //添加空記錄
    QSqlRecord record = model->record();//獲取空記錄
    //獲取行號
    int row = model->rowCount();
    model->insertRecord(row, record);
}

void Widget::on_BtnSure_clicked()
{
    model->submitAll();//提交動作
}

void Widget::on_BtnCancel_clicked()
{
    model->revertAll(); //取消所有動作
    model->submitAll(); //提交所有動作
}

void Widget::on_BtnDel_clicked()
{
    //獲取選中的模型
    QItemSelectionModel *sModel = ui->tableView->selectionModel();
    //取出模型中的索引
    QModelIndexList list = sModel->selectedRows();
    //刪除所有選中行
    for(int i = 0; i<list.size();i++)
    {
        model->removeRow(list.at(i).row());
    }
}

void Widget::on_BtnFind_clicked()
{
    QString name = ui->lineEdit->text();
    QString str = QString("name = '%1'").arg(name);//單引號不能忘
    model->setFilter(str);
    model->select();
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM