Предоставление событий в QWidget(QWT), встроенный в QML Qt4
Я использовал QwtPlot (Qwt 6.0.1) в проекте QML (Qt 4.8) . я обернуть его через QDeclarativeItem
GraphWidgetQML::GraphWidgetQML(QDeclarativeItem *parent):QDeclarativeItem(parent)
{
_GraphArea = new GraphWidget; //child of QwtPlot without event handlers overrides
QGraphicsProxyWidget *_wiget = new QGraphicsProxyWidget(this);
_wiget->setWidget(_GraphArea);
_wiget->setFlag(QGraphicsItem::ItemIsFocusable,true);
this->setClip(true);
}
и вставить в QML через код
qmlRegisterType<GraphWidgetQML> ("GraphWidget",1,0,"GraphWidget"); //registration type
и QML
GraphWidget {
id: drawer
objectName: "drawer"
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
//
anchors.topMargin: 5
anchors.bottomMargin: 5
anchors.leftMargin: 5
anchors.rightMargin: 5
}
Но мышиные события не будут работать правильно. Например, когда я хочу нарисовать масштабирующий прямоугольник, когда я отпустил кнопку мыши, он не будет масштабироваться, пока не будет нажата клавиша ввода. Правая кнопка не работает вообще.
Как правильно организовать мероприятие?
1 ответ
При исследовании этого вопроса у меня сложилось общее впечатление QDeclarativeItem
"s QGraphicsItem
наследуемые события мыши ведут себя не так, как "нормальные" QWidget
События. Трудно быть конкретным / уверенным без дальнейшего тестирования, но у меня есть идея (из далекой памяти Qt до QtQuick & QML), что для QWidget
события перемещения мыши, вы получите завершающий mouseMoveEvent
без buttons()
нажата, тогда как в QGraphicsItem
единственное уведомление о том, что перемещение мыши закончено, это mouseReleaseEvent
,
Казалось бы, объяснить ваше наблюдаемое поведение, если ваш GraphWidget
Компонент полагался на mouseMoveEvent
со всеми кнопками вверх, но не получая одну... но я понятия не имею, как эта информация может быть использована для устранения проблемы.