該系列持續更新,喜歡請一鍵三連,感謝各位大佬。
QT5.14.2 參考官方QT助手
文章目錄
- QTreeWidget Class
- properties
- Public Functions
- 默認構造函數
- 默認析構函數
- 添加根節點void addTopLevelItem(QTreeWidgetItem *item)
- 添加多個根節點void addTopLevelItems(const QList<QTreeWidgetItem *> &items)
- 關閉編輯void closePersistentEditor(QTreeWidgetItem *item, int column = 0)
- 獲取列數int columnCount() const
- 返回當前選中列int currentColumn() const
- 返回當前選中QTreeWidgetItem *currentItem() const
- 沒用void editItem(QTreeWidgetItem *item, int column = 0)
- 查找滿足條件的item返回QList<QTreeWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags, int column = 0) const
- 返回表頭QTreeWidgetItem *headerItem() const
- 返回index索引根據item int indexOfTopLevelItem(QTreeWidgetItem *item) const
- 在指定索引位置插入新的top節點void insertTopLevelItem(int index, QTreeWidgetItem *item)
- 插入多個top節點void insertTopLevelItems(int index, const QList<QTreeWidgetItem *> &items)
- 遞歸訪問所有根節點 返回一個模擬節點作為所有根節點的父節點QTreeWidgetItem *invisibleRootItem() const
- 節點是否為可編輯狀態bool isPersistentEditorOpen(QTreeWidgetItem *item, int column = 0) const
- 不分層級獲取上層相鄰節點QTreeWidgetItem *itemAbove(const QTreeWidgetItem *item) const
- 根據坐標返回節點QTreeWidgetItem *itemAt(const QPoint &p) const
- 同上直接輸入坐標QTreeWidgetItem *itemAt(int x, int y) const
- 返回顯示出的下層節點QTreeWidgetItem *itemBelow(const QTreeWidgetItem *item) const

QTreeWidget Class
The QTreeWidget class provides a tree view that uses a predefined tree model. More…
QTreeWidget類提供了一個使用預定義樹模型的樹視圖。
Header:#include
qmake:QT += widgets
Inherits:QTreeView
List of all members, including inherited members
所有成員的列表,包括繼承的成員
Obsolete members
過時的成員
properties
columnCount : int
topLevelItemCount : const int
Public Functions
默認構造函數
QTreeWidget::QTreeWidget(QWidget *parent = nullptr)
示例:
// 創建 QTreeWidget 對象
QTreeWidget *tree = new QTreeWidget;
tree->setColumnCount(3); // 設置列數為 3
tree->setHeaderLabels({ "Name", "Value", "Data" }); // 設置列標簽
tree->header()->setSectionResizeMode(QHeaderView::ResizeToContents); // 自適應列寬
默認析構函數
QTreeWidget::~QTreeWidget()
添加根節點void addTopLevelItem(QTreeWidgetItem *item)
示例:
// 創建根節點
QTreeWidgetItem *root = new QTreeWidgetItem(tree);
root->setText(0, "Root");
root->setText(1, "0");
root->setData(2, Qt::UserRole, "root data");
tree->addTopLevelItem(root);
添加多個根節點void addTopLevelItems(const QList<QTreeWidgetItem *> &items)
示例:
// 創建根節點
QTreeWidgetItem *root = new QTreeWidgetItem(tree);
root->setText(0, "Root");
root->setText(1, "0");
root->setData(2, Qt::UserRole, "root data");
//tree->addTopLevelItem(root);
QList<QTreeWidgetItem* > all_root_list;
all_root_list.push_back(root);
QTreeWidgetItem *root1 = new QTreeWidgetItem(tree);
root1->setText(0, "Root2");
all_root_list.push_back(root1);
tree->addTopLevelItems(all_root_list);
關閉編輯void closePersistentEditor(QTreeWidgetItem *item, int column = 0)
關閉item編輯器,如果是關閉的則此函數無效。
先打開看效果是這樣的:
tree->openPersistentEditor(root);
然后再調用closePersistentEditor
tree->openPersistentEditor(root);
tree->closePersistentEditor(root);
獲取列數int columnCount() const
qDebug() << "tree->columnCount:"<<tree->columnCount();
返回當前選中列int currentColumn() const
默認-1,點擊選中哪列返回列號,索引從0開始。
qDebug() << "tree->currentColumn:" << tree->currentColumn();
connect(tree, &QTreeWidget::itemClicked, this, [=] {qDebug() << "tree->currentColumn:" << tree->currentColumn();
});
返回當前選中QTreeWidgetItem *currentItem() const
默認是NULL
QTreeWidgetItem* selectItem = tree->currentItem();
沒用void editItem(QTreeWidgetItem *item, int column = 0)
查找滿足條件的item返回QList<QTreeWidgetItem *> findItems(const QString &text, Qt::MatchFlags flags, int column = 0) const
查找包含字符串ro的item,以字符串不分大小寫匹配(第二個參數是匹配規則為枚舉類型詳見qt官方文檔說明)
QList<QTreeWidgetItem*> find_items = tree->findItems("ro",Qt::MatchContains);
for (auto item:find_items)
{qDebug() << item->text(0);
}
返回表頭QTreeWidgetItem *headerItem() const
QTreeWidgetItem* hearderItem = tree->headerItem();
qDebug() << hearderItem->text(0);
qDebug() << hearderItem->text(1);
qDebug() << hearderItem->text(2);
qDebug() << hearderItem->text(3);
返回index索引根據item int indexOfTopLevelItem(QTreeWidgetItem *item) const
只能獲取到top節點索引
qDebug() << tree->indexOfTopLevelItem(nullptr);
qDebug() << tree->indexOfTopLevelItem(root);
qDebug() << tree->indexOfTopLevelItem(child2);
qDebug() << tree->indexOfTopLevelItem(root1);
在指定索引位置插入新的top節點void insertTopLevelItem(int index, QTreeWidgetItem *item)
插入qstring超過列數則不顯示
QStringList insertitem;
insertitem << "insertroot" << "i2" << "2133" << "122344";
tree->insertTopLevelItem(1, new QTreeWidgetItem(insertitem));
插入多個top節點void insertTopLevelItems(int index, const QList<QTreeWidgetItem *> &items)
QStringList insertitem;
insertitem << "insertroot" << "i2" << "2133";
QList<QTreeWidgetItem*> qtree_widget_list;
qtree_widget_list.push_back(new QTreeWidgetItem(insertitem));
insertitem.clear();
insertitem << "insertroot2";
qtree_widget_list.push_back(new QTreeWidgetItem(insertitem));
tree->insertTopLevelItems(0, qtree_widget_list);
遞歸訪問所有根節點 返回一個模擬節點作為所有根節點的父節點QTreeWidgetItem *invisibleRootItem() const
以該形式遍歷所有根節點:
QTreeWidgetItem* one = tree->invisibleRootItem();
int nums = one->childCount();
for (int i=0;i<nums;++i)
{qDebug() << one->child(i)->text(0);
}
節點是否為可編輯狀態bool isPersistentEditorOpen(QTreeWidgetItem *item, int column = 0) const
獲取item是否為可編輯狀態,qt5.10之后版本才有這個函數
qDebug()<< tree->isPersistentEditorOpen(root);
tree->openPersistentEditor(root);
qDebug() << tree->isPersistentEditorOpen(root);
tree->closePersistentEditor(root);
qDebug() << tree->isPersistentEditorOpen(root);
不分層級獲取上層相鄰節點QTreeWidgetItem *itemAbove(const QTreeWidgetItem *item) const
只能獲取到展開節點,所以開始之前先調用expandAll(),否則獲取到的為顯示的相鄰節點。
若沒有顯示出來的上層節點則返回空指針。
tree->expandAll();
QTreeWidgetItem* t1 = tree->itemAbove(root);
if (t1)qDebug() << t1->text(0);
t1 = tree->itemAbove(child1);
if (t1)qDebug() << t1->text(0);
t1 = tree->itemAbove(root1);
if (t1)qDebug() << t1->text(0);
根據坐標返回節點QTreeWidgetItem *itemAt(const QPoint &p) const
樹形控件內部坐標,左上角為0,0點,如果對應坐標沒有節點返回NULL
QPoint* p1 = new QPoint(0, 0);
QTreeWidgetItem* t1 = tree->itemAt(*p1);
if (t1)qDebug() << t1->text(0);
QPoint* p2 = new QPoint(0, 40);
t1 = tree->itemAt(*p2);
if (t1)qDebug() << t1->text(0);
同上直接輸入坐標QTreeWidgetItem *itemAt(int x, int y) const
同上:
返回顯示出的下層節點QTreeWidgetItem *itemBelow(const QTreeWidgetItem *item) const
同itemAbove,只是取得下層節點,沒有下層則返回空指針