关于qt中的QTreeWidget的拖放问题

关于qt中的QTreeWidget的拖放问题,第1张

void QTreeWidget::itemEntered ( QTreeWidgetItem item, int column ) [signal]

This signal is emitted when the mouse cursor enters an item over the specified column QTreeWidget mouse tracking needs to be enabled for this feature to work

你把treewidget->setMouseTracking(true)试下

在隐藏点。

我们知道在数据结构上来说,任何树都是有根节点的,但我们在QTreeWidget对象中并没有看到界面上展示一个根节点,在QTreeWidget对象和数据项构建时也没有指定这样的根节点,但实际上这个根节点还是存在的,只是不可见,且该节点是树型部件创建之后就自动创建,无论是否存在顶层项。

主要是可以用于递归访问树的所有节点,递归不是从topLevelItem开始,而是从根节点开始,所有节点的类型都是QTreeWidgetItem,可以用QTreeWidgetItem的child方法逐层递归访问。

QList<QTreeWidgetItem > rootList;//创建一个QList队列,队列名字叫做rootList,队列中每个元素是QTreeWidgeItem指针。(QTreeWidgetItem是树状图控件的一个节点)

rootList << root;//表示把root节点放到rootList中去。

tree->insertTopLevelItems(0, rootList); //把rootList中的所有节点,挂载到tree控件的顶层。

你看一下这篇提问,能够解决你的问题: stackoverflowcom/questions/12937812/how-to-create-different-popup-context-menus-for-each-type-of-qtreewidgetitem

也有示例代码下载链接。

我有个思路,你的好友列表既然是treeWidgetItem ,那么,当你打开聊天对话框的时候你就给对应的好友所在的Item设置一下,item->setText(1,"OPEN");关闭对话框的时候设置为"Close";

然后再双击的时候就判断那个Item的第一个Text的值,查看是否为close,是的话就打开对话框,不是的话就不打开。

我想这个思路应该可行,有问题再补充!

currentItem()返回的是当前被选中的item如果你当前选中的是第0个item返回的当然就是第0个item了啊。

如果你非要返回第N个item用QTreeWidgetItem QTreeWidget::topLevelItem ( int index ) const

这个函数来返回第N个,QTreeWidget::topLeveItem(N-1);

滤过父节点不可能,但是双击目标,还可以产生响应的事件。这是我写过的代码:单击事件(可以改双击,内容一样)

首先再 建树时注意加上一句:

HTREEITEM root = m_treeInsertItem(_T("图层集合"),TVI_ROOT);

m_treeSetItemData(root, 0);//就是加上的语句,0(可变)就是后面的nDat

void TreeDolg::OnNMClickTree1(NMHDR pNMHDR, LRESULT pResult)

{

// TODO: 在此添加控件通知处理程序代码

CPoint pt = GetCurrentMessage()->pt;//获取当前鼠标点击消息的坐标点

m_treeScreenToClient(&pt);//将鼠标的屏幕坐标,转换成树形控件的客户区坐标

UINT uFlags = 0;

HTREEITEM hItem = m_treeHitTest(pt, &uFlags);//然后做点击测试

if ((hItem != NULL) && (TVHT_ONITEM & uFlags))//如果点击的位置是在节点位置上面

{

m_treeSelectItem(hItem);

//获取开始我们设置的数据,注意这就是我为什么开始要每个节点设置不同的数据的原因。

//当然,如果你的数据节点比较少,你也可以通过获取节点的文字,如上面设置的"海淀区"

//,然后通过字符串比较来判断点击了哪个节点

int nDat = m_treeGetItemData(hItem); //然后根据不同的节点,你完成不同的动作即可

switch(nDat)

{

case 0:

break;

default:

}

}

pResult = 0;

}

以上就是关于关于qt中的QTreeWidget的拖放问题全部的内容,包括:关于qt中的QTreeWidget的拖放问题、treewidget的根节点初始位置、新手求助,Qt问题,下面那段代码是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9270221.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存