Qt之QTreeWidget入门

时间:2021-07-26 14:27:03

QTreeWidget的一些基本操作

1.insertTopLevelItems,insertTopLevelItem用来添加顶层的item

QTreeWidget *treeWidget = new QTreeWidget(this);//创建
treeWidget->setColumnCount(); //设置列
treeWidget->setHeaderLabel(tr("item tree")); //设置标题
treeWidget->setGeometry(,,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(,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());
}