Как узнать, что украшение элемента QTreeView нажато

Я пытаюсь узнать, когда пользователь выбирает украшение элемента, потому что я пытался реализовать один щелчок, разворачивая/сворачивая 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.

Как узнать, что выбрано украшение, а не сам предмет, или как заблокировать действие украшения?


person user3842408    schedule 15.07.2015    source источник
comment
Вы имеете в виду, что хотите проверить, когда нажимается значок?   -  person p.i.g.    schedule 15.07.2015
comment
Треугольник слева описывает элемент с детьми. Щелчок по нему расширяет элемент и показывает дочерние элементы. Я хочу знать, что эта вещь нажата, потому что сейчас, когда это происходит, она дает мне индекс элемента, и я не могу узнать, откуда происходит событие нажатия мыши. Так что он расширяется и схлопывается или схлопывается и расширяется.   -  person user3842408    schedule 15.07.2015


Ответы (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 );
    }
}
person p.i.g.    schedule 15.07.2015