>> الصفحة الرئيسية >> دروس متقدمة >> الإدخال والإخراج لبيانات الفئات

الأقسام الرئيسية

 التنصيب والاعداد التنصيب والاعداد
 دروس متقدمة دروس متقدمة
 سلسلة دروس للمبتدئين سلسلة دروس للمبتدئين
 اساسيات لغة سي++ اساسيات لغة سي++
 مقالات ZetCode مقالات ZetCode
 

جديد الدروس

 الوحدة QtUiTools (واجهة المستخدم ديناميكية التوليد)
التاريخ 04/07/2009 الوحدة QtUiTools (واجهة المستخدم ديناميكية التوليد)
 Qt and Phonon
التاريخ 04/07/2009 Qt and Phonon
 تتمة الرسائل ومربعات الحوار في qt
التاريخ 04/07/2009 تتمة الرسائل ومربعات الحوار في qt
 مدخل الى xml في Qt
التاريخ 04/07/2009 مدخل الى xml في Qt
 الإدخال والإخراج لبيانات الفئات
التاريخ 04/07/2009 الإدخال والإخراج لبيانات الفئات
 

الإدخال والإخراج لبيانات الفئات

لسلام عليكم ورحمة الله وبركاته

الإدخال والإخراج لبيانات الفئات

عندما تريد حفظ متغيرات من نوع "أ" في ملف ومن ثم تقرأها في وقت آخر أو حين تريد
تبادل بيانات من نوع "أ" عبر الشبكة فإنك بحاجة الى نقل البيانات الثنائية بطريقة
تسهل عليك التعامل معها وتوفر لك الوقت...

فمثلا في الفئات QFont و QColor و ...... الخ تم توفير المعاملين

  1. QDataStream & operator<< ( QDataStream & s, const QFont & font )
  2.  
  3. (QDataStream & operator>> ( QDataStream & s+, QFont & font
الأول للكتابة من الفئة الى ملف او الى QByteArray او QIODevice او .... الخ
والثاني للقراءة من ملف أو من QByteArrayاو QIODevice او .... الخ .

مثال

  1. QFont font1,font2;
  2.  
  3.  
  4. QDataStream ds(&ba,QIODevice::WriteOnly);
  5.  
  6. QDataStream ds2(&ba,QIODevice::ReadOnly);
  7.  
  8. ds<<font1;
  9.  
  10.  
  11. ds2>>font2;


وبالتأكيد البيانات التي يتم حفظها بيانات ثنائية أي لو أنك حفظتها على ملف فإنه
ملف ثنائي ...

والهدف الآن هو كيف تقوم أنت ببناء أسلوب أكثر ديناميكية في الإدخال والإخراج
للفئات التي قمت أنت بتصميمها ...

خطوات العمل

1- بناء الفئة

2- التصريح عن الفئة ضمن metaType


3- بناء معاملات الإدخال والإخراج

4- تسجيل الفئة ضمن meta type stream operators

أولا بناء الفئة:-

  1. class A{
  2.  
  3. public:
  4.  
  5. A(){}
  6.  
  7. QString name;
  8.  
  9. qint32 age;
  10.  
  11.  
  12. };


ثانيا التصريح عن الفئة ضمن metaType :-

  1. Q_DECLARE_METATYPE(A);


ثالثا بناء معاملات الإدخال والإخراج :-

  1. QDataStream &operator<<(QDataStream &out, const A &a){
  2.  
  3. out<<a.name<<(qint32)a.age;
  4.  
  5. return out;
  6.  
  7. }
  8.  
  9. QDataStream &operator>>(QDataStream &in, A &a){
  10.  
  11. in>>a.name>>a.age;
  12.  
  13. return in;
  14.  
  15.  
  16. }


رابعا تسجيل الفئة ضمن meta type stream operators :-

  1. qRegisterMetaTypeStreamOperators<A>("A");


والآن أصبح بإمكانك القراءة والكتابة مع الفئة A بكل يسر وسهولة سواء مع الملفات او
القراءة والكتابة عبر الشبكة أو حتى كمتغير .QByteArray

مثال شامل:-

  1. #include <QtCore>
  2.  
  3. class A{
  4.  
  5. public:
  6.  
  7. A(){}
  8.  
  9. QString name;
  10.  
  11. qint32 age;
  12.  
  13. };
  14.  
  15. Q_DECLARE_METATYPE(A);
  16.  
  17. QDataStream &operator<<(QDataStream &out, const A &a){
  18.  
  19. out<<a.name<<(qint32)a.age;
  20.  
  21. return out;
  22.  
  23. }
  24.  
  25. QDataStream &operator>>(QDataStream &in, A &a){
  26.  
  27. in>>a.name>>a.age;
  28.  
  29. return in;
  30.  
  31. }
  32.  
  33. int main(int argc, char *argv[])
  34.  
  35. {
  36.  
  37. QCoreApplication app(argc, argv);
  38.  
  39. qRegisterMetaTypeStreamOperators<A>("A");
  40.  
  41. A from,to;
  42.  
  43. from.name="mohammed alabdaly";
  44.  
  45. from.age=20;
  46.  
  47.  
  48. QDataStream ds(&ba,QIODevice::WriteOnly);
  49.  
  50. QDataStream ds2(&ba,QIODevice::ReadOnly);
  51.  
  52. QMetaType::save(ds,qMetaTypeId<A>(),&from);//كتابة بيانات المتغير
  53.  
  54. QMetaType::load(ds2,qMetaTypeId<A>(),&to);//قراءة بيانات المتغير
  55.  
  56. qDebug()<<QObject::tr("%1,%2").arg(to.name).arg(to.age);
  57.  
  58.  
  59. return app.exec();

إسم الكاتب تاريخ الإضافة التقييم / المقيمين زيارات الدرس
مصفوفة 04/07/2009 0 / 0 724

الأكثر زيارة

 دليل تنصيب اطار عمل Qt ، حزمة MinGW ، بيئة التطوير QDevelop
الزيارات 2849 دليل تنصيب اطار عمل Qt ، حزمة MinGW ، بيئة التطوير QDevelop
 اعداد وتنصيب Qt
الزيارات 2627 اعداد وتنصيب Qt
 دليل تنصيب اطار عمل Qt ، حزمة MinGW ، بيئة التطوير Eclipse
الزيارات 2576 دليل تنصيب اطار عمل Qt ، حزمة MinGW ، بيئة التطوير Eclipse
 التطوير السريع للتطبيقات Rapid Application Development
الزيارات 2420 التطوير السريع للتطبيقات Rapid Application Development
 C++ In a Nutshell
الزيارات 2293 C++ In a Nutshell
 

الأكثر تصويتـا

 اعداد وتنصيب Qt
نتيجة التصويت 40 من 5 شخص اعداد وتنصيب Qt
 تخطيط البرامج Program Layout
نتيجة التصويت 40 من 6 شخص تخطيط البرامج Program Layout
 الدرس الاول : كتابة اول برنامج
نتيجة التصويت 29 من 3 شخص الدرس الاول : كتابة اول برنامج
 التطوير السريع للتطبيقات Rapid Application Development
نتيجة التصويت 29 من 4 شخص التطوير السريع للتطبيقات Rapid Application Development
 الدرس الثالث:تعريف slot جديدة
نتيجة التصويت 27 من 3 شخص الدرس الثالث:تعريف slot جديدة
 
 

سكربت story-script v1 برمجة bwady.com تطوير SudaNix