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下載:點擊跳轉
運行效果如下:
覺得有幫助的話,打賞一下唄。。
? ? ? ? ? ?