国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

QStringListModel

2019-11-09 17:41:42
字體:
來源:轉載
供稿:網友

轉載自: QStringListModel是最簡單的模型類,具備向視圖提供字符串數據的能力。QStringListModel 是一個可編輯的模型,可以為組件提供一系列字符串作為數據。我們可以將其看作是封裝了 QStringList 的模型。 QStringList 是一種很常用的數據類型,實際上是一個字符串列表(也就是 QList< QString>)。既然是列表,它也就是線性的數據結構,因此,QStringListModel 很多時候都會作為 QListView 或者 QComboBox 這種只有一列的視圖組件的數據模型。

示例:

#include "widget.h"#include "ui_widget.h"#include <qDebug>#include <QMessageBox>Widget::Widget(QWidget *parent) : QWidget(parent){ QStringList data; data << "Letter A" << "Letter B" << "Letter C"; model = new QStringListModel(this); model->setStringList(data); listView = new QListView(this); listView->setModel(model); QHBoxLayout *btnLayout = new QHBoxLayout; QPushButton *insertBtn = new QPushButton(tr("insert"), this); connect(insertBtn, SIGNAL(clicked()), this, SLOT(on_insertData())); QPushButton *delBtn = new QPushButton(tr("Delete"), this); connect(delBtn, SIGNAL(clicked()), this, SLOT(on_deleteData())); QPushButton *showBtn = new QPushButton(tr("Show"), this); connect(showBtn, SIGNAL(clicked()), this, SLOT(on_showData())); btnLayout->addWidget(insertBtn); btnLayout->addWidget(delBtn); btnLayout->addWidget(showBtn); QVBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->addWidget(listView); mainLayout->addLayout(btnLayout); setLayout(mainLayout);}void Widget::on_insertData(){ bool isOK; QString text = QInputDialog::getText(this,"Input", "Plase input", QLineEdit::Normal, "You are inserting", &isOK); //選定行之后插入 if(isOK){ int row = listView->currentIndex().row(); qDebug()<<row; model->insertRows(row+1,1); QModelIndex index = model->index(row+1); model->setData(index,text); listView->setCurrentIndex(index); listView->edit(index); } //選定行之前插入// if(isOK){// QModelIndex currIndex = listView->currentIndex();// model->insertRows(currIndex.row(),1);// model->setData(currIndex,text);// listView->edit(currIndex);// }}void Widget::on_deleteData(){ if(model->rowCount() > 0){ model->removeRow(listView->currentIndex().row()); }}void Widget::on_showData(){ QStringList data = model->stringList(); QString str; foreach(QString s,data) str += s; QMessageBox::information(this,"Outpot",str);}Widget::~Widget(){}

從示例中可以看到,幾乎所有操作都是針對模型的,也就是說,我們直接對數據進行操作,當模型檢測到數據發生了變化,會立刻通知視圖進行刷新。這樣一來,就可以把精力集中到對數據的操作上,而不用擔心視圖的同步顯示問題。這正是 model/view 模型所帶來的一個便捷之處。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 敦化市| 宿迁市| 东乌珠穆沁旗| 绥化市| 屏东市| 乳源| 德格县| 内乡县| 洛隆县| 两当县| 略阳县| 马尔康县| 巢湖市| 竹山县| 霍山县| 双流县| 丰镇市| 公安县| 泾川县| 龙门县| 奎屯市| 九台市| 青神县| 太白县| 喀什市| 运城市| 邢台县| 鄂温| 庆云县| 宜宾市| 宁德市| 彰化市| 县级市| 宜黄县| 中阳县| 高要市| 卫辉市| 驻马店市| 江安县| 内乡县| 深州市|