欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt教程之QSqlQueryModel的使用詳解

 更新時間:2022年11月21日 11:14:32   作者:音視頻開發(fā)老舅  
QSqlQueryModel是QSqlTableModel的父類,它封裝了執(zhí)行SELECT語句從數(shù)據(jù)庫查詢數(shù)據(jù)的功能,本文將為大家介紹一下QSqlQueryModel的使用,需要的可以參考一下

1.功能概述

QSqlQueryModel是QSqlTableModel的父類。QSqlQueryModel封裝了執(zhí)行SELECT語句從數(shù)據(jù)庫查詢數(shù)據(jù)的功能,但是QSqlQueryModel只能作為只讀數(shù)據(jù)源使用,不可以編輯數(shù)據(jù)。

2.常用API

void clear() //清除數(shù)據(jù)模型,釋放所有獲得的數(shù)據(jù)

QSqlQuery query() //返回當前關聯(lián)的QSqlQuery()對象

void setQuery() //設置一個QSqlQuery對象,獲取數(shù)據(jù)

QSqlRecord record() //返回一個空記錄,包含當前查詢的字段信息

QSqlRecord record(int row) //返回行號為row的記錄

QSqlQueryModel作為數(shù)據(jù)模型從數(shù)據(jù)庫里查詢數(shù)據(jù),只需要使用setQuery()函數(shù)設置一個select查詢語句即可。

3.QSqlQuery

QSqlQuery是能執(zhí)行任意SQL語句的類,如select、insert、update、delete等。能和QSqlQueryModel一起聯(lián)合使用。

4.示例

#ifndef WIDGET_H
#define WIDGET_H
 
#include <QWidget>
#include <QSqlQueryModel>
#include <QSqlQuery>
#include <QSqlDatabase>
#include <QDataWidgetMapper>
#include "ComboBoxDelegate.h"
#include "SpinBoxDelegate.h"
#include <QModelIndex>
 
namespace Ui {
class Widget;
}
 
class Widget : public QWidget
{
    Q_OBJECT
 
public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
 
private:
    void initTableView();
 
private slots:
    void on_btnOpen_clicked();
 
    void on_tableView_clicked(const QModelIndex &index);
 
    void on_btnAdd_clicked();
 
    void on_btnDel_clicked();
 
private:
    Ui::Widget *ui;
 
private:
    QSqlQueryModel *m_model = nullptr;
 
    ComboBoxDelegate m_cbxDelegate;
 
    SpinBoxDelegate m_spinDelegate;
 
    QSqlDatabase m_db;
 
    QDataWidgetMapper *m_dataMapper = nullptr;
};
 
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QDebug>
#include <QSqlRecord>
 
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
 
    ui->tableView->verticalHeader()->setHidden(true);
 
    ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
 
    ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
 
    ui->tableView->setAlternatingRowColors(true);
 
    this->resize(1000,600);
}
 
Widget::~Widget()
{
    delete ui;
}
 
void Widget::initTableView()
{
    //數(shù)據(jù)表model
    m_model = new QSqlQueryModel(this);
 
    //查詢數(shù)據(jù)
    m_model->setQuery("select id,name,sex,age,addr,height from students");
 
    m_model->setHeaderData(0,Qt::Horizontal,"編號");
    m_model->setHeaderData(1,Qt::Horizontal,"姓名");
    m_model->setHeaderData(2,Qt::Horizontal,"性別");
    m_model->setHeaderData(3,Qt::Horizontal,"年齡");
    m_model->setHeaderData(4,Qt::Horizontal,"地址");
    m_model->setHeaderData(5,Qt::Horizontal,"身高");
 
    //設置模型
    ui->tableView->setModel(m_model);
 
    //設置性別代理
    ui->tableView->setItemDelegateForColumn(2,&m_cbxDelegate);
 
    //設置年齡代理
    ui->tableView->setItemDelegateForColumn(3,&m_spinDelegate);
 
    //創(chuàng)建界面組件與數(shù)據(jù)模型的字段之間的數(shù)據(jù)映射
    m_dataMapper = new QDataWidgetMapper(this);
 
    //設置數(shù)據(jù)模型
    m_dataMapper->setModel(m_model);
 
    m_dataMapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);
 
    //界面組件與tabModel的具體字段之間的聯(lián)系
    m_dataMapper->addMapping(ui->spinBoxNum,0);
    m_dataMapper->addMapping(ui->lineEditName,1);
    m_dataMapper->addMapping(ui->cbxSex,2);
    m_dataMapper->addMapping(ui->spinBoxAge,3);
    m_dataMapper->addMapping(ui->lineEditAddr,4);
    m_dataMapper->addMapping(ui->doubleSpinBoxHeight,5);
 
    //移動到首記錄
    m_dataMapper->toFirst();
}
 
 
void Widget::on_btnOpen_clicked()
{
    QString file = QFileDialog::getOpenFileName(this,"選擇數(shù)據(jù)庫文件","",
                                               "SQLite數(shù)據(jù)庫(*.db *.db3)");
    if(file.isEmpty())
        return;
 
    m_db = QSqlDatabase::addDatabase("QSQLITE");
    m_db.setDatabaseName(file);
 
    if(!m_db.open())
    {
        qDebug()<<"打開失敗";
        return;
    }
 
    initTableView();
}
 
void Widget::on_tableView_clicked(const QModelIndex &index)
{
    m_dataMapper->setCurrentIndex(index.row());
}
 
void Widget::on_btnAdd_clicked()
{
    QSqlQuery query;
    query.prepare("insert into students (id,name,sex,age,addr,height)"
                  "values(:ID,:Name,:Sex,:Age,:Addr,:Height)");
 
    query.bindValue(":ID",20);
    query.bindValue(":Name","馬超");
    query.bindValue(":Sex","男");
    query.bindValue(":Age",27);
    query.bindValue(":Addr","蜀國");
    query.bindValue(":Height",1.76);
 
    if(!query.exec())
        return;
}
 
void Widget::on_btnDel_clicked()
{
    QModelIndex curIndex = ui->tableView->currentIndex();
 
    //獲取當前記錄
    QSqlRecord curRec = m_model->record(curIndex.row());
 
    if(curRec.isEmpty())
        return;
 
    //獲取id
    int id = curRec.value("id").toInt();
 
    QSqlQuery query;
    query.prepare("delete from students where id = :ID");
    query.bindValue(":ID",id);
 
    if(!query.exec())
        return;
}

到此這篇關于Qt教程之QSqlQueryModel的使用詳解的文章就介紹到這了,更多相關Qt QSqlQueryModel內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解C++何時需要拷貝構造函數(shù)

    詳解C++何時需要拷貝構造函數(shù)

    拷貝構造函數(shù)是一個特殊的構造函數(shù),用于創(chuàng)建一個新對象,該對象與另一個同類對象具有相同的屬性和值,在 C++ 中,拷貝構造函數(shù)通常采用另一個同類對象作為參數(shù),并使用該對象初始化新對象,本文給大家講講何時需要拷貝函數(shù),需要的朋友可以參考下
    2023-09-09
  • vs2019 Com組件初探之簡單的COM編寫及實現(xiàn)跨語言調用的方法

    vs2019 Com組件初探之簡單的COM編寫及實現(xiàn)跨語言調用的方法

    這篇文章主要介紹了vs2019 Com組件初探之簡單的COM編寫及實現(xiàn)跨語言調用的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • C語言輸出教學日歷表的方法實例

    C語言輸出教學日歷表的方法實例

    最近幫朋友做一些C語言的練習題,期間遇到了個比較有意思的題目,下面這篇文章主要給大家介紹了關于C語言輸出教學日歷表的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • C++可調用對象callable object深入分析

    C++可調用對象callable object深入分析

    所謂的callable object,表示可以被某種方式調用其某些函數(shù)的對象。它可以是:一個函數(shù)、一個指向成員函數(shù)的指針、一個函數(shù)對象,該對象擁有operator()、一個lambda表達式,嚴格的說它是一種函數(shù)對象
    2022-08-08
  • C++中map 字典的基本使用教程

    C++中map 字典的基本使用教程

    Map是字典一樣的數(shù)據(jù)結構,它是(鍵,值)對的關聯(lián)數(shù)組,其中每個唯一鍵僅與單個值相關聯(lián),下面這篇文章主要給大家介紹了關于C++中map 字典的基本使用的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-09-09
  • C語言實現(xiàn)打飛機游戲

    C語言實現(xiàn)打飛機游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)打飛機游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 淺談帶緩沖I/O 和不帶緩沖I/O的區(qū)別與聯(lián)系

    淺談帶緩沖I/O 和不帶緩沖I/O的區(qū)別與聯(lián)系

    下面小編就為大家?guī)硪黄獪\談帶緩沖I/O 和不帶緩沖I/O的區(qū)別與聯(lián)系。小編覺得挺不錯的現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C語言查找數(shù)組里數(shù)字重復次數(shù)的方法

    C語言查找數(shù)組里數(shù)字重復次數(shù)的方法

    這篇文章主要介紹了C語言查找數(shù)組里數(shù)字重復次數(shù)的方法,涉及C語言針對數(shù)組的遍歷與判斷技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • C++全面覆蓋內存管理知識講解

    C++全面覆蓋內存管理知識講解

    本章主要介紹C語言與C++的內存管理,以C++的內存分布作為引入,介紹C++不同于C語言的內存管理方式(new delete對比 malloc free),感興趣的朋友來看看吧
    2022-06-06
  • C++中隊列的建立與操作詳細解析

    C++中隊列的建立與操作詳細解析

    隊列結構是從數(shù)據(jù)運算來分類的,也就是說隊列結構具有特殊的運算規(guī)則。而從數(shù)據(jù)的邏輯結構來看,隊列結構其實就是一種線性結構。如果從數(shù)據(jù)的存儲結構來進一步劃分,隊列結構可以分成兩類
    2013-10-10

最新評論