Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Persian
  4. کپی کردن یک شی از کلاس QObject
Forum Updated to NodeBB v4.3 + New Features

کپی کردن یک شی از کلاس QObject

Scheduled Pinned Locked Moved Persian
8 Posts 3 Posters 3.8k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    alizadeh91
    wrote on last edited by
    #1

    p{direction:rtl;text-align:right;}. سلام بچه ها

    p{direction:rtl;text-align:right;}. همینطور که همه میدونید کلاس QObject به دلیل یه سری مسائل مربوط یه meta-object متدهای copy constructor and copy assignment را غیر فعال کرده است. حال این سوال مطرحه که چه راه حلی برای کپی گرفتن از شی ایی که از QObject مشتق شده است پیشنهاد میکنید؟ فرض کنید نوشتن یه متد مثل clone به دلیل وجود propertyهای زیاد سخت باشه!!!

    "QtExperts":http://www.qte.ir/?ref=53708be3da7e53e0c7a42c78cc010039

    1 Reply Last reply
    0
    • M Offline
      M Offline
      mohsen
      wrote on last edited by
      #2

      p{direction:rtl;text-align:right;}. حتی اگر copyconstructor رو هم باز میذاشت به دردت نمیخورد چون copyconstructor یه bitwise copy انجام میده و فکر نمیکنم همون چیزی باشه که تو بخوای.

      p{direction:rtl;text-align:right;}. به نظر من حتی اگر کلاسی هم مشتق بشه بازم همون مشکلات رو خواهد داشت. بخاطر همین بهترین راه اینه که یک فانکشن clone بسازی و یک شیء جدید ایجاد کنی و دونه دونه مقادیر رو بهش set کنی. در غیر اینصورت حتی اگه deep copy هم باشه بازم مطمئنم که مشکلات خواهد داشت.

      "QtExperts":http://www.qte.ir/?ref=a335c06427c28f59cd09e729197f1ffd

      1 Reply Last reply
      0
      • A Offline
        A Offline
        alizadeh91
        wrote on last edited by
        #3

        p{direction:rtl;text-align:right;}. ممنون محسن جان :)

        "QtExperts":http://www.qte.ir/?ref=dae2de426bec07048213b8e3c52d6240

        1 Reply Last reply
        0
        • S Offline
          S Offline
          soroush
          wrote on last edited by
          #4

          p{direction:rtl;text-align:right;}. اپراتور کپی و سازندهٔ کپی به‌خاطر تعریف ماکروی Q_DISABLE_COPY به‌شکل private تعریف میشن. این ماکرو خودش توسط ماکروی Q_OBJECT تعریف میشه.

          p{direction:rtl;text-align:right;}. این به این معنی نیست که کلاس‌های مشتق‌شده از QObject کپی نداشته باشن. در واقع تمامی کلاس‌های داخلی کیوت، اپراتور = و copy constructor رو به صورت private تعریف کردن. این به این معنی نیست که هر کلاس مشتق شده از QObject که ماکروی Q_OBJECT رو پیاده کرده، مجبور باشه سازندهٔ کپی‌ش رو به صورت خصوصی اعلان کنه.
          مثلا:

          @
          class QOBJ : public QObject
          {
          Q_OBJECT
          public:
          explicit QOBJ(QObject *parent = 0);
          QOBJ(const QOBJ& other);
          };

          QOBJ::QOBJ(const QOBJ &other):
          QObject(other.parent())
          {
          }

          int main(int argc, char *argv[])
          {
          QCoreApplication a(argc, argv);
          QOBJ x;
          QOBJ y(x);

          return a.exec();
          

          }
          @

          p{direction:rtl;text-align:right;}. به‌خوبی کامپایل میشه و کار می‌کنه. مشکل اینه که یه این کار از نظر طراحی درست نیست. وقتی داخل کد چیزی شبیه x=y; فراخوانی میشه، چه بلایی سر سیگنال‌ها و اسلات‌های x و y میاد؟ فرض کلی در این مورد وجود نداره. مخصوصا وقتی وراثت در میان باشه. کلاس‌های QObject به هیچ وجه کلاس‌های داده نیستن. نباید برای این استفاده ازشون مشتق کرد. تنها در صورتی اشتقاق از QObject و پیاده‌سازی ماکروی Q_OBJECT لازمه که بخوایم از سیگنال‌ها و اسلات‌ها استفاده کنیم. وقتی می‌خوایم از سیگنال و اسلات استفاده کنیم، کپی کردن زیاد معنی پیدا نمی‌کنه.
          با همهٔ این‌ها بازم پیاده‌سازی کپی (چه به صورت اپراتور، چه به صورت تابع) مشکل ساختاری نداره.

          [quote author="Mohsen" date="1371445484"]p{direction:rtl;text-align:right;}. حتی اگر copyconstructor رو هم باز میذاشت به دردت نمیخورد چون copyconstructor یه bitwise copy انجام میده و فکر نمیکنم همون چیزی باشه که تو بخوای.
          [/quote]

          p{direction:rtl;text-align:right;}. bitwise copy چیه؟

          1 Reply Last reply
          0
          • M Offline
            M Offline
            mohsen
            wrote on last edited by
            #5

            p{direction:rtl;text-align:right;}. توی bitwise copy پوینتر ها فقط آدرسشون کپی میشه نه اینکه کل آبجکت.

            "QtExperts":http://www.qte.ir/?ref=16ea7c9a902c2117dce2cafa1402f380

            1 Reply Last reply
            0
            • S Offline
              S Offline
              soroush
              wrote on last edited by
              #6

              [quote author="Mohsen" date="1371528144"]p{direction:rtl;text-align:right;}. توی bitwise copy پوینتر ها فقط آدرسشون کپی میشه نه اینکه کل آبجکت.

              "QtExperts":http://www.qte.ir/?ref=16ea7c9a902c2117dce2cafa1402f380[/quote]

              p{direction:rtl;text-align:right;}. آها :D ما بهش میگیم Shallow copy
              "+":http://en.wikipedia.org/wiki/Object_copy#Shallow_copy

              1 Reply Last reply
              0
              • M Offline
                M Offline
                mohsen
                wrote on last edited by
                #7

                p{direction:rtl;text-align:right;}. آره همونه !http://www.qtexperts.ir/stable/smiley/curl-lip.png(Curl Lip)!

                "QtExperts":http://www.qte.ir/?ref=93783489d54768341c97598df2cd1e0e

                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  alizadeh91
                  wrote on last edited by
                  #8

                  p{direction:rtl;text-align:right;}. ممنون بچه ها از مطالب خوبتون :)

                  "QtExperts":http://www.qte.ir/?ref=27be224c9da52d888dee6cf02b43d6b5

                  1 Reply Last reply
                  0

                  • Login

                  • Login or register to search.
                  • First post
                    Last post
                  0
                  • Categories
                  • Recent
                  • Tags
                  • Popular
                  • Users
                  • Groups
                  • Search
                  • Get Qt Extensions
                  • Unsolved