Qt резинкой на выбор с конкретной клавишей клавиатуры

у меня есть QGraphicsView и QGraphicsScene и я включил

this->setDragMode(QGraphicsView::RubberBandDrag);

для выбора резинкой. Тем не менее, в моем приложении было бы целесообразно нажать клавишу CTRL, а затем переместить мышь, чтобы начать выбор резиновой ленты. Могу ли я сделать это, не делая свой собственный QRubberBand? Если нет, как я могу переопределить это?

1

Решение

Если вы сказали QMainWindow который содержит ваш QGraphicsView и сцена, один из способов сделать это будет перегружать keyPressEvent а также keyReleaseEvent методы QMainWindow такие:

void MyMainWindow::keyPressEvent( QKeyEvent * event )
{
if( event->key() == Qt::Key_Control ) {
graphicsView->setDragMode(QGraphicsView::RubberBandDrag);
}
QMainWindow::keyPressEvent(event);

}void MyMainWindow::keyReleaseEvent( QKeyEvent * event )
{
if( event->key() == Qt::Key_Control ) {
graphicsView->setDragMode(QGraphicsView::NoDrag);
}
QMainWindow::keyReleaseEvent(event);

}

Это установит режим выбора на RubberBandDrag пока CTRL нажата. Когда клавиша отпущена снова, режим перетаскивания возвращается к значению по умолчанию NoDrag и выбор не выполняется.
В обоих случаях событие также перенаправляется в реализацию базового класса QMainWindow, которая может иметь или не иметь отношение к вам.

2

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

Других решений пока нет …

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