gpt4 book ai didi

qt - 鼠标事件未在 QQuickItem 继承者中处理

转载 作者:行者123 更新时间:2023-12-04 13:01:36 33 4
gpt4 key购买 nike

我想用可拖动的 QQuickItems 编写简单的 Qt Quick 应用程序。由于项目中嵌入了 MouseArea,因此项目可以很好地拖动。但问题是鼠标事件不会在虚拟重载函数中触发到 C++ 代码中。如何解决这个问题或者可能有一些我没有找到的例子?

QML 文件:

import QtQuick 2.0
import SimpleMaterial 1.0

Rectangle {
width: 320
height: 480
color: "black"

SimpleMaterialItem {
width: parent.width;
height: parent.height / 3;
color: "steelblue"
MouseArea {
anchors.fill: parent
width: 64
height: 64

drag.target: parent
drag.axis: Drag.XandYAxis
}
}
}

C++类:

class Item : public QQuickItem
{
Q_OBJECT
Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
public:
Item()
{
setFlag(ItemHasContents, true);
setFlag(ItemAcceptsDrops, true);
setFlag(ItemAcceptsInputMethod, true);
setAcceptedMouseButtons(Qt::AllButtons);
}

void mousePressEvent(QMouseEvent * event)
{
qDebug("Press"); // NOT CALLED!
}

public:
QSGNode *updatePaintNode(QSGNode *node, UpdatePaintNodeData *)
{
...
}
};

最佳答案

如果 MouseArea 处理鼠标事件,它不会将事件传递给它的父级。

你需要:

onPressed: {
mouse.accepted = false;
}

在鼠标区域让 SimpleMaterialItem 处理 onPressed 事件。

关于qt - 鼠标事件未在 QQuickItem 继承者中处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23986201/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com