我不知道为什么,但是我无法运行QTemporaryFile的最简单的例子......我的真正意图是在将数据处理之后将QAudioInput中的数据写入临时文件。
尝试几次后,我意识到.read(),. readLine(),. readAll()或.write()都没有任何影响......错误字符串总是“未知错误”,它既不起作用对于QFile或QTemporaryFile。
#include <QCoreApplication>
#include <QTemporaryFile>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTemporaryFile tf;
tf.open();
tf.write("Test");
QTextStream in(&tf);
qDebug() << "Testprogramm";
qDebug() << tf.isOpen();
qDebug() << tf.errorString();
qDebug() << in.readLine();
qDebug() << tf.readAll();
tf.close();
return a.exec();
}
调试帖子:
Testprogramm true "Unknown error" "" ""
提前谢谢!
答案 0 :(得分:0)
您需要将文件指针移回文件的开头。当文件没有流时,或者当存在流时,必须在文件本身上完成此操作。另外 - QFile
是一个管理文件资源的正确C ++类。无需手动关闭文件。 QFile::~QFile
做到了这一点。
以下工作正常:
#include <QtCore>
int main() {
auto line = QLatin1String("Test");
QTemporaryFile tf;
tf.open();
Q_ASSERT(tf.isOpen());
tf.write(line.data());
tf.reset(); // or tf.seek(0)
QTextStream in(&tf);
Q_ASSERT(in.readLine() == line);
in.seek(0); // not in.reset() nor tf.reset()!
Q_ASSERT(in.readLine() == line);
}
以上还演示了适用于sscce - 样式代码的以下技术:
包含整个Qt模块。请记住,模块包含它们的依赖关系,即#include <QtWidgets>
本身就足够了。
在没有必要的情况下缺少main()
个参数。
在没有必要的情况下缺少QCoreApplication
个实例。如果您需要应用程序实例,但是没有应用程序实例,您将获得明确的运行时错误。
使用断言来指示预期为真的条件 - 这样您就不需要查看输出以验证输出是否正确。
使用QLatin1String
而不是QStringLiteral
,其中需要将ASCII字符串与C字符串和QString
进行比较。隐式ASCII转换可能是错误的来源而且不鼓励。
QLatin1String
是一个常量(只读)包装器,用于包装C字符串文字 - 因此不需要line
另外const
,尽管在实际中您希望在此处遵循项目风格指南的项目。