免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2328 | 回复: 0
打印 上一主题 下一主题

Qt学习之路(42): QStringListModel [复制链接]

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-22 10:15 |只看该作者 |倒序浏览
  今天开始我们要看看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 
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 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);
}
          
                       
                               
编缉推荐阅读以下文章
                               

              
                         
  • Qt学习之路(47): 自定义Model之三
                        
                         
  • Qt学习之路(46): 自定义model之二
                        
                         
  • Qt学习之路(45): 自定义model之一
                        
                         
  • Qt学习之路(44): QSortFilterProxyModel
                        
                         
  • Qt学习之路(43): QDirModel
                        
                         
  • Qt学习之路(41): QTableWidget
                        
                         
  • Qt学习之路(40): QTreeWidget
                        
                         
  • Qt学习之路(39): QListWidget
                        
                         
  • Qt学习之路(38): model-view架构
                        
                         
  • Qt学习之路(37): Qt容器类之关联存储容器
                        
                                   

                       
                       
         
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP