qt中实现树型结构,每个节点下有不同的表格显示

阅读数:102 评论数:0

跳转到新版页面

分类

C/C++

正文

一、概述

可以通过 QTreeWidgetQTreeView 结合 QTableWidgetQTableView 来实现。

二、使用QTreeWidget实现

1、基本思路

(1)创建树型控件QTreeWidget,用来管理树形结构

(2)树中的每个节点都是QTreeWidgetItem

(3)每个节点下的表格由QTabelWidget控件来实现

(4)使用setItemWidget将表格与树形节点关联,使得每个节点下都可以显示表格

#include <QApplication>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QTableWidget>
#include <QVBoxLayout>
#include <QWidget>

class TreeWidgetWithTables : public QWidget
{
public:
    TreeWidgetWithTables(QWidget *parent = nullptr) : QWidget(parent)
    {
        QVBoxLayout *layout = new QVBoxLayout(this);

        // 创建树形控件
        QTreeWidget *treeWidget = new QTreeWidget(this);
        treeWidget->setColumnCount(1);  // 只需要一列来显示节点名称
        treeWidget->setHeaderLabel("Nodes");

        // 添加第一个节点和表格
        QTreeWidgetItem *node1 = new QTreeWidgetItem(treeWidget);
        node1->setText(0, "Node 1");

        QTableWidget *table1 = new QTableWidget(3, 2, this);
        table1->setHorizontalHeaderLabels(QStringList() << "Column 1" << "Column 2");
        table1->setItem(0, 0, new QTableWidgetItem("Item 1-1"));
        table1->setItem(0, 1, new QTableWidgetItem("Item 1-2"));
        table1->setItem(1, 0, new QTableWidgetItem("Item 1-3"));
        table1->setItem(1, 1, new QTableWidgetItem("Item 1-4"));

        QTreeWidgetItem *tableItem1 = new QTreeWidgetItem(node1);
        treeWidget->setItemWidget(tableItem1, 0, table1);

        // 添加第二个节点和表格
        QTreeWidgetItem *node2 = new QTreeWidgetItem(treeWidget);
        node2->setText(0, "Node 2");

        QTableWidget *table2 = new QTableWidget(2, 2, this);
        table2->setHorizontalHeaderLabels(QStringList() << "Column A" << "Column B");
        table2->setItem(0, 0, new QTableWidgetItem("Item 2-1"));
        table2->setItem(0, 1, new QTableWidgetItem("Item 2-2"));
        table2->setItem(1, 0, new QTableWidgetItem("Item 2-3"));
        table2->setItem(1, 1, new QTableWidgetItem("Item 2-4"));

        QTreeWidgetItem *tableItem2 = new QTreeWidgetItem(node2);
        treeWidget->setItemWidget(tableItem2, 0, table2);

        // 添加树形控件到布局中
        layout->addWidget(treeWidget);
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    TreeWidgetWithTables window;
    window.setWindowTitle("Tree with Tables");
    window.resize(400, 300);
    window.show();

    return a.exec();
}



相关推荐

一、概述 QTreeWidget 是 Qt 框架中的一个控件,用于以树形结构展示数据。它是 QTreeView 的一个高级版本,提供了一个基于项目(item-based)的接口来管理和显示层次数据。使