天天看点

五十七、Qt之QTreeWidget嵌套QTableWidget

一、效果

五十七、Qt之QTreeWidget嵌套QTableWidget
五十七、Qt之QTreeWidget嵌套QTableWidget

二、设计思路

三、概略代码

//============= 第一层QTreeWidget ==================//
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    //获取顶级节点
    QTreeWidgetItem *parentItem = ui->treeWidget->topLevelItem(0);
    //创建子节点
    QTreeWidgetItem *newItem = new QTreeWidgetItem(parentItem);
    //设置子节点跨越所有列(PS:否则它的宽度只有第一列的宽度)
    newItem->setFirstColumnSpanned(true);
    //初始化 待嵌套的 widget
    CustomWidget *widget = new CustomWidget(this);
    //设置 QTreeWidget 嵌套 widget
    ui->treeWidget->setItemWidget(newItem, 0, widget);
}

//============= 第二层QTreeWidget ==================//

```cpp
CustomWidget::CustomWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::CustomWidget)
{
    ui->setupUi(this);

    //获取顶级节点
    QTreeWidgetItem *parentItem = ui->treeWidget->topLevelItem(0);
    //创建子节点
    QTreeWidgetItem *newItem = new QTreeWidgetItem(parentItem);
    //初始化 待嵌套的 widget(CustomTableWidget 上面放了一个 QTableView)
    CustomTableWidget *widget = new CustomTableWidget(this);
    //设置 QTreeWidget 嵌套 widget
    ui->treeWidget->setItemWidget(newItem, 0, widget);
}