QT中樹控件QTreeView開發(fā)實(shí)例
本文講解了QT中樹控件QTreeView開發(fā)實(shí)例,對(duì)于QTreeView沒有過多的講解,那么不說廢話了,看代碼是如何實(shí)現(xiàn)的吧。
方法一:使用QDirModel進(jìn)行目錄的現(xiàn)實(shí),QDirModel是QT中專為文件目錄樹型顯示所提供的一種model。 具體使用如下:
- #include <QtGui>
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- QSplitter *splitter = new QSplitter;
- QDirModel *model = new QDirModel;
- //從缺省目錄創(chuàng)建數(shù)據(jù)
- QTreeView *tree = new QTreeView(splitter);
- tree->setModel(model);
- tree->setRootIndex(model->index("c:\\"));
- //配置一個(gè)view去顯示model中的數(shù)據(jù),只需要簡(jiǎn)單地調(diào)用setModel(),并把目錄model作為參數(shù)傳遞
- //setRootIndex()告訴views顯示哪個(gè)目錄的信息,這需要提供一個(gè)model index,然后用這個(gè)
- //model index去model中去獲取數(shù)據(jù)
- //index()這個(gè)函數(shù)是QDirModel特有的,通過把一個(gè)目錄做為參數(shù),得到了需要的model index
- //其他的代碼只是窗口show出來,進(jìn)入程序的事件循環(huán)就好了
- QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK")); //中文顯示
- QTextCodec *codec = QTextCodec::codecForLocale();
- QString a = codec->toUnicode("目錄");
- splitter->setWindowTitle(a);
- splitter->show();
- return app.exec();
- }
顯示結(jié)果如下所示:
方法二:自行設(shè)置樹型結(jié)構(gòu)。
"Treeview.h"文件
- #include <QtGui>
- class TreeView :public QTreeView
- {
- public:
- TreeView();
- void iterateOverItems();
- QList<QStandardItem*> returnTheItems();
- void mouseDoubleClickEvent(QMouseEvent *event);
- private:
- QStandardItemModel *model;
- };
"Treeview.cpp"文件
- #include "treeview.h"
- TreeView::TreeView() : QTreeView()
- {
- QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
- model = new QStandardItemModel(4,2);
- model->setHeaderData(0, Qt::Horizontal, tr("Service"));
- model->setHeaderData(1, Qt::Horizontal, tr("Details"));
- QStandardItem *item1 = new QStandardItem("avahi-daemon");
- item1->setIcon(QIcon("gparted.png"));
- QStandardItem *item2 = new QStandardItem("bluetooth");
- item2->setIcon(QIcon("gparted.png"));
- QStandardItem *item3 = new QStandardItem("crond");
- item3->setIcon(QIcon("gparted.png"));
- QStandardItem *item4 = new QStandardItem("cups");
- item4->setIcon(QIcon("gparted.png"));
- model->setItem(0, 0, item1);
- model->setItem(1, 0, item2);
- model->setItem(2, 0, item3);
- model->setItem(3, 0, item4);
- QStandardItem *item5 = new QStandardItem("fifth");
- item4->appendRow(item5);
- QModelIndex parent;
- for (int i = 0; i < 4; ++i) {
- parent = model->index(0, 0, parent);
- model->insertRows(0, 1, parent);
- model->insertColumns(0, 1, parent);
- QModelIndex index = model->index(0, 0, parent);
- model->setData(index, i);
- }
- this->setModel(model);
- }
- QList<QStandardItem*> TreeView::returnTheItems()
- {
- return model->findItems("*", Qt::MatchWildcard | Qt::MatchRecursive);
- }
- void TreeView::iterateOverItems()
- {
- QList<QStandardItem*> list = returnTheItems();
- foreach (QStandardItem* item, list) {
- qDebug() << item->text();
- }
- }
- void TreeView::mouseDoubleClickEvent(QMouseEvent *event)
- {
- if (event->button() == Qt::LeftButton) {
- QModelIndex index0 = currentIndex();
- qDebug() << index0.data().toString();
- }
- }
"Main.cpp"文件
- #include <QtGui/QApplication>
- #include "treeview.h"
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- TreeView view;
- view.setEditTriggers(QAbstractItemView::NoEditTriggers);
- view.header()->setResizeMode(QHeaderView::ResizeToContents);
- view.resize(300,280);
- view.iterateOverItems();
- view.setWindowTitle(QObject::tr("Linux 服務(wù)管理"));
- view.show();
- return app.exec();
- }
顯示:
以上就是TreeView的兩種Model了。
小結(jié):本文簡(jiǎn)單的介紹了QT樹控件QTreeView ,通過一個(gè)簡(jiǎn)單的實(shí)例來實(shí)現(xiàn)QTreeView 的價(jià)值。Qt 4推出了一組新的item view類,它們使用model/view結(jié)構(gòu)來管理數(shù)據(jù)與表示層的關(guān)系。這種結(jié)構(gòu)帶來的功能上的分離給了開發(fā)人員更大的彈性來定制數(shù)據(jù)項(xiàng)的表示,它也提供一個(gè)標(biāo)準(zhǔn)的model接口,使得更多的數(shù)據(jù)源可以被這些item view使用。
【編輯推薦】