QML QQQQuickItemマウスイベントの処理
5841 ワード
QtQuickを使用すると、QMLとC++がマウスイベントを処理できるため、面倒になります.私の今の経験から見れば、両者は共存できない.他のものを手動で呼び出さない限り.
QMLマウスイベント処理
まずQMLのマウスイベント処理について,処理されたイベントはC++と同様にclicked,pressed,releaseのように,これ以上述べない.例は次のとおりです.
C++マウスイベント処理
Qt C++マウスイベントは、Qtを使ったことのある人はよく知っていると思いますが、QtQuickでC++オブジェクトを使ってマウスイベントを処理するのはちょっと面倒です.例として、
あとQML部分
マウスイベントを親に渡すには
リファレンスhttp://stackoverflow.com/questions/30281955/catch-mousemoveevent-on-qt5s-qquickitem http://stackoverflow.com/questions/23986201/mouse-events-not-handled-within-qquickitem-inheritor http://stackoverflow.com/questions/18864420/handling-mouse-events-on-a-qquickitemhttp://stackoverflow.com/questions/29772736/qquickpainteditem-mousereleaseevent-gets-only-called-after-doubleclick
QMLマウスイベント処理
まずQMLのマウスイベント処理について,処理されたイベントはC++と同様にclicked,pressed,releaseのように,これ以上述べない.例は次のとおりです.
Rectangle {
id: rect
MouseArea{
anchors.fill: parent //MouseArea Item, , 0X0
onClicked:{
rect.doSomething()
// " ".doSometing()
}
}
}
C++マウスイベント処理
Qt C++マウスイベントは、Qtを使ったことのある人はよく知っていると思いますが、QtQuickでC++オブジェクトを使ってマウスイベントを処理するのはちょっと面倒です.例として、
// main.cpp
#include
#include
#include
class MyItem : public QQuickItem
{
public:
MyItem()
{
// 3 C++ , (C++)
setAcceptHoverEvents(true);
setAcceptedMouseButtons(Qt::AllButtons);
setFlag(ItemAcceptsInputMethod, true);
}
void mousePressEvent(QMouseEvent* event)
{
// , !!!
// QQuickItem::mousePressEvent() event->ignore(), mouseMove mouseRelease
//QQuickItem::mousePressEvent(event);
qDebug() << event->pos();
}
void mouseMoveEvent(QMouseEvent* event)
{
// , !!!
// QQuickItem::mouseMoveEvent() event->ignore(), mouseRelease
//QQuickItem::mouseMoveEvent(event);
qDebug() << event->pos();
}
void mouseReleaseEvent(QMouseEvent* event)
{
// , !!!
//QQuickItem::mouseReleaseEvent(event);
qDebug() << event->pos();
}
// MouseMoveEvent !!!
// ,mouseMoveEvent(QMouseEvent*) 。
void hoverMoveEvent(QHoverEvent* event) {
QQuickItem::hoverMoveEvent(event);
qDebug() << event->pos();
}
};
int main(int argc, char** argv)
{
QGuiApplication app(argc, argv);
QQuickView* view = new QQuickView;
qmlRegisterType("Test", 1, 0, "MyItem");
view->setSource(QUrl(QStringLiteral("qrc:/main.qml")));
view->show();
return app.exec();
}
あとQML部分
import QtQuick 2.4
import QtQuick.Controls 1.3
import Test 1.0
Rectangle {
width: 400; height: 400; visible: true
MyItem { // MouseArea, C++
anchors.fill: parent
}
Button { x: 100; y: 100; text: "Button" }
}
マウスイベントを親に渡すには
Rectangle{
MouseArea{// item pressed
}
MyItem {id: item
MouseArea {onPressed: {
mouse.accepted = false;
}}
}
リファレンスhttp://stackoverflow.com/questions/30281955/catch-mousemoveevent-on-qt5s-qquickitem http://stackoverflow.com/questions/23986201/mouse-events-not-handled-within-qquickitem-inheritor http://stackoverflow.com/questions/18864420/handling-mouse-events-on-a-qquickitemhttp://stackoverflow.com/questions/29772736/qquickpainteditem-mousereleaseevent-gets-only-called-after-doubleclick