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

QT中QStringListModel類的應(yīng)用介紹

 更新時間:2024年01月03日 11:36:18   作者:冷凝女子  
QStringListModel是最簡單的模型類,具備向視圖提供字符串?dāng)?shù)據(jù)的能力,本文主要介紹了QT中QStringListModel類的應(yīng)用介紹,具有一定的參考價值,感興趣的可以了解一下

 1 概述

QStringListModel用于處理字符串列表的數(shù)據(jù)模型,它可以作為QListView的數(shù)據(jù)模型,在界 面上顯示和編輯字符串列表。

QStringListModel的setStringList()函數(shù)可以初始化數(shù)據(jù)模型的字符串列表的內(nèi)容,stringList() 函數(shù)返回數(shù)據(jù)模型內(nèi)的字符串列表,在關(guān)聯(lián)的 ListView 組件里編輯修改數(shù)據(jù)后,數(shù)據(jù)都會及時更 新到數(shù)據(jù)模型內(nèi)的字符串列表里。

QStringListModel提供編輯和修改字符串列表數(shù)據(jù)的函數(shù),如insertRows()、removeRows()、 setData() 等,這些操作直接影響數(shù)據(jù)模型內(nèi)部的字符串列表,并且修改后的數(shù)據(jù)會自動在關(guān)聯(lián)的 ListView 組件里刷新顯示。

2 QStringListModel常用方法

1. QStringListModel(const QStringList &strings, QObject *parent = nullptr):構(gòu)造函數(shù),用于創(chuàng)建一個QStringListModel對象,并初始化它的數(shù)據(jù)為strings列表。

2. int rowCount(const QModelIndex &parent = QModelIndex()) const:返回模型中的行數(shù)。

3. QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const:返回模型中指定索引的數(shù)據(jù)。

4. bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole):設(shè)置模型中指定索引的數(shù)據(jù)為value。

5. Qt::ItemFlags flags(const QModelIndex &index) const:返回模型中指定索引的標(biāo)志。

6. bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()):在模型中的指定位置插入count行。

7. bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()):從模型中的指定位置刪除count行。

8. QStringList stringList() const:返回模型中的QString列表。

9. void setStringList(const QStringList &strings):設(shè)置模型中的QString列表為strings。

3 使用QStringListModel的步驟 

1. 創(chuàng)建一個QStringListModel對象,并初始化它的數(shù)據(jù)為一個QString列表。

2. 將QStringListModel對象設(shè)置為視圖組件的模型。

3. 通過QStringListModel對象提供的方法來修改模型中的數(shù)據(jù)。

4 QStringListModel的使用

實例samp5_2采用QStringListModel作 為數(shù)據(jù)模型,QListView組件作為視圖組件, 演示了QStringListModel和QListView構(gòu)成 Model/View結(jié)構(gòu)編輯字符串列表的功能,程 序運行時界面如圖1所示。

窗口左側(cè)是對QStrmgListModel的一些 操作,右側(cè)的QPlaintextEdit組件顯示QString ListModel::stringList()的內(nèi)容,以查看其是否 與界面上ListView組件顯示的內(nèi)容一致。

4.1 Model/View結(jié)構(gòu)對象和組件初始化

實例samp5_2的窗口是從QWidget繼承而來的類Widget,界面采用可視化設(shè)計。在Widget 類中定義一個 QStringListModel 類的變量:

QStringListModel *theModel;

在Widget類的構(gòu)造函數(shù)中進行變量的創(chuàng)建,完成數(shù)據(jù)模型與界面視圖組件的關(guān)聯(lián),下面是 Widget 類構(gòu)造函數(shù)的代碼:

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    QStringList theStrList; //保存初始 StringList
    theStrList<<"北京"<<"上海"<<"天津"<<"河北"<<"山東"<<"四川"<<"重慶"<<"廣東"<<"河南"; //初始化 StringList
    theModel=new QStringListModel(this); //創(chuàng)建數(shù)據(jù)模型
    theModel->setStringList(theStrList); //為模型設(shè)置StringList,會導(dǎo)入StringList的內(nèi)容
    ui->listView->setModel(theModel); //為listView設(shè)置數(shù)據(jù)模型
    ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked);
}

QStringListModel的setStringList()函數(shù)將一個字符串列表的內(nèi)容作為數(shù)據(jù)模型的初始數(shù)據(jù)內(nèi)容。 QListView的setModel()函數(shù)為界面視圖組件設(shè)置一個數(shù)據(jù)模型。 程序運行后,界面上ListView組件里就會顯示初始化的字符串列表的內(nèi)容。

4.2 編輯、添加、刪除項的操作

(1)編輯項

QListView::setEditTriggers()函數(shù)設(shè)置QListView的條目是否可以編輯,以及如何進入編輯狀 態(tài),函數(shù)的參數(shù)是QAbstractItemView::EditTrigger枚舉類型值的組合。

在雙擊,或選擇并單擊列表項后,就進入編輯狀態(tài)。

ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked);

若要設(shè)置為不可編輯,則可以設(shè)置為:

ui->listView->setEditTriggers(QAbstractItemView::NoEditTriggers);

(2)添加項

添加項是要在列表的最后添加一行,界面上“添加項”按鈕的槽函數(shù)代碼如下:

void Widget::on_btnListAppend_clicked()
{ //添加一行
    theModel->insertRow(theModel->rowCount()); //在尾部插入一空行
    QModelIndex index=theModel->index(theModel->rowCount()-1,0);//獲取最后一行
    theModel->setData(index,"new item",Qt::DisplayRole);//設(shè)置顯示文字
    ui->listView->setCurrentIndex(index); //設(shè)置當(dāng)前選中的行
}

對數(shù)據(jù)的操作都是針對數(shù)據(jù)模型的,所以,插入一行使用的是QStringListModel的insertRow (int row)函數(shù),其中row是一個行號,表示在row行之前插入一行。要在列表的最后插入一行,參 數(shù)row設(shè)置為列表當(dāng)前的行數(shù)即可。

這樣只是在列表尾部添加一個空行,沒有任何文字。為了給添加的項設(shè)置一個缺省的文字標(biāo) 題,首先要獲得新增項的模型索引,即:

QModelIndex index=theModel->index(theModel->rowCount()-1,0);//獲取最后一行

QStringListModel的index()函數(shù)根據(jù)傳遞的行號、列號、父項的模型索引生成一個模型索引, 這行代碼為新增的最后一個項生成一個模型索引index。

為新增的項設(shè)置一個文字標(biāo)題“new item”,使用setData()函數(shù),并用到前面生成的模型索引 index。代碼如下:

theModel->setData(index,"new item",Qt::DisplayRole);//設(shè)置顯示文字

在使用setData()函數(shù)時,必須指定設(shè)置數(shù)據(jù)的角色,這里的角色是Qt::DisplayRole它是用 于顯示的角色,即項的文字標(biāo)題。

(3)插入項

“插入項”按鈕的功能是在列表的當(dāng)前行前面插入一行,其實現(xiàn)代碼如下:

void Widget::on_btnListInsert_clicked()
{//插入一行
    QModelIndex  index;
    index=ui->listView->currentIndex(); //當(dāng)前 modelIndex
    theModel->insertRow(index.row()); //在當(dāng)前行的前面插入一行
    theModel->setData(index,"inserted item",Qt::DisplayRole); //設(shè)置顯示文字
    theModel->setData(index,Qt::AlignRight,Qt::TextAlignmentRole); //設(shè)置對齊方式,不起作用
    ui->listView->setCurrentIndex(index); //設(shè)置當(dāng)前選中的行
}

QListView::cunentIndex()獲得當(dāng)前項的模型索引index,index.row()則返回這個模型索引的行號。

(4)刪除當(dāng)前項

使用QStringListModel的removeRow()函數(shù)刪除某一行的代碼如下:

void Widget::on_btnListDelete_clicked()
{//刪除當(dāng)前行
    QModelIndex  index;
    index=ui->listView->currentIndex(); //獲取當(dāng)前 modelIndex
    theModel->removeRow(index.row()); //刪除當(dāng)前行
}

(5)刪除列表
刪除列表的所有項可使用QStringListModel的removeRows(introw,intcount)函數(shù),它表示從行號row開始刪除count行。代碼如下:

void Widget::on_btnListClear_clicked()
{//清除ListView的所有項
    theModel->removeRows(0,theModel->rowCount());
}

4.3 以文本顯示數(shù)據(jù)模型的內(nèi)容

以上在對界面上ListView的項進行編輯時,實際操作的都是其關(guān)聯(lián)的數(shù)據(jù)模型theModeI,在 對數(shù)據(jù)模型進行插入、添加、刪除項操作后,內(nèi)容立即在ListView上顯示出來,這是數(shù)據(jù)模型與 視圖組件之間信號與槽的作用,當(dāng)數(shù)據(jù)模型的內(nèi)容發(fā)生改變時,通知視圖組件更新顯示。

同樣的,當(dāng)在ListView上雙擊一行進入編輯狀態(tài),修改一個項的文字內(nèi)容后,這部分內(nèi)容也 保存到數(shù)據(jù)模型里。

那么,數(shù)據(jù)模型內(nèi)部應(yīng)該保存有最新的數(shù)據(jù)內(nèi)容,對于QStringListModel模型來說,通過 stringList()函數(shù)可以得到其最新的數(shù)據(jù)副本。界面上的“顯示數(shù)據(jù)模型的StringList"按鈕獲取數(shù)據(jù) 模型的stringList,并用多行文本的形式顯示其內(nèi)容,以檢驗對數(shù)據(jù)模型修改數(shù)據(jù),特別是在界面 上修改列表項的文字后,其內(nèi)部的數(shù)據(jù)是否同步更新了。

以下是界面上的“顯示數(shù)據(jù)模型的StringList"按鈕的clicked()信號的槽函數(shù)代碼,它通過數(shù) 據(jù)模型的stringList()函數(shù)獲取字符串列表,并在plainTextEdit里逐行顯示:

void Widget::on_btnTextImport_clicked()
{// 顯示數(shù)據(jù)模型的StringList
    QStringList tmpList;
    tmpList=theModel->stringList();//獲取數(shù)據(jù)模型的StringList
    ui->plainTextEdit->clear(); //文本框清空
    for (int i=0; i<tmpList.count();i++)
        ui->plainTextEdit->appendPlainText(tmpList.at(i)); //顯示數(shù)據(jù)模型的StringList()返回的內(nèi)容
}

程序運行時,無論對ListView的列表做了什么編輯和修改,單擊“顯示數(shù)據(jù)模型的StringList" 按鈕,在文本框里顯示的文字內(nèi)容與ListView里總是完全相同的,說明數(shù)據(jù)模型的數(shù)據(jù)與界面上 顯示的內(nèi)容是同步的。

4.4 其他功能

QListView的clicked()信號會傳遞一個QModelIndex類型的參數(shù),利用該參數(shù),可以顯示當(dāng)前 項的模型索引的行和列的信息,實現(xiàn)代碼如下:

void Widget::on_listView_clicked(const QModelIndex &index)
{ //顯示QModelIndex的行、列號
    ui->LabInfo->setText(QString::asprintf("當(dāng)前項:row=%d, column=%d",
                        index.row(),index.column()));
}

在這個實例中,通過QStringListModel和QListView說明了數(shù)據(jù)模型與視圖組件之間構(gòu)成 Model/View結(jié)構(gòu)的基本原理。

實例samp4_7中采用QListWidget設(shè)計了一個列表編輯器,對比這兩個實例,可以 發(fā)現(xiàn)如下兩點。

  • 在Model/View結(jié)構(gòu)中,數(shù)據(jù)模型與視圖組件是分離的,可以直接操作數(shù)據(jù)模型以修改數(shù) 據(jù),在視圖組件中做的修改也會自動保存到數(shù)據(jù)模型里。

  • 在使用QListWidget的例子中,每個列表項是一個QListWidgetItem類型的變量,保存了項 的各種數(shù)據(jù),數(shù)據(jù)和顯示界面是一體的,對數(shù)據(jù)的修改操作就是對項關(guān)聯(lián)的變量的修改。

所以,這是Model/View結(jié)構(gòu)與便利組件之間的主要區(qū)別。

到此這篇關(guān)于QT中QStringListModel類的應(yīng)用介紹的文章就介紹到這了,更多相關(guān)QT QStringListModel類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實現(xiàn)簡易萬年歷

    C++實現(xiàn)簡易萬年歷

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)簡易萬年歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • exec()函數(shù)在C++中的應(yīng)用及其用法

    exec()函數(shù)在C++中的應(yīng)用及其用法

    exec()函數(shù)在C++中是一個進程控制函數(shù),用于創(chuàng)建新進程執(zhí)行其他程序或命令行指令。exec()函數(shù)可以替換當(dāng)前進程的代碼和數(shù)據(jù),創(chuàng)建新的進程運行其他程序。exec()函數(shù)有多個版本,例如execl、execv、execle、execve等,根據(jù)不同的參數(shù)類型和個數(shù)來使用
    2023-05-05
  • Objective-C不帶加減號的方法實例

    Objective-C不帶加減號的方法實例

    顯而易見的事實是,Objective-C 中,+ 表示類方法,- 表示實例方法,這篇文章主要給大家介紹了關(guān)于Objective-C不帶加減號的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • C++實現(xiàn)將輸入的內(nèi)容輸出到文本文件

    C++實現(xiàn)將輸入的內(nèi)容輸出到文本文件

    這篇文章主要介紹了C++實現(xiàn)將輸入的內(nèi)容輸出到文本文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語言中sizeof()與strlen()函數(shù)的使用入門及對比

    C語言中sizeof()與strlen()函數(shù)的使用入門及對比

    這篇文章主要介紹了C語言中sizeof()與strlen()函數(shù)的使用入門及對比,同時二者在C++中的使用情況也基本上同理,是需要的朋友可以參考下
    2015-12-12
  • C++菱形繼承及解決方法詳解

    C++菱形繼承及解決方法詳解

    這篇文章主要介紹了C++菱形繼承及解決方法詳解,在多繼承結(jié)構(gòu)中,存在著很多問題,比如從不同基類中繼承了同名成員,派生類中也定義了同名成員,這種二義性問題很好解決,加上要訪問的基類的類名限制就可以了,需要的朋友可以參考下
    2023-08-08
  • C語言正則表達式操作示例

    C語言正則表達式操作示例

    這篇文章主要介紹了C語言正則表達式操作,結(jié)合實例形式分析了C語言正則匹配類似郵箱格式功能的實現(xiàn)技巧,需要的朋友可以參考下
    2017-07-07
  • C++的繼承法則詳解

    C++的繼承法則詳解

    本文詳細(xì)介紹了C++中的繼承機制,包括繼承的概念、定義、使用方法、訪問限定符、賦值兼容轉(zhuǎn)換、作用域、默認(rèn)成員函數(shù)、友元關(guān)系、靜態(tài)成員以及單繼承、多繼承和菱形繼承,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • C語言實現(xiàn)學(xué)生消費管理系統(tǒng)

    C語言實現(xiàn)學(xué)生消費管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)學(xué)生消費管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 利用C語言替換文件中某一行的方法

    利用C語言替換文件中某一行的方法

    大家都知道C語言提供了文件操作,但是替換文件的某一行比較麻煩,下面是我使用的一個方法,現(xiàn)在分享給大家,有需要的朋友們可以參考借鑒。
    2016-09-09

最新評論

调兵山市| 开阳县| 双流县| 牙克石市| 东平县| 岚皋县| 宁夏| 大港区| 大石桥市| 宝清县| 安达市| 方城县| 闵行区| 北安市| 阿鲁科尔沁旗| 股票| 民丰县| 古蔺县| 安福县| 遂川县| 娄烦县| 师宗县| 河池市| 海宁市| 韩城市| 彰化市| 东兰县| 房产| 三穗县| 廉江市| 拜泉县| 万源市| 利津县| 东宁县| 华坪县| 新干县| 扎囊县| 孟津县| 洱源县| 湖口县| 疏附县|