首页 > 学院 > 开发设计 > 正文

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 模型所带来的一个便捷之处。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表