QT中树控件QTreeView开发实例
生活随笔
收集整理的這篇文章主要介紹了
QT中树控件QTreeView开发实例
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉自:http://mobile.51cto.com/symbian-268700.htm
?
本文講解了QT中樹控件QTreeView開發(fā)實例,對于QTreeView沒有過多的講解,那么不說廢話了,看代碼是如何實現(xiàn)的吧。
方法一:使用QDirModel進行目錄的現(xiàn)實,QDirModel是QT中專為文件目錄樹型顯示所提供的一種model。具體使用如下:
1 int main(int argc, char *argv[]) 2 { 3 QApplication app(argc, argv); 4 QSplitter *splitter = new QSplitter; 5 QDirModel *model = new QDirModel; 6 //從缺省目錄創(chuàng)建數(shù)據(jù) 7 QTreeView *tree = new QTreeView(splitter); 8 tree->setModel(model); 9 tree->setRootIndex(model->index("c:\\")); 10 //配置一個view去顯示model中的數(shù)據(jù),只需要簡單地調用setModel(),并把目錄model作為參數(shù)傳遞 11 //setRootIndex()告訴views顯示哪個目錄的信息,這需要提供一個model index,然后用這個 12 //model index去model中去獲取數(shù)據(jù) 13 //index()這個函數(shù)是QDirModel特有的,通過把一個目錄做為參數(shù),得到了需要的model index 14 //其他的代碼只是窗口show出來,進入程序的事件循環(huán)就好了 15 QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK")); //中文顯示 16 QTextCodec *codec = QTextCodec::codecForLocale(); 17 QString a = codec->toUnicode("目錄"); 18 splitter->setWindowTitle(a); 19 splitter->show(); 20 return app.exec(); 21 }顯示結果如下所示:
方法二:自行設置樹型結構。
"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 3 TreeView::TreeView() : QTreeView() 4 { 5 QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK")); 6 model = new QStandardItemModel(4,2); 7 model->setHeaderData(0, Qt::Horizontal, tr("Service")); 8 model->setHeaderData(1, Qt::Horizontal, tr("Details")); 9 QStandardItem *item1 = new QStandardItem("avahi-daemon"); 10 item1->setIcon(QIcon("gparted.png")); 11 QStandardItem *item2 = new QStandardItem("bluetooth"); 12 item2->setIcon(QIcon("gparted.png")); 13 QStandardItem *item3 = new QStandardItem("crond"); 14 item3->setIcon(QIcon("gparted.png")); 15 QStandardItem *item4 = new QStandardItem("cups"); 16 item4->setIcon(QIcon("gparted.png")); 17 model->setItem(0, 0, item1); 18 model->setItem(1, 0, item2); 19 model->setItem(2, 0, item3); 20 model->setItem(3, 0, item4); 21 QStandardItem *item5 = new QStandardItem("fifth"); 22 item4->appendRow(item5); 23 QModelIndex parent; 24 for (int i = 0; i < 4; ++i) { 25 parent = model->index(0, 0, parent); 26 model->insertRows(0, 1, parent); 27 model->insertColumns(0, 1, parent); 28 QModelIndex index = model->index(0, 0, parent); 29 model->setData(index, i); 30 } 31 this->setModel(model); 32 } 33 34 QList<QStandardItem*> TreeView::returnTheItems() 35 { 36 return model->findItems("*", Qt::MatchWildcard | Qt::MatchRecursive); 37 } 38 39 void TreeView::iterateOverItems() 40 { 41 QList<QStandardItem*> list = returnTheItems(); 42 43 foreach (QStandardItem* item, list) { 44 qDebug() << item->text(); 45 } 46 } 47 48 void TreeView::mouseDoubleClickEvent(QMouseEvent *event) 49 { 50 if (event->button() == Qt::LeftButton) { 51 QModelIndex index0 = currentIndex(); 52 qDebug() << index0.data().toString(); 53 } 54 }"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(); 15 }顯示:
以上就是TreeView的兩種Model了。
小結:本文簡單的介紹了QT樹控件QTreeView ,通過一個簡單的實例來實現(xiàn)QTreeView?的價值。Qt?4推出了一組新的item view類,它們使用model/view結構來管理數(shù)據(jù)與表示層的關系。這種結構帶來的功能上的分離給了開發(fā)人員更大的彈性來定制數(shù)據(jù)項的表示,它也提供一個標準的model接口,使得更多的數(shù)據(jù)源可以被這些item view使用。
?
?
轉載于:https://www.cnblogs.com/liuyunfeifei/archive/2012/11/22/2782085.html
總結
以上是生活随笔為你收集整理的QT中树控件QTreeView开发实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windowservice创建及部署
- 下一篇: 简易视频播放器