QStringListModel

来源:互联网 发布:搞怪专家软件下载 编辑:程序博客网 时间:2024/05/16 12:47

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

0 0
原创粉丝点击