1 QtreeWidget顯示右鍵菜單
#include "treewidget.h" #include <QPushButton> #include <QMenu> TreeWidget::TreeWidget(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); //設置樹形控件每一列的名稱 QStringList sl; sl << u8"名稱"; ui.treeWidget->setHeaderLabels(sl); //treewidget鼠標右鍵菜單事件,需要在代碼手動設置ContextMenuPolicy屬性或者在ui文件中設置 ui.treeWidget->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui.treeWidget, &QWidget::customContextMenuRequested, this, &TreeWidget::ShowContextMenu); //為樹形控件添加一級結點 connect(ui.add_first_node_button, &QPushButton::clicked, this, &TreeWidget::AddFirstNode); //為樹形控件添加二級結點 connect(ui.add_second_node_button, &QPushButton::clicked, this, &TreeWidget::AddSecondNode); } void TreeWidget::ShowContextMenu(const QPoint &pos) { QMenu *menu = new QMenu(this); QTreeWidgetItem *item = ui.treeWidget->itemAt(pos); if (item) { if ((int)TreeItemType::kFisrtNode == item->type()) { QAction *action1 = new QAction(u8"一級結點1", this); menu->addAction(action1); QAction *action2 = new QAction(u8"一級結點2", this); menu->addAction(action2); QAction *action3 = new QAction(u8"一級結點3", this); menu->addAction(action3); } else if ((int)TreeItemType::kSecondNode == item->type()) { QAction *action1 = new QAction(u8"二級結點1", this); menu->addAction(action1); QAction *action2 = new QAction(u8"二級結點2", this); menu->addAction(action2); QAction *action3 = new QAction(u8"二級結點3", this); menu->addAction(action3); } } else { //在空白處點擊,沒有選中QTreeWidgetItem QAction *action1 = new QAction(u8"空白結點1", this); menu->addAction(action1); QAction *action2 = new QAction(u8"空白結點2", this); menu->addAction(action2); QAction *action3 = new QAction(u8"空白結點3", this); menu->addAction(action3); } menu->exec(QCursor::pos()); }
2 QtreeWidget添加結點
void TreeWidget::AddFirstNode() { QTreeWidgetItem *node = new QTreeWidgetItem(ui.treeWidget, (int)TreeItemType::kFisrtNode); QString text = QString::number(++node_sequence_); node->setText(0, text); ui.treeWidget->addTopLevelItem(node); } void TreeWidget::AddSecondNode() { QTreeWidgetItem *it = ui.treeWidget->currentItem(); if (!it) { return; } QTreeWidgetItem *item = new QTreeWidgetItem(it, (int)TreeItemType::kSecondNode); item->setText(0,u8"二級結點"); it->addChild(item); }
3 QtreeWidget刪除結點
void TreeWidget::DeleteNode() { QTreeWidgetItem *item = ui.treeWidget->currentItem(); if (!item) { return; } if ((int)TreeItemType::kFisrtNode == item->type()) { int index = ui.treeWidget->indexOfTopLevelItem(item); ui.treeWidget->takeTopLevelItem(index); } else if ((int)TreeItemType::kSecondNode == item->type()) { ui.treeWidget->removeItemWidget(item, 0); delete item; } }
效果如下圖:
代碼源碼下載(treewidget文件夾):git@github.com:Mr-jiayunfei/qt_code.git