我正在使用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);
}
答案 0 :(得分:3)
关于你的代码,我相信你想改变你在QTableView中选择东西的方式,并且禁用shift按钮只是一个解决方法。
您可以使用以下选项禁用多项选择:
QAbstractItemView::selectionMode(QAbstractItemView::SingleSelection);
请参阅:http://qt-project.org/doc/qt-4.8/qabstractitemview.html#SelectionMode-enum:了解更多信息
答案 1 :(得分:1)
我将通过以下方式处理鼠标点击和按钮状态:
bool MyWidget::eventFilter(QObject *obj, QEvent *event)
{
[..]
if (event->type() == QEvent::MouseButtonPress ||
event->type() == QEvent::MouseButtonRelease) {
Qt::KeyboardModifiers modifiers = QApplication::keyboardModifiers();
if (modifiers & Qt::ShiftModifier) {
// Filter the event, when mouse pressed/released
// with the shift key pressed.
return true;
}
}
[..]
return false;
}