у меня есть QGraphicsView
и QGraphicsScene
и я включил
this->setDragMode(QGraphicsView::RubberBandDrag);
для выбора резинкой. Тем не менее, в моем приложении было бы целесообразно нажать клавишу CTRL, а затем переместить мышь, чтобы начать выбор резиновой ленты. Могу ли я сделать это, не делая свой собственный QRubberBand? Если нет, как я могу переопределить это?
Если вы сказали 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, которая может иметь или не иметь отношение к вам.
Других решений пока нет …