Qt 将鼠标位置写入文件

Qt Writing mouse position to file

我正在使用 QT 编写一个简单的应用程序,它应该将某个小部件内的鼠标位置写入一个文件(写入是在用户双击时)。

情况如下:

鼠标位置(X 或 Y)小于 100 时的问题。如果位置小于 100,则写入文件的数字始终为 3 位数字。

例如:鼠标在调试 window 中的位置是:34、251,在文件中的位置是 344、251。所以我无法预测实际的 X 位置是 34 还是 344,因为它们都是有效值。

这是负责将数据写入文件的部分。

QByteArray temp1;
char buf[2];
::sprintf(buf, "%d", X);  // X is the mouse x position
temp1.append(buf);
temp1.append(",");
::sprintf(buf, "%d", Y); // Y is the mouse y position
temp1.append(buf);
...
if (tempFile.open(QIODevice::ReadWrite)) {
    QTextStream stream(&tempFile);
    stream << temp1;
}
tempFile.close();

出于某种原因,此代码仅适用于大于 100 的仓位。

谢谢

问题 1

缓冲区太小。

char buf[2];

需要放置多个数字和一个终止 NUL 字节,因为您在这里使用 sprintf:

::sprintf(buf, "%d", X);

覆盖数组末尾的结果是 undefined behavior

所以你需要增加数组的大小来修复它。

问题2

  • 文件以读写模式打开
  • 写入X和Y值
  • 文件已关闭

下次写入值时调用相同的操作。读写模式不会删除文件的现有内容。例如,如果你写一次

128,1024 

然后下次写位置:60,30 时,它看起来像这样:

60,3024

此问题的一个可能解决方案是应用 Truncate 模式。

if (tempFile.open(QIODevice::ReadWrite | QIODevice::Truncate)) {