【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
? ? ? ? 树形控件还是非常有用的,比如在选择文件的时候、选择目录的时候、以及选择同类型数据中某一个特定选项的时候。当然,对于cad而言,一个图形上面可能有很多的数据,这些数据又被分成了很多类。这个时候,如果我们需要higlight一些数据的时候,一般就会去树形控件来查找和显示。今天正好借着这个机会,学习下树形控件。
? ? ? ? 首先,我们需要创建一个widget工程,为后期的修改所用。
? ? ? ? 有了widget之后,我们剩下来只需要添加一个控件就好,即一个treeView的控件,
? ? ? ? 因为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_OBJECT
public:
QtWidgetsApplication(QWidget *parent = nullptr);
~QtWidgetsApplication();
private:
Ui::QtWidgetsApplicationClass ui;
QStandardItemModel model;
};
? ? ? ? 有了h文件之后,接下来就是cpp文件了。相关的修改也主要是在构造函数完成的。首先是隐藏行信息。接着添加Map节点和New node节点。后续的话,就是把各个子节点添加上即可。
#include "QtWidgetsApplication.h"
QtWidgetsApplication::QtWidgetsApplication(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
// hide line
ui.treeView->header()->setHidden(true);
ui.treeView->setModel(&model);
// add node
QStandardItem *mapItem = new QStandardItem("Map");
model.appendRow(mapItem);
QStandardItem *newItem = new QStandardItem("New node");
model.appendRow(newItem);
// add leaf
QStandardItem *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()
{}
? ? ? ? 测试和验证就比较简单了,首先看看能不能编译通过。如果可以,接着看看有没有显示出各个节点,各个节点的子节点是不是也显示正常,没有问题的话,我们就可以在后面的项目中试着使用树形控件了。