نمایش نتایج 1 تا 4 از 4

نام تاپیک: سریالایز کردن

  1. #1

    سریالایز کردن

    سلام
    چه جوری میشه یه کلاس رو تو حافظه سریالایز کرد.
    من می خوام یه کلاس رو مثلا به QByteArray تبدیل کنم و بعد روی شبکه بفرستم

  2. #2

    نقل قول: سریالایز کردن

    من با QVariant کلاس رو تیدیل کردم
    اما مقداری که تو QByteArray هست رو که دوباره بر میگردونم به کلاس اولیم انگار هیچی توش نبوده


    MyClass obj(1.0f,100.0f,5.0f);
    //this->ui->pushButton->setText(QVariant(obj.x).toString());
    QVariant vs;
    vs.setValue(obj);
    QByteArray vsb=vs.toByteArray();
    //QString s=vs.toString();
    qDebug("Data=");
    //qDebug(vsb.data());
    QVariant testVar( vsb );
    MyClass testVs = testVar.value< MyClass >();
    this->ui->pushButton->setText(QVariant(testVs.x).toString());


    اگه رشته باشه خالیه اگه عدد باشه صفر بر میگردونه

  3. #3

    نقل قول: سریالایز کردن

    تصور میکنم علت وجود و کاربرد QVariant چیز دیگری باشه.
    درمورد متد toByteArray هم ظاهرا در رفرنس نوشته که درصورتیکه نوع داده از ابتدا QByteArray یا QString باشه اون رو دوباره به این فرمت تبدیل میکنه.
    فکر میکنم شما تصور غلطی درمورد QVariant دارید و مسیر کاملا غلطی رو رفتید.

    اونطور که درمورد سریالایز کردن اشیاء کیوت در اینترنت الان جستجو کردم و نتایجی رو دیدم، کلاس QDataStream به مفهوم مورد نظر خیلی نزدیک تر هست.
    و از رفرنس و منابع دیگر بنظر میرسه که تنها انواع استاندارد سی++ و چند نوع محدود از کلاسهای کیوت رو ساپورت میکنه، ولی نه یک کلاس که شما خودتون تعریف کرده باشید و نه بیشتر کلاسهای کیوت رو.
    در این صفحه انواع ساپورت شده توسط این کلاس رو میتونید ببینید:
    http://doc.trolltech.com/4.5/datastreamformat.html
    اینم بخشی از توضیحات رفرنسش:

    The QDataStream class implements the serialization of C++‎‎‎'s basic data types, like char, short, int, char *, etc. Serialization of more complex data is accomplished by breaking up the data into primitive units.

    ضمنا یک مزیت و راحتی این کلاس اینه که عملیات کاملا مستقل از هر پلتفرمی انجام میشه.

    پس اون چیزی که شما دنبالش هستید به اون صورت کلی بنظر میرسه در کیوت وجود نداره.
    اما اگر بخواید فکر میکنم میتونید از امکانات کتابخانه های دیگر مخصوص اینکار در سی++ استفاده کنید.
    کلا کیوت چنین چیزی نداره به اون صورتی که شما مد نظر دارید و در بعضی زبانها و فریمورک های دیگه هست (فکر میکنم در پایتون این امر استاندارد و خیلی سرراست هست). منظورم سریالایز کردن تمام یا بیشتر کلاسها هست.
    اصلا سریالایز کردن درمورد خیلی اشیاء کیوت ظاهرا از بعضی جنبه های اساسی بی معنا یا مشکل ساز هست طبق متنی که جای دیگه ای خوندم، و ظاهرا به همین علت عمدا از امکان سریالایز شدن خیلی از اشیاء کیوت جلوگیری شده (با طراحی و تعیین سطوح دسترسی محدود کننده در متدهای مربوطهء اون کلاسها). بنابراین توصیه میکنم کاربرد مورد نظر خودتون رو از راه دیگری پیاده کنید. یعنی شیء رو در سمت دیگه خودتون در کد بسازید، منتها پارامترها و خصوصیات لازم اون رو اگر از انواع پایه ای باشن میتونید سریالایز کنید و بفرستید (با همین QDataStream میتونید اینکار رو بکنید). مثلا همون اعداد اعشاری رو که برای ساخت شیء مورد نظر از کلاس خودتون بهش پاس کردید و نیز انواع رشته ای و آرایهء بایتی رو بنظرم چه از نوع استاندارد سی++ و چه از انواع کیوت میتونید سریالایز کرده و ارسال کنید و طرف دیگه بازیابی کنید و البته همچنین اون تعداد محدود از کلاسهای کیوت رو.
    پس به اون فرم کلی درمورد تمام کلاسها و بخصوص کلاسهای غیرکیوت امکان سریالایز کردن از طریق کیوت وجود نداره و ضمنا فکر میکنم که QVariant هم اصلا برای اینکار نیست.

    این تاجایی که من تونستم کمکتون کنم.
    برای کمک بیشتر میتونید به این آدرس مراجعه کنید: http://www.qtcentre.org/forum/
    آخرین ویرایش به وسیله eshpilen : یک شنبه 27 تیر 1389 در 17:52 عصر

  4. #4

    نقل قول: سریالایز کردن

    مرسی
    بله امروز که داشتم مستندات کیوتی رو می خوندم همین مطلبی که در موردQVariant گفته بودید رو دیدم
    برا همین هم دارم یه کلاس شبیه همون چیزی که مثلا تو دات نت در مورد اکس ام ال سریالایز هست رو تو کیوت پیاده سازی می کنم

    بازم ممنون از راهنمایتون

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •