QT上位机开发(树形控件在地图软件中的应用)

2024-01-10 06:05:03

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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_OBJECT

public:
    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 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()
{}

5、测试和验证

? ? ? ? 测试和验证就比较简单了,首先看看能不能编译通过。如果可以,接着看看有没有显示出各个节点,各个节点的子节点是不是也显示正常,没有问题的话,我们就可以在后面的项目中试着使用树形控件了。

文章来源:https://blog.csdn.net/feixiaoxing/article/details/135493010
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。