Я хочу, чтобы мои элементы TreeView выбирались (подсвечивались) ТОЛЬКО после события doubleClick. То есть события одиночного щелчка и правого клика должны игнорироваться, не должны выделять элементы в TreeView. Я использую TreeView с QStandardItemModel. Я пробовал:
ui->treeViewFiles->clearSelection();
void MyApp::on_treeViewFiles_doubleClicked(const QModelIndex &fileidx)
выбрал пункт с
ui->treeViewFiles->selectionModel()->select(fileidx, QItemSelectionModel::Rows);
Пробовал также установить текущий индекс
ui->treeViewFiles->setCurrentIndex(fileidx);
Ну, код выше ничего не делает в буквальном смысле, только подсветка опущена.
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);
Задача ещё не решена.
Других решений пока нет …