В QGraphicsView,
setDragMode(QGraphicsView::ScrollHandDrag);
Эта строка кода делала то, что я хочу: прокручивать содержимое при перетаскивании. Однако, если я реализовал mouseMoveEvent
или mousePressEvent
для своих пользовательских нужд, магия setDragMode(QGraphicsView::ScrollHandDrag)
исчезла.
Кажется, что эти встроенные функции имеют некоторые зависимости, в большинстве случаев они удобны, но когда вы реализуете одну из них, вы разрываете цепочку между этими зависимостями, так что некоторые из них исчезают.
Я не хочу реализовывать все эти функции с нуля. Как решить эту дилемму?
================== Редактировать 13/12================
Хорошо, я пытаюсь, но...
void MyView::mouseMoveEvent( QMouseEvent* event )
{
// Notice: event->button() always return Qt::NoButton for "mouse move events"
// so event->button() == Qt::LeftButton won't work in this case
if(event->buttons() & Qt::LeftButton)
{
this->dragMoveEvent(dynamic_cast<QDragMoveEvent*>(event));
}
else
{
...
}
}
Этот код не работает, потому что QMouseEvent*
нельзя преобразовать в QDragMoveEvent*
, есть идеи?
QGraphicsView::mouseMoveEvent()
иQGraphicsView::mousePressEvent()
внутри ваших функцийmouseMoveEvent()
иmousePressEvent()
? - person thuga   schedule 12.12.2013QGraphicsView::dragMoveEvent
внутриMyView::mouseMoveEvent()
? - person thuga   schedule 13.12.2013QGraphicsView::ScrollHandDrag
, события наведения не должны активироваться во время перетаскивания. Пока вы вызываетеQGraphicsView::mouseMoveEvent
из своей собственной функцииmouseMoveEvent
, все должно быть в порядке. - person thuga   schedule 16.12.2013