我找不到在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 (因此更加精确)。我对此感到有些困惑,因为我认为
QQuickWindow
和QMainWindow
都是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/