c++ - 无法在QQuickWindow中接收精确的笔输入

标签 c++ qt qml

我找不到在QML中处理手写笔输入的方法,因此我将QQuickWindow子类化,并将其设置为QML应用程序中的根窗口:

#ifndef TABLETWINDOW_H
#define TABLETWINDOW_H

#include <QObject>
#include <QQuickWindow>

class TabletWindow : public QQuickWindow
{
    Q_OBJECT
public:
    TabletWindow();
    void tabletEvent(QTabletEvent* event) override{
        qDebug() << event->posF();
    }

#endif // TABLETWINDOW_H


调试输出显示,数位板事件的位置没有 double (例如QPoint(200,300)。然后,我使用QMainWindow和Qt小部件测试了同一件事:
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(){}
    void tabletEvent(QTabletEvent* event){
        qDebug() << event->posF();
    }

};

使用小部件方法,事件确实具有 double (因此更加精确)。我对此感到有些困惑,因为我认为QQuickWindowQMainWindow都是QWindow的子类,因此它们的虚函数签名之间应该没有太大区别。
我已经在Windows 10上使用Qt 5.12对此进行了测试

最佳答案

在对此进行调查之后,我注意到使用 QTabletEvent::highResGlobalX QTabletEvent::highResGlobalY 可以获得 double 的坐标。这是非常奇怪和烦人的事情,因为我不得不使用QWindow::mapFromGlobal(仅对QPoint进行操作),因此我必须获取坐标的整数部分(使用std::modf),然后构造传递一个QPoint并创建一个新的QPointF,并添加坐标的小数部分。

关于c++ - 无法在QQuickWindow中接收精确的笔输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59581089/

相关文章:

javascript - 如何将信号从 javascript 发送到 qml

c++ - Qt 的 MinGW、Code::Blocks 的 MinGW 和 MinGW 本身有什么区别吗?

c++ - 为什么我不能分配这个 Qt 属性?

c++ - 代码/文本编辑器不需要实际的程序本身吗?

c++ - 无法确定 Opengl 绘制的平面方向

javascript - 使用表格 API 和 XMLHttpRequest 将请求正文发送到 google 表格

c++ - Qt C++ - 构造带双引号的 QStringlist

c++ - 从 C++ 访问 ListElement (QML) 颜色

c++ - 为什么将内存分配给 char 指针不会截断 char 序列

c++ - boost:bind 和 io_service 在两个不同的类中