我正在使用QT编写一个简单的应用程序,该应用程序应将鼠标在某些小部件内的位置写入文件(该操作是在用户双击时进行的)。
情况如下:
鼠标位置(X或Y)小于100时出现的问题。如果位置小于100,则写入文件的数字始终为3位数字。
例如:鼠标在调试窗口中的位置是: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的位置。
谢谢
答案 0 :(得分:0)
问题1
缓冲区太小。
char buf[2];
由于您在此处使用sprintf,因此需要放置多个数字和一个终止NUL字节:
::sprintf(buf, "%d", X);
在数组末尾写操作将得到undefined behavior。
因此,您需要增加数组的大小才能对其进行修复。
问题2
下次写入值时,将调用相同的操作。 ReadWrite模式不会删除文件的现有内容。例如,如果您只写一次
128,1024
,然后下一次您写位置:60,30看起来像这样:
60,3024
解决此问题的一种可能方法是应用Truncate
模式。
if (tempFile.open(QIODevice::ReadWrite | QIODevice::Truncate)) {