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使用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值