我正在使用QTableView顯示圖標列表,用戶可以用鼠標選擇一些圖標並控制按鍵,並且我可以處理這些選擇。但是我想禁用在QTableView上使用Shift +鼠標左鍵。當GUI運行時,永久禁用Qt中的移位?
在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);
}
爲什麼你想呢?改變控件通常的工作方式可能會使用戶感到迷惑和煩擾。如果你真的想,你可以從你的事件過濾器返回false,如果你檢測到移位按下。這應該防止事件傳播到視口。 –
因爲對於qt中的一些錯誤,我無法使用shift +鼠標左鍵檢測選擇了哪些圖標。因此,最好的選擇是完全禁用QTableView上的shift按鈕。 @j_kubik –
順便說一句你應該從鼠標事件的事件過濾器中返回false,而不是鍵盤。 –