亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

 1 概述

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

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

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

2 QStringListModel常用方法

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

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

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

4 QStringListModel的使用

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

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

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

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

QStringListModel *theModel;

在Widget類的構(gòu)造函數(shù)中進(jìn)行變量的創(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ù)將一個(gè)字符串列表的內(nèi)容作為數(shù)據(jù)模型的初始數(shù)據(jù)內(nèi)容。 QListView的setModel()函數(shù)為界面視圖組件設(shè)置一個(gè)數(shù)據(jù)模型。 程序運(yùn)行后,界面上ListView組件里就會顯示初始化的字符串列表的內(nèi)容。

4.2 編輯、添加、刪除項(xiàng)的操作

(1)編輯項(xiàng)

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

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

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

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

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

(2)添加項(xiàng)

添加項(xiàng)是要在列表的最后添加一行,界面上“添加項(xiàng)”按鈕的槽函數(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是一個(gè)行號,表示在row行之前插入一行。要在列表的最后插入一行,參 數(shù)row設(shè)置為列表當(dāng)前的行數(shù)即可。

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

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

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

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

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

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

(3)插入項(xiàng)

“插入項(xiàng)”按鈕的功能是在列表的當(dāng)前行前面插入一行,其實(shí)現(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)前項(xiàng)的模型索引index,index.row()則返回這個(gè)模型索引的行號。

(4)刪除當(dāng)前項(xià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)刪除列表
刪除列表的所有項(xiàng)可使用QStringListModel的removeRows(introw,intcount)函數(shù),它表示從行號row開始刪除count行。代碼如下:

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

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

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

同樣的,當(dāng)在ListView上雙擊一行進(jìn)入編輯狀態(tài),修改一個(gè)項(xiàng)的文字內(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)容,以檢驗(yàn)對數(shù)據(jù)模型修改數(shù)據(jù),特別是在界面 上修改列表項(xiàng)的文字后,其內(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)容
}

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

4.4 其他功能

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

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

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

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

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

  • 在使用QListWidget的例子中,每個(gè)列表項(xiàng)是一個(gè)QListWidgetItem類型的變量,保存了項(xiàng) 的各種數(shù)據(jù),數(shù)據(jù)和顯示界面是一體的,對數(shù)據(jù)的修改操作就是對項(xiàng)關(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語言結(jié)構(gòu)體struct詳解

    C語言結(jié)構(gòu)體struct詳解

    C語言中,結(jié)構(gòu)體類型屬于一種構(gòu)造類型(其他的構(gòu)造類型還有:數(shù)組類型,聯(lián)合類型),下面這篇文章主要給大家介紹了關(guān)于C語言結(jié)構(gòu)體(struct)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • C++11新特性之自定義字面量

    C++11新特性之自定義字面量

    這篇文章主要介紹了C++11新特性之自定義字面量的相關(guān)資料,幫助大家更好的學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • C++ 之explicit關(guān)鍵字

    C++ 之explicit關(guān)鍵字

    今天我們來談?wù)凜++中的explicit關(guān)鍵字,這篇文章詳細(xì)介紹了C語言的關(guān)鍵字explicit關(guān)鍵字,本文有詳細(xì)的代碼實(shí)例,感興趣的同學(xué)可以借鑒參考
    2023-04-04
  • C++封裝IATHOOK類實(shí)例

    C++封裝IATHOOK類實(shí)例

    這篇文章主要介紹了C++封裝IATHOOK類的實(shí)現(xiàn)方法,對IAT的HOOK實(shí)例進(jìn)行了封裝,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C語言中的strdup()函數(shù)和其與strcpy()函數(shù)的區(qū)別

    C語言中的strdup()函數(shù)和其與strcpy()函數(shù)的區(qū)別

    這篇文章主要介紹了C語言中的strdup()函數(shù)和其與strcpy()函數(shù)的區(qū)別,同樣用于拷貝字符串的兩個(gè)函數(shù)的異同值得注意,需要的朋友可以參考下
    2015-08-08
  • C語言實(shí)現(xiàn)數(shù)獨(dú)輔助器(附源碼)

    C語言實(shí)現(xiàn)數(shù)獨(dú)輔助器(附源碼)

    數(shù)獨(dú)是源自瑞士的一種數(shù)學(xué)游戲。是一種運(yùn)用紙、筆進(jìn)行演算的邏輯游戲。本文將利用C語言制作一個(gè)數(shù)獨(dú)輔助器,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-01-01
  • C語言對結(jié)構(gòu)體數(shù)組按照某項(xiàng)規(guī)則進(jìn)行排序的實(shí)現(xiàn)過程探究

    C語言對結(jié)構(gòu)體數(shù)組按照某項(xiàng)規(guī)則進(jìn)行排序的實(shí)現(xiàn)過程探究

    這篇文章主要介紹了C語言對結(jié)構(gòu)體數(shù)組按照某項(xiàng)規(guī)則進(jìn)行排序的實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • C++:string字符串的切片方式

    C++:string字符串的切片方式

    這篇文章主要介紹了C++:string字符串的切片方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • C語言零基礎(chǔ)精通變量與常量

    C語言零基礎(chǔ)精通變量與常量

    這篇文章主要為大家詳細(xì)介紹了C語言的變量和常量,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-04-04
  • c++通過引用實(shí)現(xiàn)三個(gè)數(shù)字求最大值

    c++通過引用實(shí)現(xiàn)三個(gè)數(shù)字求最大值

    下面我們將通過這個(gè)例子來說明引用的作為函數(shù)參數(shù)的使用方法。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10

最新評論