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

Qt實(shí)現(xiàn)編輯數(shù)據(jù)庫(kù)數(shù)據(jù)的方法詳解

 更新時(shí)間:2023年02月03日 11:10:08   作者:音視頻開(kāi)發(fā)老舅  
這篇文章主要為大家詳細(xì)介紹了Qt是如何實(shí)現(xiàn)編輯數(shù)據(jù)庫(kù)數(shù)據(jù)的,文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們深入了解QT有一定的幫助,感興趣的小伙伴可以了解一下

前面幾章我們介紹了如何對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作以及如何使用圖形界面展示數(shù)據(jù)庫(kù)數(shù)據(jù)。本章我們將介紹如何對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行編輯。當(dāng)然,我們可以選擇直接使用 SQL 語(yǔ)句進(jìn)行更新,這一點(diǎn)同前面所說(shuō)的 model/view 的編輯沒(méi)有什么區(qū)別。除此之外,Qt 還為圖形界面提供了更方便的展示并編輯的功能。

普通數(shù)據(jù)的編輯很簡(jiǎn)單,這里不再贅述。不過(guò),我們通常會(huì)遇到多個(gè)表之間存在關(guān)聯(lián)的情況。首先我們要提供一個(gè) city 表:

CREATE TABLE city (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name VARCHAR);
 
INSERT INTO city (name) VALUES ('Beijing');
INSERT INTO city (name) VALUES ('Shanghai');
INSERT INTO city (name) VALUES ('Nanjing');
INSERT INTO city (name) VALUES ('Tianjin');
INSERT INTO city (name) VALUES ('Wuhan');
INSERT INTO city (name) VALUES ('Hangzhou');
INSERT INTO city (name) VALUES ('Suzhou');
INSERT INTO city (name) VALUES ('Guangzhou');

由于 city 表是一個(gè)參數(shù)表,所以我們直接將所需要的城市名稱(chēng)直接插入到表中。接下來(lái)我們創(chuàng)建 student 表,并且使用外鍵連接 city 表:

CREATE TABLE student (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name VARCHAR,
    age INTEGER,
    address INTEGER,
    FOREIGN KEY(address) REFERENCES city(id));

我們重新創(chuàng)建 student 表(如果你使用的 RDBMS 支持 ALTER TABLE 語(yǔ)句直接修改表結(jié)構(gòu),就不需要重新創(chuàng)建了;否則的話只能先刪除舊的表,再創(chuàng)建新的表,例如 sqlite)。

這里需要注意一點(diǎn),如果此時(shí)我們?cè)?Qt 中直接使用

INSERT INTO student (name, age, address) VALUES ('Tom', 24, 100);

語(yǔ)句,盡管我們的 city 中沒(méi)有 ID 為 100 的記錄,但還是是可以成功插入的。這是因?yàn)殡m然 Qt 中的 sqlite 使用的是支持外鍵的 sqlite3,但 Qt 將外鍵屏蔽掉了。為了啟用外鍵,我們需要首先使用 QSqlQuery 執(zhí)行:

PRAGMA foreign_keys = ON;

然后就會(huì)發(fā)現(xiàn)這條語(yǔ)句不能成功插入了。接下來(lái)我們插入一些正常的數(shù)據(jù):

INSERT INTO student (name, age, address) VALUES ('Tom', 20, 2);
INSERT INTO student (name, age, address) VALUES ('Jack', 23, 1);
INSERT INTO student (name, age, address) VALUES ('Jane', 22, 4);
INSERT INTO student (name, age, address) VALUES ('Jerry', 25, 5);

下面,我們使用 model/view 方式來(lái)顯示數(shù)據(jù):

QSqlTableModel *model = new QSqlTableModel(this);
model->setTable("student");
model->setSort(ColumnID_Name, Qt::AscendingOrder);
model->setHeaderData(ColumnID_Name, Qt::Horizontal, "Name");
model->setHeaderData(ColumnID_Age, Qt::Horizontal, "Age");
model->setHeaderData(ColumnID_City, Qt::Horizontal, "City");
model->select();
 
QTableView *view = new QTableView(this);
view->setModel(model);
view->setSelectionMode(QAbstractItemView::SingleSelection);
view->setSelectionBehavior(QAbstractItemView::SelectRows);
view->resizeColumnsToContents();
 
QHeaderView *header = view->horizontalHeader();
header->setStretchLastSection(true);

這段代碼和我們前面見(jiàn)到的沒(méi)有什么區(qū)別。我們可以將其補(bǔ)充完整后運(yùn)行一下看看:

注意外鍵部分:City 一列僅顯示出了我們保存的外鍵。如果我們使用 QSqlQuery,這些都不是問(wèn)題,我們可以將外鍵信息放在一個(gè) SQL 語(yǔ)句中 SELECT 出來(lái)。但是,我們不想使用 QSqlQuery,那么現(xiàn)在可以使用另外的一個(gè)模型:QSqlRelationalTableModel。QSqlRelationalTableModel 與 QSqlTableModel 十分類(lèi)似,可以為一個(gè)數(shù)據(jù)庫(kù)表提供可編輯的數(shù)據(jù)模型,同時(shí)帶有外鍵的支持。下面我們修改一下我們的代碼:

QSqlRelationalTableModel *model = new QSqlRelationalTableModel(this);
model->setTable("student");
model->setSort(ColumnID_Name, Qt::AscendingOrder);
model->setHeaderData(ColumnID_Name, Qt::Horizontal, "Name");
model->setHeaderData(ColumnID_Age, Qt::Horizontal, "Age");
model->setHeaderData(ColumnID_City, Qt::Horizontal, "City");
model->setRelation(ColumnID_City, QSqlRelation("city", "id", "name"));
model->select();
 
QTableView *view = new QTableView(this);
view->setModel(model);
view->setSelectionMode(QAbstractItemView::SingleSelection);
view->setSelectionBehavior(QAbstractItemView::SelectRows);
view->resizeColumnsToContents();
view->setItemDelegate(new QSqlRelationalDelegate(view));
 
QHeaderView *header = view->horizontalHeader();
header->setStretchLastSection(true);

這段代碼同前面的幾乎一樣。我們首先創(chuàng)建一個(gè) QSqlRelationalTableModel 對(duì)象。注意,這里我們有一個(gè) setRelation() 函數(shù)的調(diào)用。該語(yǔ)句說(shuō)明,我們將第 ColumnID_City 列作為外鍵,參照于 city 表的 id 字段,使用 name 進(jìn)行顯示。另外的 setItemDelegate() 語(yǔ)句則提供了一種用于編輯外鍵的方式。運(yùn)行一下程序看看效果:

此時(shí),我們的外鍵列已經(jīng)顯示為 city 表的 name 字段的實(shí)際值。同時(shí)在編輯時(shí),系統(tǒng)會(huì)自動(dòng)成為一個(gè) QComboBox 供我們選擇。當(dāng)然,我們需要自己將選擇的外鍵值保存到實(shí)際記錄中,這部分我們前面已經(jīng)有所了解。

到此這篇關(guān)于Qt實(shí)現(xiàn)編輯數(shù)據(jù)庫(kù)數(shù)據(jù)的方法詳解的文章就介紹到這了,更多相關(guān)Qt編輯數(shù)據(jù)庫(kù)數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Qt數(shù)據(jù)庫(kù)相關(guān)應(yīng)用開(kāi)發(fā)總結(jié)

    Qt數(shù)據(jù)庫(kù)相關(guān)應(yīng)用開(kāi)發(fā)總結(jié)

    這篇文章主要為大家介紹了在Qt數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)中的一些經(jīng)驗(yàn)總結(jié),以及一些組件的使用介紹。文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-02-02
  • C++進(jìn)化后的const變量實(shí)例探究

    C++進(jìn)化后的const變量實(shí)例探究

    這篇文章主要為大家介紹了C++進(jìn)化后的const變量實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Linux下用Valgrind做檢查(防止內(nèi)存泄露)

    Linux下用Valgrind做檢查(防止內(nèi)存泄露)

    Valgrind是一款基于模擬linux下的程序調(diào)試器和剖析器的軟件套件,可以運(yùn)行于x86, amd64和ppc32架構(gòu)上。valgrind包含一個(gè)核心,它提供一個(gè)虛擬的CPU運(yùn)行程序,還有一系列的工具,它們完成調(diào)試,剖析和一些類(lèi)似的任務(wù)
    2014-01-01
  • 利用C語(yǔ)言實(shí)現(xiàn)經(jīng)典多級(jí)時(shí)間輪定時(shí)器

    利用C語(yǔ)言實(shí)現(xiàn)經(jīng)典多級(jí)時(shí)間輪定時(shí)器

    C語(yǔ)言是一門(mén)通用計(jì)算機(jī)編程語(yǔ)言,廣泛應(yīng)用于底層開(kāi)發(fā),這篇文章主要給大家介紹了關(guān)于利用C語(yǔ)言實(shí)現(xiàn)經(jīng)典多級(jí)時(shí)間輪定時(shí)器的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • C++指針學(xué)習(xí)詳解

    C++指針學(xué)習(xí)詳解

    指針在 C\C++ 語(yǔ)言中是很重要的內(nèi)容,并且和指針有關(guān)的內(nèi)容一向令初學(xué)者頭大,這篇文章主要給大家介紹了關(guān)于C/C++中指針的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • QT實(shí)現(xiàn)簡(jiǎn)單打地鼠游戲

    QT實(shí)現(xiàn)簡(jiǎn)單打地鼠游戲

    這篇文章主要為大家詳細(xì)介紹了QT實(shí)現(xiàn)簡(jiǎn)單打地鼠游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C語(yǔ)言實(shí)現(xiàn)信號(hào)槽的項(xiàng)目實(shí)踐

    C語(yǔ)言實(shí)現(xiàn)信號(hào)槽的項(xiàng)目實(shí)踐

    信號(hào)槽是觀察者模式的一種實(shí)現(xiàn),一個(gè)信號(hào)就是一個(gè)能夠被觀察的事件,本文主要介紹了C語(yǔ)言實(shí)現(xiàn)信號(hào)槽的項(xiàng)目實(shí)踐模具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • C++Stack棧類(lèi)模版實(shí)例詳解

    C++Stack棧類(lèi)模版實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了C++Stack棧類(lèi)模版實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C語(yǔ)言實(shí)現(xiàn)哈夫曼樹(shù)的構(gòu)建

    C語(yǔ)言實(shí)現(xiàn)哈夫曼樹(shù)的構(gòu)建

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)哈夫曼樹(shù)的構(gòu)建,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C++實(shí)現(xiàn)LeetCode(22.生成括號(hào))

    C++實(shí)現(xiàn)LeetCode(22.生成括號(hào))

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(22.生成括號(hào)),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評(píng)論

炎陵县| 桦川县| 涡阳县| 张北县| 安平县| 庆安县| 青神县| 融水| 滦南县| 聊城市| 永吉县| 云安县| 体育| 东阳市| 新建县| 桦甸市| 微博| 周口市| 息烽县| 怀来县| 应用必备| 汉川市| 大田县| 阿克陶县| 丰都县| 潍坊市| 博爱县| 封开县| 沙坪坝区| 天峨县| 武穴市| 辰溪县| 额敏县| 兴安盟| 台安县| 双江| 囊谦县| 安达市| 山西省| 孝昌县| 卓资县|