如何知道QTreeView项目装饰被点击
How to know the QTreeView item decoration is clicked
我想知道当用户选择一个项目的装饰,因为我试图实现一个单一的点击展开/折叠QTreeview和装饰现在什么都不做。它不会展开或折叠项目,如果我点击项目,它会正常工作。
void MyTreeView::mousePressEvent(QMouseEvent *event)
{
QTreeView::mousePressEvent(event);
if (event->button() == Qt::LeftButton)
{
QModelIndex index = indexAt(event->pos());
isExpanded(index) ? collapse(index) : expand(index);
}
}
问题是,当装饰被选中时,它进入if条件。如果不是,一切正常。
我不知道我是否必须阻止装饰动作或在if语句中添加条件。
我如何知道装饰物被选中了,而不是项目本身,或者我如何阻止装饰动作
试试这个:
void MyTreeView::mousePressEvent( QMouseEvent* aEvent )
{
QModelIndex index = indexAt( aEvent->pos() );
if ( index.isValid() )
{
const bool wasExpanded = isExpanded( index );
QTreeView::mousePressEvent( aEvent );
if ( aEvent->button() == Qt::LeftButton )
{
const bool expanded = isExpanded( index );
// QTreeView did not change the item's state ... but you want.
if ( wasExpanded == expanded )
{
expanded ? collapse( index ) : expand( index );
}
}
}
else
{
QTreeView::mousePressEvent( aEvent );
}
}
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- QTreeView幻灯片多选后无法使用单击选择
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 叮当不知道PTRDIFF_MAX?
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- Python中的for循环与C++有何不同
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 我想知道长双倍和双倍之间的区别
- 我需要知道编译器如何在cpp中使用析构函数
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- 如何知道QDataStream不能反序列化某些内容
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- 如何知道整数中的位数
- 有人知道为什么在开关中使用stoi函数会返回恒定的错误吗
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 如何确切知道用户何时扩展QTreeView项目
- 如何知道QTreeView项目装饰被点击