Qt 将鼠标位置写入文件
Qt Writing mouse position to file
我正在使用 QT 编写一个简单的应用程序,它应该将某个小部件内的鼠标位置写入一个文件(写入是在用户双击时)。
情况如下:
- 用户在小部件内双击。
- 在调试中window我可以看到当前的鼠标位置。
- 鼠标位置按预期写入文件。
鼠标位置(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)) {
我正在使用 QT 编写一个简单的应用程序,它应该将某个小部件内的鼠标位置写入一个文件(写入是在用户双击时)。
情况如下:
- 用户在小部件内双击。
- 在调试中window我可以看到当前的鼠标位置。
- 鼠标位置按预期写入文件。
鼠标位置(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)) {