最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt教程之QSqlQueryModel的使用詳解

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

1.功能概述

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

2.常用API

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

QSqlQuery query() //返回當(dāng)前關(guān)聯(lián)的QSqlQuery()對(duì)象

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

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

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

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

3.QSqlQuery

QSqlQuery是能執(zhí)行任意SQL語(yǔ)句的類,如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,"編號(hào)");
    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,"身高");
 
    //設(shè)置模型
    ui->tableView->setModel(m_model);
 
    //設(shè)置性別代理
    ui->tableView->setItemDelegateForColumn(2,&m_cbxDelegate);
 
    //設(shè)置年齡代理
    ui->tableView->setItemDelegateForColumn(3,&m_spinDelegate);
 
    //創(chuàng)建界面組件與數(shù)據(jù)模型的字段之間的數(shù)據(jù)映射
    m_dataMapper = new QDataWidgetMapper(this);
 
    //設(shè)置數(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);
 
    //移動(dòng)到首記錄
    m_dataMapper->toFirst();
}
 
 
void Widget::on_btnOpen_clicked()
{
    QString file = QFileDialog::getOpenFileName(this,"選擇數(shù)據(jù)庫(kù)文件","",
                                               "SQLite數(shù)據(jù)庫(kù)(*.db *.db3)");
    if(file.isEmpty())
        return;
 
    m_db = QSqlDatabase::addDatabase("QSQLITE");
    m_db.setDatabaseName(file);
 
    if(!m_db.open())
    {
        qDebug()<<"打開(kāi)失敗";
        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","蜀國(guó)");
    query.bindValue(":Height",1.76);
 
    if(!query.exec())
        return;
}
 
void Widget::on_btnDel_clicked()
{
    QModelIndex curIndex = ui->tableView->currentIndex();
 
    //獲取當(dāng)前記錄
    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;
}

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

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)斗地主的核心算法

    C語(yǔ)言實(shí)現(xiàn)斗地主的核心算法

    本文給大家分享的是使用C語(yǔ)言實(shí)現(xiàn)的斗地主游戲的核心算法,主要實(shí)現(xiàn)了面向?qū)ο笤O(shè)計(jì),洗牌、發(fā)牌、判斷牌型、比較牌的大小、游戲規(guī)則等算法。通過(guò)這個(gè)斗地主小項(xiàng)目的練習(xí),提高了我的面向?qū)ο笤O(shè)計(jì)能力,加深了對(duì)算法的理解。最近把這些設(shè)計(jì)和算法分享給大家。
    2015-03-03
  • C語(yǔ)言如何改變字體顏色

    C語(yǔ)言如何改變字體顏色

    這篇文章主要介紹了C語(yǔ)言如何改變字體顏色,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • C++實(shí)現(xiàn)加減乘除計(jì)算器

    C++實(shí)現(xiàn)加減乘除計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)加減乘除計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下<BR>
    2022-01-01
  • 利用C語(yǔ)言模擬實(shí)現(xiàn)qsort,strcpy,strcat,strcmp函數(shù)

    利用C語(yǔ)言模擬實(shí)現(xiàn)qsort,strcpy,strcat,strcmp函數(shù)

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)C語(yǔ)言模擬實(shí)現(xiàn)qsort(采用冒泡的方式),strcpy,strcat,strcmp等函數(shù),文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-11-11
  • C指針原理教程之AT&T匯編

    C指針原理教程之AT&T匯編

    AT&T 匯編是一種和intel匯編在語(yǔ)法上完全不同的匯編語(yǔ)言,為避免混淆intel語(yǔ)法,本文只介紹AT&T匯編,AT&T的第一個(gè)特點(diǎn)就是每個(gè)寄存器名前必須加‘%’,立即數(shù)前必須加‘$’
    2019-02-02
  • C語(yǔ)言SetConsoleTextAttribute函數(shù)使用方法

    C語(yǔ)言SetConsoleTextAttribute函數(shù)使用方法

    這篇文章介紹了C語(yǔ)言SetConsoleTextAttribute函數(shù)的使用方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • 矩陣的行主序與列主序的分析

    矩陣的行主序與列主序的分析

    這篇文章主要介紹了矩陣的行主序與列主序的分析的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 使用C語(yǔ)言實(shí)現(xiàn)內(nèi)存池的示例代碼

    使用C語(yǔ)言實(shí)現(xiàn)內(nèi)存池的示例代碼

    所謂內(nèi)存池,顧名思義和線程池的設(shè)計(jì)原理是一樣的,為了減少頻繁申請(qǐng)釋放內(nèi)存而帶來(lái)的資源消耗,減少釋放內(nèi)存后產(chǎn)生的內(nèi)存碎片,下面我們就來(lái)看看如何使用C語(yǔ)言實(shí)現(xiàn)內(nèi)存池吧
    2024-02-02
  • C++析構(gòu)函數(shù)內(nèi)部工作機(jī)制詳解

    C++析構(gòu)函數(shù)內(nèi)部工作機(jī)制詳解

    析構(gòu)函數(shù)(Destructor)也是一種特殊的成員函數(shù),沒(méi)有返回值,不需要程序員顯式調(diào)用(程序員也沒(méi)法顯式調(diào)用),而是在銷(xiāo)毀對(duì)象時(shí)自動(dòng)執(zhí)行。構(gòu)造函數(shù)的名字和類名相同,而析構(gòu)函數(shù)的名字是在類名前面加一個(gè)~符號(hào)
    2023-02-02
  • 使用C語(yǔ)言實(shí)現(xiàn)模糊搜索功能

    使用C語(yǔ)言實(shí)現(xiàn)模糊搜索功能

    本文所提到的模糊搜索是指輸入不完整的關(guān)鍵詞即可查詢到對(duì)應(yīng)的全部準(zhǔn)確結(jié)果。下面小編通過(guò)實(shí)例代碼給大家分享使用C語(yǔ)言實(shí)現(xiàn)模糊搜索功能,感興趣的朋友一起看看吧
    2018-08-08

最新評(píng)論

东光县| 蒙山县| 贡觉县| 文水县| 普兰店市| 周至县| 穆棱市| 辉县市| 山阴县| 慈利县| 阿拉善左旗| 石渠县| 榆中县| 枝江市| 江永县| 页游| 绥滨县| 红河县| 柏乡县| 阳新县| 桐梓县| 阜城县| 克拉玛依市| 东方市| 绿春县| 韶关市| 封丘县| 林口县| 合水县| 麻栗坡县| 雷山县| 望城县| 隆昌县| 勃利县| 荔浦县| 灌云县| 砚山县| 石棉县| 陇西县| 大安市| 醴陵市|