0

QByteArray ごとに 1 つずつ、約 4 つの QDataStreams の配列を作成しようとしています。
状況は次のとおりです。

struct dataform{  
    //other members  
    QDataStream block;  
}  
dataform gd[4];  
//initialize data for each item in gd[]  
QDataStream out[4];  
for (int i = 0; i < 4; ++i){  
    out[i] = QDataStream(&gd[i].block, QIODevice::WriteOnly);  
}  

コンパイラは戻ります

「QDataStream& QDataStream::operator=(const QDataStream&)」はプライベートです

私も初期化しようとしました

out[i](&gd[i].block, QIODevice::WriteOnly);  

無駄に; コンパイラが返す

エラー: '(QDataStream) (QByteArray*, QIODevice::OpenModeFlag)' の呼び出しに一致しません</p>

これを行う方法はありますか、それとも配列を QDataStream ポインターの配列にし、QDataStreams を動的に割り当て、ストリームに書き込むたびに(プログラム全体で数百回) ストリームを参照する必要がありますか?

4

1 に答える 1

2

ポインターを使用しなくてもこれを行うことができますが、構造体にQBuffersを追加する必要がありますdataform

次のようなもの(テストされていません):

struct dataform{  
    //other members  
    QBuffer buffer;
    QDataStream block;  
}  

dataform gd[4];  
QDataStream out[4];  
for (int i = 0; i < 4; ++i){  
    dg[i].buffer.setBuffer(&gd[i].block);
    dg[i].buffer.open(QIODevice::WriteOnly);  
    out[i].setDevice(&dg[i].buffer);
}  

( QDataStreama を取るコンストラクタは、ドキュメントに従って内部的にaQByteArrayを使用します。)QBuffer

于 2012-04-29T13:49:11.847 に答える