Как точно узнать, когда пользователь раскрывает элемент QTreeView?

Есть ли способ точно узнать, когда начинается операция раскрытия, когда пользователь, скажем, щелкает стрелку раскрытия в QTreeView?

Для случая, когда он дважды щелкает, я могу поймать событие двойного щелчка.

Я пытался переопределить этот слот void expand(const QModelIndex &index); из QTreeView, но это не похоже на работу.

Есть сигнал называется void expanded(const QModelIndex &index); в QTreeView, но, кажется, отправлено после того, как произошло расширение.

Я использую QT 4.8.2

3

Решение

Вот что я сделал, чтобы получить необходимую мне функциональность:

Я переопределил mousePressEvent из QTreeView, как это

void MyTreeView::mousePressEvent(QMouseEvent *event)
{
QModelIndex clickedIndex = indexAt(event->pos());
if(clickedIndex.isValid())
{
QRect vrect = visualRect(clickedIndex);
int itemIdentation = vrect.x() - visualRect(rootIndex()).x();
if(event->pos().x() < itemIdentation)
{
if(!isExpanded(clickedIndex))
{
//do stuff
}
}
}
}

Я проверяю, находится ли нажатие мыши на текстовой метке элемента (имеется в виду на стрелке раскрытия)

Это в сочетании с событием двойного щелчка дает мне то, что мне нужно.

10

Другие решения

Вы можете попытаться сделать это, реализовав метод для события изменения:

  void YourTreeView::changeEvent(QEvent *e)
{
QFrame::changeEvent(e);

switch (e->type()) {
case QEvent::QGraphicsSceneResizeEvent
//do want you want to do
break;
default:
break;
}
}
0

По вопросам рекламы [email protected]