网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C/C++ > 正文
Qt学习之路(42): QStringListModel_C/C++_开发语言_软件开
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/11/27
下载{$ArticleTitle}原创论文样式

1 2 3 下一页

  今天开始我们要看看Qt的model-view类了。正如前面说的那样,之前三节的item class类只是Qt为了方便我们使用而封装了的一些操作。比起真正的model-view类来,那些类更易于使用,但是功能也会更简单,并且缺少实时性的支持,比如我们并不方便实现插入、删除等一些常见操作。而现在我们要说的model-view类使用起来可能会复杂一些,但是功能强大,并且在 model更新时会自动更新view,而model多是一些数据集合,因此比较便于操作。

  model-view类中,view大致有三种:list、tree和table,但是model千奇百怪,不同的业务,甚至同样的业务不同的建模都会有不同的model。为了方便使用,Qt提供了一些预定义好的model供我们使用。QStringListModel是其中最简单的一种。

  顾名思义,QStringListModel就是封装了QStringList的model。QStringList是一种很常用的数据类型,它实际上是一个字符串列表。我们可以想象,对于一个list来说,如果提供一个字符串列表形式的数据,就应该能够把这个数据展示出来。因为二者是一致的:QStringList是线性的,而list也是线性的。所以,QStringListModel很多时候都会作为QListView的model。

  下面我们来看怎么使用它们。比起前面的QListWidget,这里要使用两个类:QStringListModel和QListView,并且还有一些辅助类。不过你可以看到,即便这样复杂的工作,我们的代码也不会很多的:

  mylistview.h

#ifndef MYLISTVIEW_H
#define MYLISTVIEW_H
#include <QtGui>
class MyListView : public QWidget
{
        Q_OBJECT
public:
        MyListView();
private:
        QStringListModel *model;
        QListView *listView;
private slots:
        void insertData();
        void deleteData();
        void showData();
};
#endif // MYLISTVIEW_H
 
mylistview.cpp
#include "mylistview.h"
MyListView::MyListView()
{
        model = new QStringListModel(this);
        QStringList data;
        data << "Letter A" << "Letter B" << "Letter C";
        model->setStringList(data);
        listView = new QListView(this);
        listView->setModel(model);
        QHBoxLayout *btnLayout = new QHBoxLayout;
        QPushButton *insertBtn = new QPushButton(tr("insert"), this);
        QPushButton *delBtn = new QPushButton(tr("Delete"), this);
        QPushButton *showBtn = new QPushButton(tr("Show"), this);
        btnLayout->addWidget(insertBtn);
        btnLayout->addWidget(delBtn);
        btnLayout->addWidget(showBtn);
        QVBoxLayout *mainLayout = new QVBoxLayout(this);
        mainLayout->addWidget(listView);
        mainLayout->addLayout(btnLayout);
        this->setLayout(mainLayout);
        connect(insertBtn, SIGNAL(clicked()), this, SLOT(insertData()));
        connect(delBtn, SIGNAL(clicked()), this, SLOT(deleteData()));
        connect(showBtn, SIGNAL(clicked()), this, SLOT(showData()));
}
void MyListView::insertData()
{
        bool isOK;
        QString text = QInputDialog::getText(NULL, "Insert", "Please input new data:",
                                                                                 QLineEdit::Normal, "You are inserting new data.", &isOK);
        if(isOK) {
                int row = listView->currentIndex().row();
                model->insertRows(row, 1);
                QModelIndex index = model->index(row);
                model->setData(index, text);
                listView->setCurrentIndex(index);
                listView->edit(index);
        }
}
void MyListView::deleteData()
{
        if(model->rowCount() > 1) {
                model->removeRows(listView->currentIndex().row(), 1);
        }
}
void MyListView::showData()
{
        QStringList data = model->stringList();
        QString str;
        foreach(QString s, data) {
                str += s + "\n";
        }
        QMessageBox::information(this, "Data", str);
}

(责任编辑:admin)

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号