2013-12-23 49 views
2

我想阻止control+A快捷方式選擇QTableView中的所有文件,我想使它只能使用鼠標進行選擇,但不能使用鍵盤快捷方式。現在我的eventFilter代碼如下。你能否建議我採取這種方式?如何禁用控制+ QTableView的快捷方式,並防止選擇所有選項?

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); 
} 
+0

即使允許CTRL + A組合,是否將'selectionMode'設置爲'QAbstractItemView :: SingleSelection'工作?基本上,它應該防止選擇多行。 –

+0

您需要檢查按下Ctrl + A組合鍵是否發生按鍵事件,並返回true,即過濾事件。 – vahancho

+0

對不起,我如何檢查Ctrl + A是否被按下?我看不到任何方法來做到這一點。 @vahancho –

回答

0

我會嘗試用下面的塊擴展你的事件過濾器的代碼:

[..] 
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鍵。