欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > qt QTreeView的简单使用(多级子节点)

qt QTreeView的简单使用(多级子节点)

2025/4/24 8:15:13 来源:https://blog.csdn.net/ckg3824278/article/details/140099913  浏览:    关键词:qt QTreeView的简单使用(多级子节点)
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);setWindowTitle("QTreeView的简单使用");model = new QStandardItemModel;model->setHorizontalHeaderLabels(QStringList() << "left" << "right");ui->treeView->setModel(model);ui->treeView->header()->setSectionResizeMode(QHeaderView::Stretch);ui->treeView->header()->setDefaultAlignment(Qt::AlignHCenter);connect(ui->treeView, &QTreeView::clicked, this, &MainWindow::clicked);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{int index = model->rowCount();QList<QStandardItem *> topList;//链表容器添加顶级节点topList << new QStandardItem(QString("顶级节点:%1-left").arg(index + 1))<< new QStandardItem(QString("顶级节点:%1-right").arg(index + 1));topList[0]->setData(-1, Qt::UserRole + 1); //设置父节点行,当值为-1时则当前为顶级节点topList[1]->setData(-1, Qt::UserRole + 1);//添加顶级节点model->appendRow(topList);
}void MainWindow::on_pushButton_2_clicked()
{//获取当前行列QModelIndex curIndex = ui->treeView->currentIndex();int row = curIndex.row();int column = curIndex.column();int parentRow = curIndex.data(Qt::UserRole + 1).toInt();//当前行列值包含-1值或当前节点非顶级节点时返回if( -1 == row || -1 == column){return;}QStandardItem *item = model->itemFromIndex(curIndex);QList<QStandardItem *> childList;childList << new QStandardItem(QString("子节点:%1-left").arg(item->rowCount()))<< new QStandardItem(QString("子节点:%1-right").arg(item->rowCount()));//设置item的datachildList[0]->setData(row, Qt::UserRole + 1);childList[1]->setData(row, Qt::UserRole + 1);//添加子节点item->appendRow(childList);
}void MainWindow::on_pushButton_3_clicked()
{//获取当前行列QModelIndex curIndex = ui->treeView->currentIndex();int row = curIndex.row();int column = curIndex.column();//当前行列值包含-1值或当前节点非顶级节点时返回if( -1 == row || -1 == column){return;}QStandardItem *item = model->itemFromIndex(curIndex);if(item){QStandardItem *parentItem = item->parent();if(parentItem)parentItem->removeRow(row);elsemodel->removeRow(row);}
}void MainWindow::clicked()
{//获取当前行列QModelIndex curIndex = ui->treeView->currentIndex();int row = curIndex.row();int column = curIndex.column();//当前位置包含-1值返回if( -1 == row || -1 == column){return;}ui->statusbar->showMessage(curIndex.data().toString());
}

DEMO下载:点击跳转

运行效果如下:

觉得有帮助的话,打赏一下呗。。

           

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词