我试图知道用户何时选择项目的装饰,因为我试图实现单击展开/折叠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语句中有条件。
我如何知道装饰是否被选中而不是项目本身或如何阻止装饰动作?
答案 0 :(得分:1)
试试这个:
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 );
}
}