Qt学习笔记(十九):QTreeWidget 的常用方法
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Qt学习笔记(十九):QTreeWidget 的常用方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                在界面上拉一個 Tree Widget 控件和五個按鈕控件:
widget.cpp 文件如下:?
#include "widget.h" #include "ui_widget.h" #include <QDebug> #include <QTreeWidget> #include <QTreeWidgetItem> #include <QMessageBox>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);// 雙擊控件,進行編輯connect(ui->treeWidget, &QTreeWidget::itemDoubleClicked, [=](QTreeWidgetItem * item, int column){qDebug() << column << item->text(column).toUtf8().data();// 設置允許編輯item->setFlags(item->flags() | Qt::ItemIsEditable);}); }Widget::~Widget() {delete ui; }// 添加 void Widget::on_btnAdd_clicked() {// 添加標題頭ui->treeWidget->setHeaderLabels(QStringList() << "英雄姓名" << "英雄介紹"); // ui->treeWidget->setColumnWidth(0, 100); // 設置列寬 // ui->treeWidget->setColumnWidth(1, 300);QFont font;font.setBold(true);font.setFamily("宋體");font.setPointSize(16);ui->treeWidget->header()->setFont(font); // 設置標題的字體ui->treeWidget->header()->setDefaultAlignment(Qt::AlignCenter); // 設置居中顯示// 設置 header 的約束模式:ResizeToContents 表示 header 大小根據內容自動調整;// 設置了 ResizeToContents 模式,則前面 setColumnWidth 方法設置的列寬無效;ui->treeWidget->header()->setSectionResizeMode(QHeaderView::ResizeToContents);// 設置最后一個 header 是否占用所有可用空間;默認值為 false;// 如果為 false,當內容不足以完全顯示內容時,會自動添加滾動條;// 如果為 true,則不會自動添加滾動條;ui->treeWidget->header()->setStretchLastSection(false);// 添加項QTreeWidgetItem * liItem = new QTreeWidgetItem(QStringList() << "力量");QTreeWidgetItem * minItem = new QTreeWidgetItem(QStringList() << "敏捷");QTreeWidgetItem * zhiItem = new QTreeWidgetItem(QStringList() << "智力");// 添加頂層項目ui->treeWidget->addTopLevelItem(liItem);ui->treeWidget->addTopLevelItem(minItem);ui->treeWidget->addTopLevelItem(zhiItem);QStringList heroL1;QStringList heroL2;QStringList heroM1;QStringList heroM2;QStringList heroZ1;QStringList heroZ2;heroL1 << "剛被豬" << "前排坦克,能在吸收傷害的同時造成可觀的范圍輸出";heroL2 << "船長" << "前排坦克,能肉能輸出能控場的全能英雄";heroM1 << "月騎" << "中排物理輸出,可以使用分裂利刃攻擊多個目標";heroM2 << "小魚人" << "前排戰士,擅長偷取敵人的屬性來增強自身戰力";heroZ1 << "死靈法師" << "前排法師坦克,魔法抗性較高,擁有治療技能";heroZ2 << "巫醫" << "后排輔助法師,可以使用奇特的巫術詛咒敵人與治療隊友";// 追加子項目 子項也是 QTreeWidgetItemQTreeWidgetItem * li1 = new QTreeWidgetItem(heroL1);liItem->addChild(li1);QTreeWidgetItem * li2 =new QTreeWidgetItem(heroL2);liItem->addChild(li2);QTreeWidgetItem * Min1 =new QTreeWidgetItem(heroM1);minItem->addChild(Min1);QTreeWidgetItem * Min2 =new QTreeWidgetItem(heroM2);minItem->addChild(Min2);QTreeWidgetItem * Zhi1 =new QTreeWidgetItem(heroZ1);zhiItem->addChild(Zhi1);QTreeWidgetItem * Zhi2 =new QTreeWidgetItem(heroZ2);zhiItem->addChild(Zhi2); }// 插入 void Widget::on_btnInsert_clicked() {qDebug() << ui->treeWidget->header()->count(); // header列的數量qDebug() << ui->treeWidget->columnCount(); // 列的數量qDebug() << ui->treeWidget->topLevelItemCount();// 頂層 item 的數量// 新創建一個頂層項QTreeWidgetItem *adcItem = new QTreeWidgetItem(QStringList() << "ADC");// 在所有頂層項的最后插入新創建的頂層項ui->treeWidget->insertTopLevelItem(ui->treeWidget->topLevelItemCount(), adcItem);QStringList adcList1;adcList1 << "寒冰射手" << "阿瓦羅薩部族的戰母,身具寒冰血脈的艾希,是蠻子的老婆!";QStringList adcList2;adcList2 << "皮城女警" << "皮特沃城的女警花,以懲治犯罪為自己的人生目標!";// 追加子項QTreeWidgetItem *hbItem = new QTreeWidgetItem(adcList1);QTreeWidgetItem *njItem = new QTreeWidgetItem(adcList2);adcItem->addChild(hbItem);adcItem->addChild(njItem); }// 刪除 void Widget::on_btnDelete_clicked() {// 獲取當前選中的項QTreeWidgetItem *item = ui->treeWidget->currentItem();if (item == NULL){QMessageBox::warning(this, "系統提示", "沒有選擇任何項!");}else{qDebug() << item->columnCount();qDebug() << item->text(0).toUtf8().data();qDebug() << item->text(1).toUtf8().data();if (QMessageBox::question(this, "系統提示", "確定要刪除選中的項嗎?") == QMessageBox::Yes){// 獲取當前選中節點的父對象,如果父對象為 NULL,則說明當前選中節點為頂層節點QTreeWidgetItem *parentItem = item->parent();if (parentItem == NULL){qDebug() << "當前節點為頂層節點";// 獲取當前選中節點的行索引QModelIndex index = ui->treeWidget->currentIndex();qDebug() << QString::number(index.row());// 根據索引刪除頂層節點QTreeWidgetItem *delItem = ui->treeWidget->takeTopLevelItem(index.row());ui->treeWidget->removeItemWidget(delItem, index.column());}else{// 非頂層節點的刪除:使用父節點移除當前子節點parentItem->removeChild(item);}}} }// 修改 void Widget::on_btnUpdate_clicked() {// 在構造函數中添加雙擊 item 的事件處理程序了 }// 查找 void Widget::on_btnFind_clicked() {// 獲取當前選中的列int column = ui->treeWidget->currentColumn();qDebug() << QString::number(column);// 獲取當前選中項的索引int row = ui->treeWidget->currentIndex().row();column = ui->treeWidget->currentIndex().column();qDebug() << QString::number(row) << QString::number(column);// 獲取當前選中項的對象QTreeWidgetItem *item = ui->treeWidget->currentItem();qDebug() << item->text(column).toUtf8().data(); }添加數據之后的效果如下:
總結
以上是生活随笔為你收集整理的Qt学习笔记(十九):QTreeWidget 的常用方法的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 前端学习(2632):vuex刷新丢失
 - 下一篇: 前端学习(2705):重读vue电商网站