【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
树形控件还是非常有用的,比如在选择文件的时候、选择目录的时候、以及选择同类型数据中某一个特定选项的时候。当然,对于cad而言,一个图形上面可能有很多的数据,这些数据又被分成了很多类。这个时候,如果我们需要higlight一些数据的时候,一般就会去树形控件来查找和显示。今天正好借着这个机会,学习下树形控件。
1、创建一个基础的widget工程
首先,我们需要创建一个widget工程,为后期的修改所用。
2、利用designer工具添加一个QTreeView的控件
有了widget之后,我们剩下来只需要添加一个控件就好,即一个treeView的控件,
3、修改头文件
因为treeView使用的时候,还会涉及到变量QStandardItemModel,所以需要在头文件里面添加这样一个model。
#pragma once
#include <QApplication>
#include <QTreeView>
#include <QStandardItemModel>
#include <QStandardItem>
#include <QHeaderView> #include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication.h"class QtWidgetsApplication : public QMainWindow
{Q_OBJECTpublic:QtWidgetsApplication(QWidget *parent = nullptr);~QtWidgetsApplication();private:Ui::QtWidgetsApplicationClass ui;QStandardItemModel model;
};
4、修改cpp文件
有了h文件之后,接下来就是cpp文件了。相关的修改也主要是在构造函数完成的。首先是隐藏行信息。接着添加Map节点和New node节点。后续的话,就是把各个子节点添加上即可。
#include "QtWidgetsApplication.h"QtWidgetsApplication::QtWidgetsApplication(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);// hide lineui.treeView->header()->setHidden(true);ui.treeView->setModel(&model);// add nodeQStandardItem *mapItem = new QStandardItem("Map");model.appendRow(mapItem);QStandardItem *newItem = new QStandardItem("New node");model.appendRow(newItem);// add leafQStandardItem *pointItem = new QStandardItem("point");mapItem->appendRow(pointItem);QStandardItem *pointItem1 = new QStandardItem("point1");pointItem->appendRow(pointItem1);QStandardItem *pointItem2 = new QStandardItem("point2");pointItem->appendRow(pointItem2);QStandardItem *pointItem3 = new QStandardItem("point3");pointItem->appendRow(pointItem3);QStandardItem *lineItem = new QStandardItem("line");mapItem->appendRow(lineItem);QStandardItem *lineItem1 = new QStandardItem("line1");lineItem->appendRow(lineItem1);QStandardItem *lineItem2 = new QStandardItem("line2");lineItem->appendRow(lineItem2);QStandardItem *circle = new QStandardItem("circle");mapItem->appendRow(circle);QStandardItem *circleItem1 = new QStandardItem("circle1");circle->appendRow(circleItem1);QStandardItem *circleItem2 = new QStandardItem("circle2");circle->appendRow(circleItem2);QStandardItem *rectangle = new QStandardItem("rectangle");mapItem->appendRow(rectangle);QStandardItem *rectangleItem1 = new QStandardItem("rectangle1");rectangle->appendRow(rectangleItem1);QStandardItem *rectangleItem2 = new QStandardItem("rectangle2");rectangle->appendRow(rectangleItem2);QStandardItem *picture = new QStandardItem("picture");mapItem->appendRow(picture);QStandardItem *pictureItem1 = new QStandardItem("picture1");picture->appendRow(pictureItem1);QStandardItem *pictureItem2 = new QStandardItem("picture2");picture->appendRow(pictureItem2);
}QtWidgetsApplication::~QtWidgetsApplication()
{}
5、测试和验证
测试和验证就比较简单了,首先看看能不能编译通过。如果可以,接着看看有没有显示出各个节点,各个节点的子节点是不是也显示正常,没有问题的话,我们就可以在后面的项目中试着使用树形控件了。