簡體   English   中英

QTextStream(* QFile)構造函數已刪除

[英]QTextStream(*QFile) constructor is deleted

一般來說,我對C ++和Qt都是新手,因此我有一個問題:

我有以下代碼:

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檢索文本的一種QIODevice ,但是它本身不包含文本。

在您的情況下,返回字符串是正確的事情。

QTextStream是不可復制的。 您不能按值返回它。 在大多數情況下,返回這樣的對象沒有任何意義。 如果要在流上操作,則應將其作為參考參數傳遞:

void myFunction(QTextStream & stream) { ... }

如果您希望返回從文件讀取的內容,則可以將它們作為字符串(如您所做的那樣)或作為原始二進制數據返回:

QByteArray myFunction() {
  ...
  return logFile.readAll();
}

然后,您可以在字節數組上使用流:

void foo() {
  auto data = myFunction();
  auto stream = QTextStream(&data);
  // use the stream
  ...
}

為了進一步說明,QTextStream的復制構造函數(以及=運算符)都是私有的,這就是您不能復制它們的原因:

解決方法,庫巴(+1 :)很好地解釋了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM