如何禁用控制+QTableView的快捷方式并防止全选选项



我想阻止control+A快捷方式选择QTableView中的所有文件,我想让它只能用鼠标选择,而不能用键盘快捷键选择。现在我的eventFilter代码如下。你能告诉我一种方法吗?

bool MainWindow::eventFilter(QObject* obj, QEvent *ev)
{
    if(ev->type() == QEvent::MouseButtonPress)
    {
        if(obj == ui->listOfImages->viewport())
        {
            QMouseEvent * mouseEv = static_cast<QMouseEvent*>(ev);
            if((mouseEv->buttons() & Qt::LeftButton) && (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) == true))
            {
                controlButtonCounter++;
                fetch = true;
                return QObject::eventFilter(obj,ev);
            }
            else if((mouseEv->buttons() & Qt::LeftButton) && (QApplication::keyboardModifiers().testFlag(Qt::ControlModifier) == false))
            {
                if(selectedImages.size()>0)
                {
                    ui->listOfImages->clearSelection();
                    selectedImages.clear();
                    selectedList.clear();
                    ui->selectedFiles->clear();
                    ui->selectedFiles->show();
                }
                fetch = false;
                controlButtonCounter = 0;
            }
        }
    }
    return QObject::eventFilter(obj,ev);
}

我会尝试使用以下块扩展事件过滤器的代码:

[..]
if (event->type() == QEvent::KeyPress && obj == ui->listOfImages->viewport()) { 
    QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
    int key = keyEvent->key();
    Qt::KeyboardModifiers modifiers = keyEvent->modifiers();
    if(modifiers & Qt::ShiftModifier) 
        key += Qt::SHIFT; 
    if(modifiers & Qt::ControlModifier) 
        key += Qt::CTRL; 
    if(modifiers & Qt::AltModifier) 
        key += Qt::ALT; 
    if(modifiers & Qt::MetaModifier) 
        key += Qt::META; 
    if (QKeySequence(key) == QKeySequence(QKeySequence::SelectAll)) {
        // Filter the event.
        return true;
    }
}
[..]

如果按下标准的"全选"组合键,此代码应该返回 true(过滤事件)。它通常是 Ctrl+A 键。

相关内容

  • 没有找到相关文章

最新更新