文档章节

QListView,QTreeView和 QStandardItemModel的简单使用 (转...

王敬哲
 王敬哲
发布于 2013/08/26 18:00
字数 703
阅读 11947
收藏 1
#include "testqstandarditemmodel.h"
#include <QtGui/QApplication>


//int main(int argc, char *argv[])
//{
// QApplication a(argc, argv);
// testQStandardItemModel w;
// w.show();
// return a.exec();
//}
#include <QApplication>
#include <QWidget>
#include<QTreeView>
#include<QDirModel>
#include<QHBoxLayout>
#include<QSplitter>
#include<QStringListModel>
#include<QListView>
#include<QStandardItemModel>


//model有以下几种:
// QStringListModel                   存储一组字符串
// QStandardItemModel            存储任意层次结构的数据
// QDirModel                             对文件系统进行封装
// QSqlQueryModel                   对SQL的查询结果集进行封装
// QSqlTableModel                    对SQL中的table进行封装
// QSqlRelationalTableModel    对带有foreign key的SQL table进行封装
// QSortFilterProxyModel         对另一个model执行sort and/or filter
//  model中存放的每项数据都有相应的"model index",由QModelIndex类来表示。
//  每个index由三个部分构成:row,column和表明所属model的指针。对于一维的list model,column部分永远为0。
//下面是两个例子(此实例可适当改动),介绍了QStringListModel,QStandardItemModel,QDirModel用QTreeView和QListView来显示的例子
//建一个cpp文件 拷贝以下代码即可


int main(int argc, char *argv[]) {
    
    QApplication app(argc, argv);


//******************示例1******************//    
//以下是QStandardItemModel的简单使用,只需替换view的model为qstmodel就可以看到效果
    QStandardItemModel *qstmodel=new QStandardItemModel();
    QStandardItem* item1    = new QStandardItem("item1");
    QStandardItem* item2    = new QStandardItem("item2");
    QStandardItem* item3    = new QStandardItem("item3");
    item1->appendRow(item2);
    qstmodel->appendRow(item1);
    qstmodel->appendRow(item3);




//******************示例2******************// 
//以下是StringListModel的示例,只需替换view的model为mod就可以看到效果,QListView也适用
    QStringList names;
    names<<"a"<<"b";
     QAbstractItemModel *mod=new QStringListModel(names);








//******************示例3******************// 
 //要注意的是,这里把StringListModel作为一个QAbstractItemModel来使用。这样我们就可以
  //使用model中的抽象接口,而且如果将来我们用别的model代替了当前这个model,这些代码也会照样工作。
  //QListView提供的列表视图足以满足当前这个model的需要了。
     QDirModel *model=new QDirModel();




       








QTreeView *view=new QTreeView;

//这里设置Model即可
view->setModel(model);
          view->setSelectionMode(QAbstractItemView::SingleSelection);
        view->setAutoFillBackground(true);
//设置列是否隐藏
//      view->setColumnHidden(1,true);
//      view->setColumnHidden(2,true);
//      view->setColumnHidden(3,true);
     //   widget->setAutoFillBackground(true);
        QHBoxLayout *blayout=new QHBoxLayout;
        blayout->addWidget(view);
        blayout->addStretch();
        QSplitter *splitter = new QSplitter;
        splitter->setLayout(blayout);
//splitter->addWidget(view);
        splitter->show();
    //     widget->show();
         return app.exec();
         


 //        QApplication app(argc, argv);
 //          QSplitter *splitter = new QSplitter;
 //    //从缺省目录创建数据


 //          QDirModel *model = new QDirModel;
 //    
 //          QTreeView *tree = new QTreeView(splitter);
 // //配置一个view去显示model中的数据,只需要简单地调用 setModel(),并把目录model作为参数传递
 //          tree->setModel(model);
 ////setRootIndex()告诉views显示哪个目录的信息,这需要提供一个model index,然后用这个
 //          //model index去model中去获取数据,这里默认的是当前路径
 //          tree->setRootIndex(model->index(QDir::currentPath()));
 //          QListView *list = new QListView(splitter);
 //          list->setModel(model);
 ////index()这个函数是QDirModel特有的,通过把一个目录做为参数,得到了需要的model index
 //          //其他的代码只是窗口show出来,进入程序的事件循环就好了
 //          list->setRootIndex(model->index(QDir::currentPath()));          
 //         
 //           splitter->setWindowTitle("Two views onto the same directory model");
 //          splitter->show();
 //          return app.exec();

}

示例1:



示例2:


示例3:


© 著作权归作者所有

王敬哲
粉丝 0
博文 21
码字总数 7436
作品 0
广州
程序员
私信 提问
Qt实现QTreeView的index Clicked事件

重新实现了QSplitter, 给这个控件添加了一个QListView和QTreeView,把QSplitter作为 QMainWindow的CentralWidget; 现在实现一个类似于资源管理器的界面,单击左边的QTreeView 的item可以实现...

yuan1024
2013/05/11
4.5K
1
PyQt5系列教程(30): 文本输入栏(QLineEdit)4

这期我们继续介绍一下文本输入栏(QLineEdit),我们已经介绍了其常用属性、信号、函数还有自定义密码输入框,今天是最后一章,文本框自动补全。 若我们想用到QLineEdit自动补全的功能,必须...

学点编程吧
2018/03/02
0
0
model-view模型之QListView和QStringListModel

以QListView为例子,QListView是不显示表头和表框的,如果要显示,可以使用QTreeView来 代替 view的显示属性分为列表list显示和icon图标显示,使用 QListView::setViewMode()来设置,默认为l...

晨曦之光
2012/04/13
1K
0
Qt Model/View/Delegate浅谈 - roleNames()

,也就是俗称的角色. roleNames()函数介绍及默认值 函数返回一个的所有角色名称.在Qt中默认的角色名称如下: Qt Role | QML Role Name:-----------------:|:------------:Qt::DisplayRole | di...

jannn
2016/04/18
496
0
QT model-view架构

我们的系统有很多数据显示的需求,比如从数据库中把数据取出,然后以自己的方式显示在我们自己的应用程序的界面中。进行这一操作的典型方式是使用Qt的Item View类。 在早期的Qt版本中,要实现...

晨曦之光
2012/04/13
972
0

没有更多内容

加载失败,请刷新页面

加载更多

YUM仓库配置及命令详解

导读 通过源代码编译的方式安装程序在灵活性、可定制性方面具有无可比拟的优势,但也正因为这种特性给管理员带来了额外的维护开销,当应用在大规模的服务器群集时存在一定的局限性。那么就需...

问题终结者
45分钟前
11
0
docker初学者

docker简介 在真正使用这项技术之前很难深刻的理解它的概念。 从简单的方面来说,docker就是一个轻量级的虚拟机。接下去的学习首先不妨抱着这个想法来看,让后慢慢寻找差别,最终我们会回来试...

街角的小丑
今天
15
0
了解下Hz单位的意思

今天看到计组的突然看到Hz这个单位,突然不知道它是啥意思,就百度了解啦下。 赫,是频率的基本单位,为纪念验证电磁波存在的德国物理学家海因里希·鲁道夫·赫兹(Heinrich Rudolf Hertz)而...

南桥北木
今天
11
0
Mysql的sql_mode模式

sql_mode 是一个很容易被忽视的配置,宽松模式下可能会被输入一些非准确数据,所以生产环境下会要求为严格模式,为了保持生产环境和开发环境,测试环境一致性,我们开发环境和测试环境也要配...

贾峰uk
今天
15
0
Qt程序打包发布方法(使用官方提供的windeployqt工具)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/toTheUnknown/article/details/81748179 如果使用到了Qt ...

shzwork
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部