QTextStream 向文件中写入数据
QTextStream write data in file
我正在学习 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
returns 来自 QFormLayout
的 QWidget *
填充 QLineEdit
(这解释了动态转换)。无论如何,当我将 str
传递给 std::cout
时它工作正常,数据被打印,但是当我将 str
传递给 out
时,它只写入 [= 的第一个字符15=] 在文件中。
我不明白我做错了什么,我真的很感激任何提示。
这一行有问题:str = dynamic_cast<QLineEdit *>(this->getItem(i))->text().toLocal8Bit().data();
dynamic_cast<QLineEdit *>(this->getItem(i))->
可以
->text()
创建临时 QString
.toLocal8Bit()
创建临时 QByteArray
.data()
returns 指向 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
写入时是否报错
我正在学习 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
returns 来自 QFormLayout
的 QWidget *
填充 QLineEdit
(这解释了动态转换)。无论如何,当我将 str
传递给 std::cout
时它工作正常,数据被打印,但是当我将 str
传递给 out
时,它只写入 [= 的第一个字符15=] 在文件中。
我不明白我做错了什么,我真的很感激任何提示。
这一行有问题:str = dynamic_cast<QLineEdit *>(this->getItem(i))->text().toLocal8Bit().data();
dynamic_cast<QLineEdit *>(this->getItem(i))->
可以
->text()
创建临时 QString
.toLocal8Bit()
创建临时 QByteArray
.data()
returns 指向 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
写入时是否报错