我希望仅在doubleClick事件之后选择(突出显示)我的TreeView项目。即,应忽略单击和右键单击事件,不应突出显示TreeView中的项目。我正在使用带有QStandardItemModel的TreeView。我试过了:
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;
}
PS。尝试使用keyEvent->key() == Qt::Key_Down
类似的eventFilter,它可以工作。
[解决]
有趣的是。过滤器必须安装在键盘键的 treeView 上,鼠标点击的 TreeView-&gt; 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);