12

テキスト以外のファイルへの書き込みで Qt 4 に問題があります。QByteArray データがあり、特定のディレクトリ「C://MyDir」に「some_name.ext」という名前のファイルに保存したいと考えています。これどうやってするの?内容はテキストではないことに注意してください。

形式は「GIF」で、Qt ではサポートされていません。

QImage mainImage; 
if (!mainImage.loadFromData(aPhoto.data)) 
    return false; 
if (!mainImage.save(imageName, imageFormat.toUtf8().constData())) 
   return false; 

その制限をどうにか回避したい!

4

2 に答える 2

39

QByteArray をファイルに書き込むには:

QByteArray data;

// If you know the size of the data in advance, you can pre-allocate
// the needed memory with reserve() in order to avoid re-allocations
// and copying of the data as you fill it.
data.reserve(data_size_in_bytes);

// ... fill the array with data ...

// Save the data to a file.
QFile file("C:/MyDir/some_name.ext");
file.open(QIODevice::WriteOnly);
file.write(data);
file.close();

Qt 5 (5.1 以降) では、(既存のファイルのデータを変更するのではなく) 新しい完全なファイルを保存するときに、代わりにQSaveFileを使用する必要があります。これにより、書き込み操作が失敗した場合に古いファイルが失われる状況を回避できます。

// Save the data to a file.
QSaveFile file("C:/MyDir/some_name.ext");
file.open(QIODevice::WriteOnly);
file.write(data);
// Calling commit() is mandatory, otherwise nothing will be written.
file.commit();

もちろん、エラーがないかどうかを確認することを忘れないでください。

また、これで質問に答えても、おそらく問題は解決しないことに注意してください。

于 2012-10-20T19:57:31.837 に答える
1

QDataStream を使用してバイナリ データを書き込むことができます。

QFile file("outfile.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);

次に使用します

QDataStream & QDataStream::writeBytes ( const char * s, uint len )

また

int QDataStream::writeRawData ( const char * s, int len )
于 2012-10-20T12:06:30.497 に答える