QT中树控件QTreeView开发实例

来源:互联网 发布:大数据技术体系架构 编辑:程序博客网 时间:2024/06/02 17:25
 
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使用。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电脑开机卡在欢迎界面 开机卡在主板logo 电脑卡在开机第一屏 电脑开机卡在logo界面 手机卡在开机画面怎么办 联想笔记本开机卡在lenovo界面 开机卡在正在启动windows iphone卡在开机界面 笔记本开机卡在欢迎界面 电脑开机一直卡在开机画面 电脑开机一直卡在欢迎界面 开机卡在主板界面 dell开机卡在logo 戴尔笔记本开机卡在logo界面 三星手机开机卡在开机画面 手机卡在开机界面 今晚3d开什么号 电脑开机打不开任何软件 电脑开机显示屏没反应 电脑开机一直显示正在启动 电脑开机屏幕没反应 电脑开机显示屏显示无信号 电脑开机后黑屏 电脑开机后不显示桌面 电脑开机后黑屏不显示桌面 电脑开机后打不开任何软件 电脑开机后一直显示正在启动 电视开机后屏幕不亮 电脑开机后蓝屏 电脑开机后显示屏没反应 电脑开机后显示屏显示无信号 海信电视开机后黑屏 开机后黑屏 开机后显示器没反应 笔记本电脑开机后黑屏 电脑待机后怎么开机 笔记本开机后黑屏只有鼠标 笔记本电脑开机后不显示桌面 电脑蓝屏后开机屏幕不亮 电脑开机后桌面没有任何图标 电脑开机后屏幕没反应