我已经加入onClick和onDoubleClick处理程序,在QML项目,但两个事件得到当我双击该地区执行.我不知道它是否与检查点击是否是由鼠标右键生成有关.放置代码的顺序也不会影响问题.
MouseArea {
id: idModuleMouseDebug;
parent: repeaterDelegate;
anchors.fill: parent;
acceptedButtons: Qt.LeftButton | Qt.RightButton
onDoubleClicked: {
if(mouse.button == Qt.RightButton) {
console.log("Double Click");
}
}
onClicked: {
if(mouse.button == Qt.RightButton) {
console.log("Single Click");
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
您应该使用单击阈值,如下所示:
{
function singleClick(){
print("Single click")
}
function dblClick(){
print("Double Click")
}
MouseArea {
id: idModuleMouseDebug;
parent: repeaterDelegate;
anchors.fill: parent;
acceptedButtons: Qt.LeftButton | Qt.RightButton
Timer{
id:timer
interval: 200
onTriggered: singleClick()
}
onClicked: {
if(mouse.button == Qt.RightButton) {
if(timer.running)
{
dblClick()
timer.stop()
}
else
timer.restart()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如 @cdonts 所说,这也是小部件世界中的预期行为:
#include <QtWidgets>
class Widget : public QWidget
{
public:
Widget() {}
protected:
void mousePressEvent(QMouseEvent *) {
qDebug() << "press";
}
void mouseReleaseEvent(QMouseEvent *) {
qDebug() << "release";
}
void mouseDoubleClickEvent(QMouseEvent *) {
qDebug() << "double click";
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)
输出:
press
release
double click
release
Run Code Online (Sandbox Code Playgroud)
想想你的预期行为将如何实施。为了在最终是双击时不发出单击,您需要推迟发出单击,直到双击延迟/阈值过去,如果没有第二次单击,您必须人为地延迟单击事件。这会是一团糟。