QTextStream(*QFile)构造函数已删除 一般来说我对C++非常陌生,对Qt也很陌生,因此我有个问题:
我有这个密码:QTextStream(*QFile)构造函数已删除 一般来说我对C++非常陌生,对Qt也很陌生,因此我有个问题:,c++,qt,C++,Qt,我有这个密码: if(!logFile.open(QIODevice::ReadOnly)) { QMessageBox::information(0, "error", logFile.errorString()); } else { QTextStream result(&logFile); return result.readAll(); } 它运转良好。 但是,当我尝试返回QTextStream对象而不是QString w/我从文件中读取的所有文本时,会
if(!logFile.open(QIODevice::ReadOnly)) {
QMessageBox::information(0, "error", logFile.errorString());
}
else {
QTextStream result(&logFile);
return result.readAll();
}
它运转良好。
但是,当我尝试返回QTextStream对象而不是QString w/我从文件中读取的所有文本时,会弹出以下错误:
/home/neko/projects/WurmLogparser/wurmlog.cpp:208: error: call to deleted constructor of 'QTextStream'
return result;
^~~~~~
对导致错误的原因进行编码,如下所示:
else {
QTextStream result(&logFile);
return result;
//return result.readAll();
}
当然,在尝试编译第二个版本之前,我会适当地将相关类型更改为QTextStream。请告诉我第二版代码有什么问题?我以与第一部分相同的方式构造QTextStream,但它会产生奇怪的错误
TextStream对象[…]包含所有文本
流不“包含”任何文本。它是从QIODevice
检索文本的一种方法,但它本身并不包含文本
在您的情况下,返回字符串是正确的做法
QTextStream
不可复制。您不能按值返回它。在大多数情况下,返回这样的对象是没有意义的。如果在流上操作,则应将其作为引用参数传递:
void myFunction(QTextStream & stream) { ... }
如果希望返回从文件读取的内容,可以将其作为字符串(如您所做)或原始二进制数据返回:
QByteArray myFunction() {
...
return logFile.readAll();
}
然后可以在字节数组上使用流:
void foo() {
auto data = myFunction();
auto stream = QTextStream(&data);
// use the stream
...
}
为了进一步澄清,QTextStream的复制构造函数(以及=运算符)都是私有的,这就是您无法复制它们的原因:o 库巴(+1:)很好地解释了四处走动的方法