Навсегда отключить сдвиг в Qt, когда работает графический интерфейс?

Я использую QTableView, где я показываю список значков, пользователь может выбрать некоторые значки с помощью мыши и кнопки управления, и я могу справиться с этим выбором. Но я хочу отключить использование Shift + левая клавиша мыши над QTableView.

Есть ли способ полностью отключить кнопку Shift во время процесса во время работы GUI? Я могу обнаружить нажатие клавиши Shift, используя eventFilter, который установлен в окне просмотра QTableView, но я не могу найти способ полностью отключить клавишу 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

Решение

Я буду обрабатывать щелчки мыши и состояние кнопок следующим образом:

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;
}
1

Другие решения

Что касается вашего кода, я полагаю, что вы хотите изменить способ выбора вещей в QTableView, и отключение кнопки Shift было бы просто обходным путем.

Вы можете отключить множественный выбор с помощью:

QAbstractItemView::selectionMode(QAbstractItemView::SingleSelection);

Увидеть: http://qt-project.org/doc/qt-4.8/qabstractitemview.html#SelectionMode-enum: для получения дополнительной информации

3

По вопросам рекламы [email protected]