Qt: Выберите элемент TreeView только в DoubleClick

Я хочу, чтобы мои элементы TreeView выбирались (подсвечивались) ТОЛЬКО после события doubleClick. То есть события одиночного щелчка и правого клика должны игнорироваться, не должны выделять элементы в TreeView. Я использую TreeView с QStandardItemModel. Я пробовал:

  1. Функция одиночного щелчка on_treeViewFiles_clicked () отменяет выбор элементов

ui->treeViewFiles->clearSelection();
  1. Тогда внутри функции doubleClick

void MyApp::on_treeViewFiles_doubleClicked(const QModelIndex &fileidx)

выбрал пункт с

ui->treeViewFiles->selectionModel()->select(fileidx, QItemSelectionModel::Rows);
  1. Пробовал также установить текущий индекс

    ui->treeViewFiles->setCurrentIndex(fileidx);

Ну, код выше ничего не делает в буквальном смысле, только подсветка опущена.

  1. Я пробовал eventFilter, но не работает, предложения?

bool MyApp::eventFilter(QObject *watched, QEvent *event)
{
if(event->type() == QEvent::MouseButtonPress)
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
if(mouseEvent->button() == Qt::LeftButton)
{
qDebug() << "clicked";
return true;
}
else
return false;
}
return false;
}

пс. Пробовал похожий eventFilter с keyEvent->key() == Qt::Key_Down и это работает.

[Решено]

Забавная вещь. Фильтр должен быть установлен на в виде дерева для клавиш клавиатуры и на TreeView-> ViewPort для щелчков мыши. Так что вместо

ui->treeViewFiles->installEventFilter(this);

необходимо установить фильтр в окне просмотра

ui->treeViewFiles->viewport()->installEventFilter(this);
[РЕШЕНИЕ 2]

Нашел очень простое, но сильное решение. Сначала отключите режим выбора в конструкторе.

ui->treeViewFiles->setSelectionMode(QAbstractItemView::NoSelection);

Тогда в вашей функции DoubleClick

void MyApp::on_treeViewFiles_doubleClicked(const QModelIndex &fileidx)

включить и отключить режим выбора TreeView таким образом, чтобы

ui->treeViewFiles->setSelectionMode(QAbstractItemView::SingleSelection);
ui->treeViewFiles->selectionModel()->select(fileidx, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
ui->treeViewFiles->setSelectionMode(QAbstractItemView::NoSelection);

0

Решение

Задача ещё не решена.

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

Других решений пока нет …

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