zoukankan      html  css  js  c++  java
  • 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();
    }
  • 相关阅读:
    安卓linux真机调试
    Java开发必装的IntelliJ IDEA插件
    在switch中的case语句中声明变量会被提前
    PostgresSQL 数组包含@>
    SQL 增加列、修改列、删除列
    ConcurrentHashMap 的实现原理
    Apache——DBUtils框架ResultSetHandler接口使用
    [转](不理想)Ubuntu下更改主显示器
    [问题记录]Java关于可变参数重载问题的测试
    使用openssl生成双向加密证书(转)
  • 原文地址:https://www.cnblogs.com/dalanjing/p/8849706.html
Copyright © 2011-2022 走看看