QT中树控件QTreeView开发实例

移动开发
Qt 4推出了一组新的item view类,它们使用model/view结构来管理数据与表示层的关系。这种结构带来的功能上的分离给了开发人员更大的弹性来定制数据项的表示,它也提供一个标准的model接口,使得更多的数据源可以被这些item view使用。

本文讲解了QT中树控件QTreeView开发实例,对于QTreeView没有过多的讲解,那么不说废话了,看代码是如何实现的吧。

方法一:使用QDirModel进行目录的现实,QDirModel是QT中专为文件目录树型显示所提供的一种model。 具体使用如下:

  1. #include <QtGui> 
  2.  
  3. int main(int argc, char *argv[])  
  4. {   
  5. QApplication app(argc, argv);  
  6. QSplitter *splitter = new QSplitter;  
  7.         QDirModel *model = new QDirModel;  
  8. //从缺省目录创建数据  
  9. QTreeView *tree = new QTreeView(splitter);  
  10. tree->setModel(model);  
  11. tree->setRootIndex(model->index("c:\\"));  
  12. //配置一个view去显示model中的数据,只需要简单地调用setModel(),并把目录model作为参数传递  
  13. //setRootIndex()告诉views显示哪个目录的信息,这需要提供一个model index,然后用这个  
  14. //model index去model中去获取数据  
  15. //index()这个函数是QDirModel特有的,通过把一个目录做为参数,得到了需要的model index  
  16. //其他的代码只是窗口show出来,进入程序的事件循环就好了  
  17. QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));   //中文显示  
  18.         QTextCodec *codec = QTextCodec::codecForLocale();  
  19. QString a = codec->toUnicode("目录");  
  20. splitter->setWindowTitle(a);  
  21. splitter->show();  
  22. return app.exec();  

显示结果如下所示:

QT树控件 QTreeView

方法二:自行设置树型结构。

"Treeview.h"文件

 

  1. #include <QtGui> 
  2. class TreeView :public QTreeView  
  3. {  
  4. public:  
  5. TreeView();  
  6. void iterateOverItems();  
  7. QList<QStandardItem*> returnTheItems();  
  8. void mouseDoubleClickEvent(QMouseEvent *event);  
  9. private:  
  10. QStandardItemModel *model;  
  11. }; 

"Treeview.cpp"文件

  1. #include "treeview.h"  
  2. TreeView::TreeView() : QTreeView()  
  3. {        
  4. QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));  
  5. model = new QStandardItemModel(4,2);  
  6. model->setHeaderData(0, Qt::Horizontal, tr("Service"));  
  7. model->setHeaderData(1, Qt::Horizontal, tr("Details"));  
  8. QStandardItem *item1 = new QStandardItem("avahi-daemon");  
  9. item1->setIcon(QIcon("gparted.png"));  
  10. QStandardItem *item2 = new QStandardItem("bluetooth");  
  11. item2->setIcon(QIcon("gparted.png"));  
  12. QStandardItem *item3 = new QStandardItem("crond");  
  13.     item3->setIcon(QIcon("gparted.png"));   
  14. QStandardItem *item4 = new QStandardItem("cups");  
  15. item4->setIcon(QIcon("gparted.png"));   
  16. model->setItem(0, 0, item1);  
  17. model->setItem(1, 0, item2);  
  18. model->setItem(2, 0, item3);  
  19. model->setItem(3, 0, item4);  
  20. QStandardItem *item5 = new QStandardItem("fifth");  
  21. item4->appendRow(item5);  
  22. QModelIndex parent;  
  23. for (int i = 0; i < 4; ++i) {  
  24.    parent = model->index(0, 0, parent);  
  25.    model->insertRows(0, 1, parent);  
  26.    model->insertColumns(0, 1, parent);  
  27.    QModelIndex index = model->index(0, 0, parent);  
  28.    model->setData(index, i);  
  29. }  
  30. this->setModel(model);  
  31. }  
  32. QList<QStandardItem*> TreeView::returnTheItems()  
  33. {  
  34. return model->findItems("*", Qt::MatchWildcard | Qt::MatchRecursive);  
  35. }  
  36. void TreeView::iterateOverItems()  
  37. {  
  38. QList<QStandardItem*> list = returnTheItems();  
  39.  
  40. foreach (QStandardItem* item, list) {  
  41.    qDebug() << item->text();  
  42. }  
  43. }  
  44. void TreeView::mouseDoubleClickEvent(QMouseEvent *event)  
  45. {  
  46. if (event->button() == Qt::LeftButton) {  
  47.    QModelIndex index0 = currentIndex();  
  48.    qDebug() << index0.data().toString();  
  49. }  

"Main.cpp"文件

  1. #include <QtGui/QApplication> 
  2. #include "treeview.h"  
  3.  
  4. int main(int argc, char *argv[])  
  5. {  
  6. QApplication app(argc, argv);  
  7. TreeView view;  
  8. view.setEditTriggers(QAbstractItemView::NoEditTriggers);   
  9. view.header()->setResizeMode(QHeaderView::ResizeToContents);  
  10. view.resize(300,280);  
  11.     view.iterateOverItems();  
  12. view.setWindowTitle(QObject::tr("Linux 服务管理"));  
  13. view.show();  
  14. return app.exec();  

显示:

QT树控件 QTreeView

以上就是TreeView的两种Model了。

小结:本文简单的介绍了QT树控件QTreeView ,通过一个简单的实例来实现QTreeView 的价值。Qt 4推出了一组新的item view类,它们使用model/view结构来管理数据与表示层的关系。这种结构带来的功能上的分离给了开发人员更大的弹性来定制数据项的表示,它也提供一个标准的model接口,使得更多的数据源可以被这些item view使用。

【编辑推荐】

QT的信号与槽机制

解析 QT 静态库和动态库

利用Qt Designer开发Qt界面

深度解析 QT 编译安装方法

深度解析嵌入式QT开发环境搭建

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-06-13 16:51:19

Qt Socket

2011-06-20 16:03:03

Qt 控件 鼠标

2014-08-26 11:46:46

QtAndroid实例教程

2011-06-30 16:38:07

Qt QTableWidg

2011-06-30 17:31:32

Qt 多线程 信号

2011-06-14 11:48:38

Webkit QT

2009-09-01 17:08:14

C#画线控件

2011-04-19 10:33:16

ASP.NET自定义控

2011-06-30 17:01:43

Qt Creator 菜单栏

2011-07-05 14:46:34

2011-06-13 13:06:48

Gtk Qt

2009-07-20 18:02:48

GridView控件ASP.NET 2.0

2011-07-01 18:35:17

QT 控制台

2011-07-05 14:23:07

QT MySQL 驱动

2011-06-21 09:33:49

Qt 启动 界面

2011-06-27 16:07:49

Qt Designer

2011-06-14 16:45:57

Qt 图标

2011-06-24 14:34:17

Qt 小票 打印

2011-06-30 16:24:38

Qt TableWidge

2010-06-11 16:01:26

Windows Pho
点赞
收藏

51CTO技术栈公众号