我正在使用 QTableView 显示图标列表,用户可以使用鼠标和控制键按钮选择一些图标,并且我能够处理这些选择。但我想在 QTableView 上禁用 shift+鼠标左键。
在运行 GUI 的过程中,有什么方法可以完全禁用 shift 键按钮?我能够使用安装在 QTableView 视口上的 eventFilter 检测到 shift 键按下,但是当用户同时按下 shift 键和鼠标左键时,我找不到任何方法来完全使 shift 键处于非活动状态。
我的事件过滤器如下:
bool MainWindow::eventFilter(QObject* obj, QEvent *ev)
{
if(obj == ui->listOfImages->viewport())
{
if(ev->type() == QEvent::MouseButtonPress)
{
QMouseEvent * mouseEv = static_cast<QMouseEvent*>(ev);
if((mouseEv->buttons() & Qt::LeftButton) && (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) == true) && (QApplication::keyboardModifiers().testFlag(Qt::ShiftModifier) == false))
{
controlButtonCounter++;
fetch = true;
//I use these variables for some purposes.
return QObject::eventFilter(obj,ev);
}
else if((mouseEv->buttons() & Qt::LeftButton) && (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) == false) && (QApplication::keyboardModifiers().testFlag(Qt::ShiftModifier) == false))
{
if(selectedImages.size()>0)
{
ui->listOfImages->clearSelection();
selectedImages.clear();
selectedList.clear();
ui->selectedFiles->clear();
ui->selectedFiles->show();
}
fetch = false;
controlButtonCounter = 0;
//I use these variables for some purposes.
}
else if((mouseEv->buttons() & Qt::LeftButton) && (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) == false) && (QApplication::keyboardModifiers().testFlag(Qt::ShiftModifier) == true) )
{
qDebug()<<"Shift button pressed!";
// Don't how to prevent shift button from selecting multiple icon.
}
}
}
return QObject::eventFilter(obj,ev);
}