0

我正在使用 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);
}
4

2 回答 2

3

关于您的代码,我相信您想更改在 QTableView 中选择内容的方式并禁用 shift 按钮只是一种解决方法。

您可以使用以下方法禁用多选:

QAbstractItemView::selectionMode(QAbstractItemView::SingleSelection);

请参阅:http: //qt-project.org/doc/qt-4.8/qabstractitemview.html#SelectionMode-enum:了解更多信息

于 2014-02-18T18:53:44.927 回答
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;
}
于 2014-02-18T16:03:34.047 回答