2015-07-15 2 views
0

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

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

+0

ли вы имеете в виду, что вы хотите, чтобы проверить, когда значок нажата? –

+0

Треугольник слева, описывающий предмет с детьми. Нажатие на нее расширяет элемент и показывает детей. Я хочу знать, что эта штука нажата, потому что теперь, когда она есть, она дает мне индекс элемента, и я не знаю, откуда происходит событие нажатия мыши. Таким образом, он расширяется, сворачивается или сворачивается и расширяется. – user3842408

ответ

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); 
    } 
}