QT中QTreeView学习的两个例子

本文讲解了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();
23. }
显示结果如下所示:
 
方法二:自行设置树型结构。
"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. }
50. }
"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 ,通过一个简单的实例来实现QTreeView 的价值。Qt 4推出了一组新的item view类,它们使用model/view结构来管理数据与表示层的关系。这种结构带来的功能上的分离给了开发人员更大的弹性来定制数据项的表示,它也提供一个标准的model接口,使得更多的数据源可以被这些item view使用。
(三)简化的例子
a.h文件
#ifndef DPUREF_H
#define DPUREF_H
 

#include <QMainWindow>
#include "ui_dpuref.h"

#include <QTreeView.h>
#include <QStandardItemModel.h>

class QPushButton;
class QTableView;
class QHBoxLayout;
class QVBoxLyout;

 

class DpuRef : public QWidget
{
 Q_OBJECT

public:
 A();
 ~A();
 
 QComboBox *createComboBox(const QString &text);

private:
 QLineEdit *pathLineEdit;
 QComboBox *directoryComboBox;
 QPushButton *browseButton;
 QPushButton *analyseButton;
 QTreeView *dpuTreeView;
  QStandardItemModel *standardModel;
 QStandardItemModel *tableModel;
 QStandardItem *item;

private slots:
 void selectionChangedSlot(const QItemSelection & /*newSelection*/, const QItemSelection & /*oldSelection*/);
 void creatTableView();
};

#endif // DPUREF_H

-----------------------------------------------------------------------

A.cpp文件
#include "a.h"
#include <QtGui>
A::A()
{
dpuTreeView = new QTreeView();
standardModel = new QStandardItemModel;
 standardModel->setHeaderData(0,Qt::Horizontal,"DPU TreeView");//设置标题
 QStandardItem *rootNode = standardModel->invisibleRootItem();

//register the model
    dpuTreeView->setModel(standardModel);
    dpuTreeView->expandAll();//全部展开

    //selection changes shall trigger a slot
    selectionModel= dpuTreeView->selectionModel();
    connect(selectionModel, SIGNAL(selectionChanged (const QItemSelection &, const QItemSelection &)),
            this, SLOT(selectionChangedSlot(const QItemSelection &, const QItemSelection &)));

}

void DpuRef::selectionChangedSlot(const QItemSelection & /*newSelection*/, const QItemSelection & /*oldSelection*/)
{
    //get the text of the selected item
    const QModelIndex index = dpuTreeView->selectionModel()->currentIndex();
    QString selectedText = index.data(Qt::DisplayRole).toString();
    //find out the hierarchy level of the selected item
    int hierarchyLevel=1;
    QModelIndex seekRoot = index;
    while(seekRoot.parent() != QModelIndex())
    {
        seekRoot = seekRoot.parent();
        hierarchyLevel++;
    }

    QString showString = QString("%1, Level %2").arg(selectedText)
                         .arg(hierarchyLevel);
    setWindowTitle(showString);
}
//creatTableView()
void DpuRef::creatTableView()
{
 QStandardItemModel *tableModel = new QStandardItemModel();
 //setValueModel->setHorizontalHeaderLabels(QStringList()<<"本DPU属性"<<"被引用DPU属性");//添加表头
 tableModel->setRowCount(10);
 tableModel->setColumnCount(2);
 //setValueModel->setItem(0,1,new QStandardItem("Ua"));//第一行第一列的内容设置为Ua
 dpuRefTableView->setModel(tableModel);


}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值