ورود

View Full Version : سوال: در مثال زیر Qapplication چرا درون تابع main اینگونه تعریف شده است؟



complexcoding
یک شنبه 19 شهریور 1391, 00:20 صبح
سلام
در مثال زیر Qapplication چرا همانند QLabel درون تابع main تعریف نشده است؟ و با اجرای خط 8 چه کاری انجام می شود؟

92564

حامد مصافی
یک شنبه 19 شهریور 1391, 22:58 عصر
اینها دو نوع تعریف در C++ هستند که متغیر‌ها را در هیپ و استک ایجاد می‌کنند که خود بحث مفصلیست. برای اطلاعات بیشتر همین فاروم را جستجو کنید.
برنامه‌نویس می‌توانست لیبل را هم به این صورت تعریف کند:


QLabel label;
label.show();

که در این حالت خاص مشکلی پیش نمی‌آمد. اما متغیر هایی که در استک و با نام خود کلاس (بدون اشاره‌گر)‌ساخته می‌شوند در پایان بلاک نابود می‌شوند. به همین دلیل ویدجت‌های روی فرم را در کلاس مشتق شده از پنجره به صورت اشاره‌گر تعریف می‌کنند.

متد exec یک EventLoop را اجرا می‌کند که تا زمانی که برنامه بسته نشده پایدار است. علت این است که اگر تابع main به انتها برسد برنامه ما بسته خواهد شد اما متد exec اطمینان حاصل می‌کند تابع main تا زمانی که پنجره بازی وجود دارد به انتها نرسد. در واقع تا زمانی که label بسته نشود کنترل برنامه از خط ۸ عبور نخواهد کرد. این متد یک عدد را برمی‌گرداند تا به استفاده از return به سیستم‌عامل برگردانده می‌شود. گر این مقدار صفر باشد سیستم‌عامل اینگونه تصور می‌کند برنامه ما بدون خطا اجرا شده است.