• 8077阅读
  • 6回复

[提问]QTreeWidget的不同Item上怎么添加不同的delegate? [复制链接]

上一主题 下一主题
离线蚂蚁power
 

只看楼主 倒序阅读 楼主  发表于: 2015-06-18
— 本帖被 XChinux 从 其它技术开发讨论区 移动到本区(2015-07-28) —
大家好。我自己写了4个delegate现在想要根据不同的条件放到不同的Item上,但是setItemDelegateForRow,setItemDelegateForCloumn都不可以实现。请问有什么好的办法吗?后来我想把delegate转换成Widget 然后使用setItemWidget但是这么转换不对 QWidget *widget3 = qobject_cast<QWidget *>(object);虽然不抱错但是一点效果没有 估计转换完之后的Widget是空的。
离线realfan

只看该作者 1楼 发表于: 2015-06-19
可以在结点点击选中时,设置代理。
根据选中的结点不同,设置不同的代理。
4条评分好评度+1贡献值+1金钱+10威望+1
蚂蚁power 好评度 +1 帮助我解决问题了,牛人! 2015-06-19
蚂蚁power 贡献值 +1 帮助我解决问题了,牛人! 2015-06-19
蚂蚁power 威望 +1 帮助我解决问题了,牛人! 2015-06-19
蚂蚁power 金钱 +10 帮助我解决问题了,牛人! 2015-06-19
离线蚂蚁power

只看该作者 2楼 发表于: 2015-06-19
回 realfan 的帖子
realfan:可以在结点点击选中时,设置代理。
根据选中的结点不同,设置不同的代理。 (2015-06-19 08:22) 

不是很明白你说的这个。我是这么写的(举例子):有两个父节点,每个父节点下面有N个子节点,父节点上不设置代理,只给子节点设置代理,但是因为子节点的名称不同,所以需要设置的代理也不同。如果使用setItemDelegateForRow那么参数“row”该怎么写?如果使用的是setItemDelegateForColumn那么效果就变成了该列都是最后一次设置的代理。

离线meegoyao

只看该作者 3楼 发表于: 2015-06-19
一个Delegate通过Index,可以做出不同的反应。
4 IN 1 应该可行吧。
离线蚂蚁power

只看该作者 4楼 发表于: 2015-06-19
回 meegoyao 的帖子
meegoyao:一个Delegate通过Index,可以做出不同的反应。
4 IN 1 应该可行吧。 (2015-06-19 09:43) 

我太笨 没能明白。麻烦说详细一点吧。我用的是QTreeWidget。
离线realfan

只看该作者 5楼 发表于: 2015-06-19
回 蚂蚁power 的帖子
蚂蚁power:不是很明白你说的这个。我是这么写的(举例子):有两个父节点,每个父节点下面有N个子节点,父节点上不设置代理,只给子节点设置代理,但是因为子节点的名称不同,所以需要设置的代理也不同。如果使用setItemDelegateForRow那么参数“row”该怎么写?如果使用的是setItemDelegat .. (2015-06-19 09:36) 

setItemDelegateForColumn没问题。
创建QTreeWidget时,给每个节点设置一个setWhatsThis(int column, const QString & whatsThis)设置一个区分的字符串。(当然用text ,data也可以,但这些可能会变化,判断麻烦些)
在itemClicked(QTreeWidgetItem * item, int column)信号处理槽中,这样写
void slotTreeItemClicked(QTreeWidgetItem * item, int column)
{
    if(nullptr == item) return;
    const QString str = item->whatsThis(column);
    if(str  == "1")
        treeWidget->setItemDelegateForColumn(column, delegate1);
    else if(str=="2")
         treeWidget->setItemDelegateForColumn(column, delegate2);
    ....
}
思路是这样的.
就算把其它的都设置成不想要的代理也没关系。每次你点击它,就会设成正确的了
离线蚂蚁power

只看该作者 6楼 发表于: 2015-06-19
回 realfan 的帖子
realfan:setItemDelegateForColumn没问题。
创建QTreeWidget时,给每个节点设置一个setWhatsThis(int column, const QString & whatsThis)设置一个区分的字符串。(当然用text ,data也可以,但这些可能会变化,判断麻烦些)
在itemClicked(QTreeWidgetItem * item, int column)信号 .. (2015-06-19 10:29) 

按照你说的方法解决了。谢谢了!
快速回复
限100 字节
 
上一个 下一个