تبلیغات
Qt Developer Blog - کلاس های پایه در کیوتی
 
Qt Developer Blog
کیوتی ساده و آسان برای همه
                                                        
درباره وبلاگ

در این وبلاگ کیوتی که مجموعه ای از کلاس ها برای برنامه نویسی دلپذیر تر با سی پلاس پلاس هست آموزش داده میشود
مدیر وبلاگ : سعید دادخواه
نظرسنجی
آموزش ها به چه صورتی باشد






آمار وبلاگ
  • کل بازدید :
  • بازدید امروز :
  • بازدید دیروز :
  • بازدید این ماه :
  • بازدید ماه قبل :
  • تعداد نویسندگان :
  • تعداد کل پست ها :
  • آخرین بازدید :
  • آخرین بروز رسانی :
سلام خدمت دوستان
موضوع امروز کلاس های پایه در کیوتی هستند
کلاس هایی که از QObject ارث میبرند:
هم مبحث مدیریت حافظه خودکار و هم مبحث signal / slot نیاز مند این هست که کلاس های درگیر در این پروسه ها از QObject ارث برده باشند.تمام ویدجت های کیوتی مثل QLineEdit از کلاس QWidget ارث برده اند و این کلاس هم از کلاس QObject پس کلیه کلاس های ویدجت قابل استفاده در مکانیزم signal , slot و memory management هستند.
کلاس های مربوط به layout هم مثل QH/VBoxLayout و  QGridLayout هم از کلاس QObject ارث برده اند.پس این کلاس ها هم در دو مکانیزم بالا میتونند شرکت کنند. کلاس هایی مثل QThread برای برنامه نویسی چند خطی و کلاس QTcpSocket برای برنامه نویسی شبکه با کیوتی هم از کلاس QObject ارث برده اند. به همین دلیل قابل استفاده برای مکانیزم signal , slot هستند.
کلاس هایی که از QObject ارث نمی برند:
اما خوب مسلما همه کلاس ها نیازمند مکانیزم سیگنال و اسلات و مدیریت حافظه خودکار نیستند . پس همه کلاس ها لزوما از QObejct ارث نمی برند.برای مثال یکی از مهمترین اونا کلاس QString هستش که برای کار بارشته در کیوتی تعبیه شده است.که امکان کار با کلیه زبان های موجود در دنیای کامپیوتر رو میده. یعنی شما میتونید توی یه QString یه متن فارسی رو ذخیره و نگهداری کنید.
کلاس های دیگه ای مثل کلاس QColor برای کار با رنگها , کلاس QImage  برای کار با تصاویر و خیلی از کلاس های دیگه  کلاس هایی هستند که از کلاس QObjectم ارث نبرده اند.مدیریت اشیا در این کلاس ها به صورت value-based
 هستش.
ادامه مطلب رو از دست ندین
Implicit sharing(Value-based Memory Management )
کیوتی یه جور دیگه ای برای مدیریت حافظه اشیایی که کلاسشون از QObject ارث نبرده اقدام میکنه ( البته نه همه کلاس ها ) 

این شکل گویای مطلب implicit sharing هستش. کیوتی تضمین میکنه که وقتی از این کلاس هایی که از کلاس QObject ارث نبرده اند استفاده میکنید دو شی با یک محتوا وجود نخواهد داشت.برای مثال  اگر دو رشته جداگانه با یک متن داشته باشیم مسلما  بخشی از حافظه رو بیدلیل از دست داده ایم.برای مثال اگر چند رشته داشته باشیم که همگی حاوی رشته "Hello World" باشند به جای اینکه هر رشته متن مخص به خودش رو داشته باشه ; این یک کپی از این رشته بین تمام اشیای موجود به اشتراک گذاشته میشه.
QString str1 = "Hello, world!";
QString str2 = str1;
str2.replace("world", "Qt");
در کد بالا ما ابتدا یه شی از کلاس QString  به نام str1 ساختیم . این کار باعث میشه رشته "Hello, world" در شی ذخیره بشه  البته به صورت یه reference . در خط بعدی به شی str2 همون مقدار str1 نسبت داده شده . اما چیزی  که در حقیقت اتفاق می افته  اینه که str2 یه رفرنس به str1  رو در اختیار میگیره نه کپی از اونو.چون دقیقا دو شی یکی هستند و نیازی به هدر دادن حافظه نیست.
اما در خط بعدی از تابع replace که برای جایگزینی یه متن با متن داخل یه QString به کار میره استفاده شده که باعث میشه دو شی دیگه یه مقدار یکسان نداشته باشند.قبل از اینکه این تغییر و جایگزینی صورت بگیره کیوتی راه str2 رو از str1 جدا میکنه و در واقع داده ای که در str2 هست مشابه داده str1 نیست.تمام این مراحل از دید برنامه نویس پنهان هست. فایده دیگه اینه که با این کار دیگه مثلا ارسال یه QString به یک تابع هم حافظه زیادی رو هدر نمیده.




نوع مطلب : عمومی، 
برچسب ها : کیوتی، کیوت، Qt، QT، qt، مدیریت حافظه در کیوتی، مدیریت حافظه، implicit sharing،