gpt4 book ai didi

c++ - QTextStream 向文件中写入数据

转载 作者:行者123 更新时间:2023-11-28 05:49:08 26 4
gpt4 key购买 nike

我正在学习 QtCreator,但在向文件中写入数据时遇到了问题。这是一些代码:

char    *str;
int i = 1;
QFile outFile("path/to/file/out.txt");
outFile.open(QIODevice::ReadWrite);
QTextStream out(&outFile);

while (i < rows * 2) {
str = dynamic_cast<QLineEdit *>(this->getItem(i))->text().toLocal8Bit().data();
std::cout << str << std::endl;
out << str << "\n";
i += 2;
}

getItem 从填充有 QLineEditQFormLayout 返回一个 QWidget *(这解释了动态转换)。无论如何,当我将 str 传递给 std::cout 时,它工作正常,数据被打印出来,但是当我将 str 传递给 时out,它只写入文件中 str 的第一个字符。
我不明白我做错了什么,我真的很感激任何提示。

最佳答案

这一行有问题:str = dynamic_cast<QLineEdit *>(this->getItem(i))->text().toLocal8Bit().data();

dynamic_cast<QLineEdit *>(this->getItem(i))->可以
->text()创建临时 QString
.toLocal8Bit()创建临时 QByteArray
.data()返回指向 QByteArray 的内部数据的指针

一旦该行通过,QByteArray 就会被销毁,并且您有一个悬空指针。 str指向无效数据。

之后你对这个指针所做的一切(除了让它指向其他地方)都是未定义的行为。

尝试使用这样的东西:

int     i = 1;
QFile outFile("path/to/file/out.txt");
outFile.open(QIODevice::ReadWrite);
QTextStream out(&outFile);
while (i < rows * 2)
{
QLineEdit* lineEdit = dynamic_cast<QLineEdit *>(this->getItem(i));
if (lineEdit)
{
QByteArray str = lineEdit->text().toLocal8Bit();
std::cout << str.data() << std::endl;
out << str.data() << "\n";
i += 2;
}
else
{
std::cerr << "Item at " << i << " is no QLineEdit*" << std::endl;
}
}
out.close();

另请检查是否QFile是否实际开放QTextStream写的时候报一些错误。

关于c++ - QTextStream 向文件中写入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35632076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com