Есть ли способ точно узнать, когда начинается операция раскрытия, когда пользователь, скажем, щелкает стрелку раскрытия в QTreeView?
Для случая, когда он дважды щелкает, я могу поймать событие двойного щелчка.
Я пытался переопределить этот слот void expand(const QModelIndex &index);
из QTreeView, но это не похоже на работу.
Есть сигнал называется void expanded(const QModelIndex &index);
в QTreeView, но, кажется, отправлено после того, как произошло расширение.
Я использую QT 4.8.2
Вот что я сделал, чтобы получить необходимую мне функциональность:
Я переопределил 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
}
}
}
}
Я проверяю, находится ли нажатие мыши на текстовой метке элемента (имеется в виду на стрелке раскрытия)
Это в сочетании с событием двойного щелчка дает мне то, что мне нужно.
Вы можете попытаться сделать это, реализовав метод для события изменения:
void YourTreeView::changeEvent(QEvent *e)
{
QFrame::changeEvent(e);
switch (e->type()) {
case QEvent::QGraphicsSceneResizeEvent
//do want you want to do
break;
default:
break;
}
}