سؤال

أواجه مشكلة في قراءة وكتابة بيانات Qbytearray إلى ملف.

هدفي هو حفظ بيانات qpixmap في qbytearray وحفظ qbytearray إلى ملف (مع القدرة على قراءة هذا Qbytearray مرة أخرى من الملف وإلى qpixmap). أريد استخدام التعليمات البرمجية التالية من وثائق qpixmap:

     QPixmap pixmap(<image path>);  
     QByteArray bytes;
     QBuffer buffer(&bytes);
     buffer.open(QIODevice::WriteOnly);
     pixmap.save(&buffer, "PNG"); // writes pixmap into bytes in PNG format

بعد كتابة المخزن المؤقت لملف، أريد أن أكون قادرا على استرداد QBYTearrray وتحميله مرة أخرى إلى وظيفة qpixmap باستخدام وظيفة qpixmap :: loadfromdata ().

واسمحوا لي أن أعرف ما إذا كان هناك حاجة إلى أي توضيح آخر (أنا منفتح على النهج البديلة كذلك، أحتاج فقط إلى أن أكون قادرا على قراءة وكتابة qpixmap إلى ملف! :))؛

هل كانت مفيدة؟

المحلول

بدا الأمر وكأنه طريق طويل حقا للذهاب إلى القيام بذلك (لكن تعليقك يشرح أفضل):

للكتابة:

QFile file("yourFile.png");
file.open(QIODevice::WriteOnly);
pixmap.save(&file, "PNG");

للقراءة:

QPixmap pixmap;
pixmap.load("yourFile.png");

QBuffer رائع عندما تحتاج QIODevice وتريد الاحتفاظ بها في الذاكرة، ولكن إذا كنت في الواقع الخروج إلى القرص، فهذا خطوة وسط غير ضرورية.

تعديل:

لكتابة PixMaps، وغيرها من الأشياء، إلى ملف واحد أوصي باستخدامه qdataststream.

للكتابة:

QFile file("outfile.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
out << QString("almost any qt value object")
    << yourQPixMap << yourQList /* << etc. */;

ثم، يمكنك القيام بالمثل في القراءة:

QFile file("infile.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
in >> firstQString >> yourQPixmap >> yourList /* >> etc. */;

ستحتاج إلى التأكد من أنك تقرأ في نفس الكائنات كما كتبتها. من أجل تنقذ نفسك الصداع التوافق في المستقبل، قم بتعيين إصدار QdatastReam بشكل صريح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top