QTreeWidget的一些基本操作
1.insertTopLevelItems,insertTopLevelItem用來添加頂層的item
QTreeWidget *treeWidget = new QTreeWidget(this);//創建 treeWidget->setColumnCount(1); //設置列 treeWidget->setHeaderLabel(tr("item tree")); //設置標題 treeWidget->setGeometry(0,0,this->width(),this->height()); //設置大小 QList<QTreeWidgetItem *> items; //創建兩個節點 QTreeWidgetItem *fItem1 = new QTreeWidgetItem(treeWidget,QStringList(QString("f1"))); QTreeWidgetItem *fItem2 = new QTreeWidgetItem(treeWidget,QStringList(QString("f2"))); items.append(fItem1); items.append(fItem2); //添加頂層節點 treeWidget->insertTopLevelItems(0,items); //節點始終保持展開 treeWidget->setItemsExpandable(false); treeWidget->expandAll();
2.父節點通過addChild增加子節點
//創建子節點 QTreeWidgetItem *fItem1a = new QTreeWidgetItem(fItem1,QStringList(QString("f1a"))); QTreeWidgetItem *fItem1b = new QTreeWidgetItem(fItem1,QStringList(QString("f1b"))); QTreeWidgetItem *fItem2a = new QTreeWidgetItem(fItem2,QStringList(QString("f2a"))); QTreeWidgetItem *fItem2b = new QTreeWidgetItem(fItem2,QStringList(QString("f2b"))); //添加字節點 fItem1->addChild(fItem1a); fItem1->addChild(fItem1b); fItem2->addChild(fItem2a); fItem2->addChild(fItem2b);
3.建立鼠標點擊右鍵點擊信號檢測
//檢測點擊事件 connect(treeWidget,SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(itemClick(QTreeWidgetItem*,int))); //檢測鼠標右鍵 treeWidget->setContextMenuPolicy(Qt::CustomContextMenu); connect(treeWidget,SIGNAL(customContextMenuRequested(const QPoint&)), this,SLOT(popMenu(const QPoint&)));
4.槽函數
void Widget::itemClick(QTreeWidgetItem *item, int column) { QTreeWidgetItem *parent = item->parent(); //獲取父節點 if(NULL==parent) //注意:最頂端項是沒有父節點的 return; int col = parent->indexOfChild(item); //item在父項中的節點行號(從0開始) } //彈出菜單 void Widget::popMenu(const QPoint &) { QTreeWidgetItem* curItem=treeWidget->currentItem(); //**獲取當前被點擊的節點 if(curItem == NULL || curItem->parent() == NULL) return; //右鍵的位置在空白位置右擊或者點擊的是頂層item //創建一個action QAction deleteItem(QString::fromLocal8Bit("&刪除"),this); connect(&deleteItem, SIGNAL(triggered()), this, SLOT(deleteItem())); QPoint pos; //創建一個菜單欄 QMenu menu(treeWidget); menu.addAction(&deleteItem); menu.exec(QCursor::pos()); //在當前鼠標位置顯示 } //刪除item void Widget::deleteItem() { QTreeWidgetItem* curItem=treeWidget->currentItem(); curItem->parent()->removeChild(treeWidget->currentItem()); }