ورود

نسخه کامل مشاهده نسخه کامل : برنامه نویسی ویژوال در لینوکس (Qt Programing)



a.toraby
21-07-2007, 20:53
سلام دوستان خوب من
شاید بعضی ها یادتون رفته باشه که من یک بار دیگه هم دو ماه پیش از این اقدام به درست کردن تاپیکی شبیه به این کردم
اما به هر حال به علت بعضی مشکلات نشد کار رو اونجا ادامه داد.
اما حالا با یک سری اصلاحات دوباره می خام اقدام به راه اندازس همچین بحثی کنم
تو این مدت هم کلی document نوشتم که سعی می کنم با نظم خاصی اونا رو براتون آپلود کنم
خوب بیش از این روده درازی نمی کنم و از مدیران انجمن هم درخواست دارم از بنده حمایت کنند و ما رو تنها رها نکنند و تجربیات خودشون رو در اختیار من قرار بدن. تا این تاپیک هم به صورت حرفه ای بتونه جوابگوی نیاز ها باشه


بدون هیچ معطلی درس ها رو آپلود می کنم. هر کسی هم سوال داره رو درواسی رو بزاره کنار
:11:

a.toraby
21-07-2007, 20:55
آدرس درس بعدی:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

درس اول که تکراری هست و قبلاً هم شاهد اون بوده یام. اما برای انسجام مطالب دوباره اینج می زارمش:46:

خوب شروع می کنیم. من سعی می کنم از همون اول اول، یعنی همون جایی که خودم شروع کردم، بنویسم
پیش نیاز های این درس:

آشنایی با چند تا مفهوم ساده:

هسته :
هر سیستم عاملی شامل دو بخش اصلی هسته و پوسته است. توزیع های مختلف لینوکس بنابر کاربردهایی که برای آن ها در نظر گرفته شده است از هسته خاصی استفاده می کنند. هسته های مختلف دارای توانایی های متفاوتی هستند، مثلاً هسته های جدید تر دارای قابلیت های بهتری در رابطه با سخت افزار های جدید تر هستند. کار اصلی سیستم عامل را هسته انجام می دهد.
پوسته :
پوسته رابط بین کاربر و هسته سیستم عامل است. کاربر بعد از انجام عملیات ویژه ای برای ورود به سیستم به پوسته دسترسی خواهد داشت و می تواند با تایپ دستورات با هسته ارتباط برقرار کند. در حال حاضر پوسته های زیادی برای سیستم های بر پایه یونیکس توسعه داده شده اند که مشهورترین و مطرح ترین آن ها عبارتند از:
BASH, TCSH, CSH
توزیع :
توزیع های مختلف لینوکس از نظر نرم افزارهایی که با آنها ارائه می شوند با هم تفاوت هایی دارند. هر توزیع ممکن است همراه با هسته های متفاوتی عرضه شود. در حال حاضر صد ها توزیع مختلف از لینوکس در سرتاسر دنیا عرضه شده است که به عنوان مثال می توان از فاردیکس ایرانی نام برد. اما در عمل فقط چند توزیع شناخته شده و مطرح در دنیا وجود دارد که بقیه توزیع ها بر پایه آن ها توسعه داده شده اند. مثلاً یک توزیع مشهور و پایدار، لینوکس دبیان است. یک پروژه لینوکسی باید دارای ویژگی های منحصر به خود باشد تا به عنوان یک توزیع شناخته شود. مثلاً لینوکس سوزه بر پایه توزیع دبیان توسعه داده شده است اما به خاطر ویژگی های خاصی مثل کنترل پنل کاملاً user friendly که دارد به عنوان یک توزیع قدرتمند شناخته شده است.
برای کسب اطلاعات کافی در مورد توزیع مورد نظر می توانید به وب سایت های زیر مراجعه کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
X Window System:
X Server یا همان X Window System پردازشی است که روی پوسته قرار می گیرد و به برنامه های X Client سرویس می دهد. یکی از مشهورترین X server های دنیا XFree86 نام دارد

X Client:
نرم افزار هایی هستند که به X Server نیاز دارند، از قبیل محیط دسکتاپ و پنجره ها و هر چیز دیگری که به سرویس گرافیکی احتیاج داشته باشد.
همان طور که تا به حال ممکن است متوجه شده باشید رابطه بین X server و نرم افزارهای X client به صورت سرویس دهنده و سرویس گیرنده است. به این صورت که حتی می توان از طریق شبکه و پروتکل های مربوطه از روی یک سیستم و از طریق یک X client به X Server در حال اجرا روی سیستم دیگری متصل شد.
Desktop Environment:
نرم افزار Desktop Environment یک برنامه گرافیکی است که به کاربر این اجازه را می دهد تا بدون نیاز به تایپ کردن دستورات، درون پوسته، آن ها را به سادگی با استفاده از محیط گرافیکی و حرکات ماوس اجرا نماید. نمونه های پرکاربرد و معروف تر این نوع نرم افزار ها عبارتند از Gnome و KDE.
حتماً به این نکته توجه داشته باشید که نرم افزار هایی مثل KDE و Gnome سرویس دهنده گرافیکی نیستند، بلکه خود، X Client هستند و برای اجرا شدن به X Server نیاز دارند.


آشنایی با Qt Framework

نرم افزار K Desktop Environment ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) که به طور اختصار KDE نامیده می شود یکی از پرکاربردترین و کامل ترین محیط های گرافیکی برای سیستم های بر پایه لینوکس است. لازم است بدانید که این محیط کاری بر اساس تکنولوژی Qt توسعه داده شده است. بنابراین به نظر می آید، برای برنامه نویسی تحت سیستم عامل لینوکس، استفاده از این محصول شرکت Troll Tech ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) بهترین ایده باشد.
یه سری به سایتش بزنید. چیز های جالبی یاد می گیرید.

قالب کاری Qt، مجموعه ای از کلاس های ++C­­­ است که کاربرد آن ها ایجاد نرم افزارهای قابل کامپایل در پلت فرم های مختلف از قبیل ویندوز، لینوکس، سولاریس و یا HP-UX می باشد. یعنی یک بار کدنویسی کنید و چندین بار کامپایل کنید. نرم افزارهای تولید شده توسط Qt قابلیت اجرا روی اکثر سیستم های لینوکس که دارای سرویس دهنده X11 ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) می باشند را دارا هستند.

شهرت اصلی Qt به علت multi platform بودن آن است. اما به علت قدرت بالایی که API آن دارد، تولیدکنندگان بسیاری، از آن برای توسعه نرم افزارهای Single Platform نیز استفاده کرده اند.

نرم افزارAdobe Photoshop Album ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) یک نمونه از نرم افزار هایی است که با استفاده از Qt برای پلت فرم ویندوز ایجاد شده است. همچنین تعداد زیادی از نرم افزارها، با کاربردهای ویژه که پیچیدگی های بسیار زیادی دارند، از قبیل برنامه های پویا نمایی سه بعدی، پردازش دیجیتال فیلم و اکتشاف گاز و نفت با استفاده از Qt ساخته شده اند. اگر شما با استفاده از Qt نرم افزاری را تحت سیستم عامل ویندوز ایجاد کرده باشید به راحتی می توانید آن را در دنیای لینوکس و مکینتاش هم به فروش برسانید، برای این کار تنها به کامپایل مجدد آن نیاز دارید.

Qt تحت دو لیسانس متفاوت عرضه می شود. اگر قصد تولید نرم افزاری تجاری را داشته باشید باید لیسانس تجاری Qt را خریداری نمایید، اما اگر می خواهید نرم افزاری را تحت لیسانس open source تولید نمایید، می توانید از ویرایش رایگان Qt استفاده نمایید.

علاوه بر صدها کلاس و تابعی که خود Qt در اختیار شما قرار می دهد، پروژه های متن باز زیادی هم وجود دارد که قابلیت های جدیدی را به آن اضافه می کنند. برای آشنایی با این ماژول ها به اینجا ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])بروید.

همان طور که قبلاً اشاره شد KDE محیط کاری گرافیکی است که بر اساس تکنولوژی Qt ساخته شده است. اولین نسخه KDE در سال 1996 ارائه شد یعنی یک سال پس از عرضه نسخۀ اول Qt. بعد از آن KDE خیلی زود به یک محیط گرافیکی معروف و کارآمد بر روی پلت فرم های لینوکس تبدیل شد. در طی چندین سال کلاس های زیادی نیز ایجاد شدند که اکثر آن ها خواص خود را از یک یا چند کلاس Qt به ارث برده اند. شما می توانید براحتی با استفاده از کلاس های Qt نرم افزار خود را تولید کنید، ولی در صورتی که کلاس های KDE را به کار برید نرم افزار شما با محیط کاری KDE هماهنگی بیشتری خواهد داشت.

برنامه ای که توسط Qt ایجاد می شود یک نرم افزار رویدادگرا می باشد. به این صورت که برنامه شروع به کار می کند و پنجره یا پنجره هایی در صفحه نمایش نمایان می شوند و منتظر ورودی کاربر از طریق موشواره یا صفحه کلید می ماند. هر چیزی که در صفحه نمایشگر ظاهر می شود یک Widget نامیده می شود. پنجره ها، دکمه ها، منوها و غیره، همگی Widget می باشند. هر Widget می تواند در برگیرنده یک یا چند Widget دیگر نیز باشد. در واقع برنامه نویس برای ایجاد قسمت گرافیکی نرم افزار خود تنها باید همین چیزها را کنار یکدیگر قرار دهد و آن ها را فعال سازی کند تا در مقابل رویداد های صفحه کلید یا موشواره اعمال مورد نظر را انجام دهند

در این جا تعریف علمی تری از Widget بیان می کنیم. به هر کلاسی که از کلاس QWidget ارث بری داشته باشد Widget گفته می شود. اگر با Java آشنایی داشته باشید یقیناً با مفهوم Widget مشکلی نخواهید داشت. در واقع همان طور که از معنای تحت الفظی این کلمه بر می آید، هر چیزی که در صفحه نمایش داده می شود یک Widget (چیز) است. کلاس QWidget شامل پنجره های قابل نمایش می باشد. با استفاده از متد های درون این کلاس می توان پنجره ها را مدیریت کرد و عملکرد های متناسب با وظایف برنامه را در رابطه با رویداد های موشواره و صفحه کلید تعیین کرد. به عنوان مثال می توان خواص خود Widgwet ها را با توجه به رویداد های رخ داده تغییر داد. مثلاً رنگ زمینه یک پنجره یا موقعیت آن در صفحه نمایش و یا اندازه آن را تغییر داد. شما می توانید در برنامه خود از Widget های موجود در Qt یا KDE استفاده نمایید ویا حتی با استفاده از کلاس QWidget چیزهای جدیدی متناسب با نیاز های خود ایجاد کنید و به کار برید. به خاطر داشته باشید که هر گاه نام یک کلاس با حرف Q شروع شده باشد، می تواند نشان دهنده این مطلب باشد که این کلاس مطعلق به قالب کاری Qt است و اگر با حرف K شروع شده باشد به احتمال زیاد مربوط به کلاس های KDE می شود.

در شکل زیر ساختار یک برنامه ایجاد شده در محیط KDE را مشاهده می کنید:



در برنامه نویسی برای محیط گرافیکی KDE، بیشتر با لایه های دوم و سوم سرو کار داریم. در واقع کار Qt هم، همین است. یعنی Qt ما را قادر می سازد بدون نیاز به پرداختن به لایه های پایین تر و با استفاده از توابعی که در لایه های بالایی در اختیار ما هست به برنامه نویسی بپردازیم. برنامه های تولید شده توسط ما در واقع همان بالاترین لایه، یعنی Application را تشکیل می دهند.

در این جا با سلسله مراتب این لایه ها آشنایی پیدا می کنیم و روابط بین آن ها را بررسی می کنیم

1. لایه System:

این لایه پایین ترین سطحی است که نرم افزار های کاربردی به آن دسترسی دارند. در این سطح فراخوان های سیستمی، که مجموعه ای از توابع هسته سیستم عامل هستند در اختیار برنامه نویس قرار می گیرند. به عنوان مثال می توان از توابع مربوط به سیستم فایل نام برد. از آن جا که هسته لینوکس توسط زبان برنامه نویسی C پیاده سازی شده است تمام این فراخوان ها نیز در واقع توابعی به زبان C هستند.

2. لایه glib:

این لایه نیز مجموعه ای از توابع C، ماکروها و ساختارهایی است که از طریق لایه های بالاتر مورد استفاده قرار می گیرند. در واقع glib کتابخانه ای است، شامل توابعی برای تاریخ و زمان، ورودی و خروجی، زمان سنج ها و تخصیص حافظه. همچنین توابع مفیدی برای کار با لیست ها، آرایه ها، درخت ها و حافظه cache را در اختیار ما قرار می دهد.

3. لایه X11:

این لایه شامل توابع سطح پایین برای مدیریت رویداد های گرافیکی مربوط به موشواره و صفحه کلید می باشد. تمام توابع مورد نیاز برای مدیریت پنجره ها و پاسخ به رویداد های ماوس و صفحه کلید توسط X11 ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) سرویس دهی می شوند.X11 سرویس دهنده گرافیکی پایداری است که گاهی با نام X یا X11R6 هم از آن یاد می شود.

4. لایه C++ API:

از آن جا که لایه های بالاتر توسط C++ ایجاد شده اند، این API برای پیاده سازی اشیائی که در لایه های بالایی ایجاد می شوند در این جا قرار می گیرد.

5. لایه Qt Classes:

این لایه هم شامل توابع Qt هست که به زبان C++ نوشته شده اند.

6. لایه KDE Classes:

این لایه شامل کلاس های تکامل یافته ای است که در واقع با استفاده از همان کلاس های Qt ایجاد شده اند. همین کلاس ها و اشیای این لایه هستند که محیط گرافیکی KDE را بوجود آورده اند.

7. لایه Application:

در این جا با دو اصطلاح جدید آشنا می شویم، که عبارتند از Qt Application و KDE Application.

Qt Application آن دسته از نرم افزارها هستند که شیئ QApplication را برای مقدار دهی اولیه خود به وجود می آورند، در حالی که دسته دوم (یعنی KDE Application ها) شیئ KApplication را ایجاد می کنند.در سلسله مراتب وراثت، کلاس KApplication از کلاس QApplication وراثت گرفته است و علاوه بر این، استاندارد های مربوط به محیط گرافیکی KDE را شامل می شود.


حالا بیاین با هم ببحثیم

a.toraby
21-07-2007, 21:00
آدرس درس قبلی:



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

آدرس درس بعدی:



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

نصب و راه اندازی
برای نصب و استفاده از Qt روش های متفاوتی وجود دارد. در این جا به دو روش ساده اشاره می شود. برای توضیحات بیشتر می توانید به مستندات بسته ای که در اختیار دارید، رجوع کنید. در هنگام نوشتن این خودآموز نسخه 4.1.4 Qt معرفی شده است. بنابراین مبنای کار ما هم بر اساس همین نسخه می باشد. برای این که بتوان کار با Qt را آغاز نمود، یک کامپایلر C++ نیاز داریم. بنابراین در مرحله اول MinGw و بعد از آن Qt framework را نصب می کنیم. روش نصب این بسته های نرم افزاری بر روی سیستم عامل ویندوز بیش از اندازه ساده و پیش پا افتاده است. تنها با رعایت چند نکته ساده می توان روند نصب برنامه را به پایان رساند.
نکته مهمی که در نصب کامپایلر MinGw باید در نظر گرفته شود این است که دقت کنید نرم افزار را در پوشه ای نصب کنید که در نام آن از فضای خالی استفاده نشده باشد. چون کامپایلر نسبت به فضای خالی حساس است و قادر به کامپایل برنامه ها نخواهد بود.
در ضمن همیشه توجه داشته باشیذ که بهترین محل نصب هر کامپایلری، همان پوشه پیش فرض آن می باشد. یعنی c:\MinGw
شما می توانید MinGw را از آدرس زیر دریافت نمایید:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سپس فایل exe را اجرا نمایید و برنامه را نصب کنید. توصیه می شود نسخه 5 یا بالاتر این کامپایلر را دانلود نمایید. چون نسخه های قدیمی تر در کامپایل برنامه های Qt دچار مشکل می شوند.
بعد از نصب MinGw لازم است قالب کاری Qt که شامل تمام توابع مورد نیاز شما می باشد نصب نمایید. اگر به سایت trolltech مراجعه نمایید با تعداد زیادی از انواع Qt مواجه خواهید شد. در این جا توضیحی مختصر در مورد انواع توزیع های موجود داده می شود:
کلاً Qt تحت دو لیسانس عرضه می شود. که عبارتند از Open source و Commerical. نسخه متن باز آن بعضی از ویژگی ها را ندارد. مثلاً از نسخه رایگان Qt نمی توان برای اتصال به پایگاه داده MySql استفاده کرد اما در نسخه تجاری این محصول این قابلیت به طور پیش فرض وجود دارد. در ضمن طبق قراردادی که با مشتری بسته می شود. کاربر تنها مجاز است از نسخه رایگان برای تولید نرم افزارهای متن باز استفاده نماید. در این جا چون قصد ما صرفاٌ موزش می باشد از نسخه متن باز این نرم افزار استفاده می کنیم، و چون می خواهیم از کامپایلر MinGw استفاده کنیم ( که آن هم متن باز و رایگان است) باید توزیع مخصوص آن را دریافت کنیم. بنابراین به آدرس زیر مراجعه کنید و فایل qt-win-opensource-4.1.4-mingw.exe را دانلود نمایید.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تنها نکته ای که لازم است در نصب Qt رعایت شود تنظیم نمودن منغیرهای محیطی هست و این کار به سادگی و با تیک زدن set environment variables به صورت خودکار انجام می شود.
با نصب Qt، چهار نرم افزار کمکی دیگر نیز علاوه بر توابع و کامپننت های اصلی در اختیار شما قرار می گیرد. این چهار نرم افزار عبارتند از Asistant که به عنوان help از آن استفاده می نماییم. نرم افزار Asistant کامل ترین و روان ترین منبعی است که برای شروع برنامه نویسی می توان به کار برد. نرم افزار دیگر Qt Designer است که برای تولید فرم ها و GUI به روش ساده و سریع کاربرد دارد. البته نوعی از Qt هم وجود دارد که می تواند به عنوان یک Plugin به Microsoft Visual Studio افزوده شود. نرم افزار دیگر شامل مثال های ساده ای در مورد Qt و کاربردهای آن می باشد. نرم افزار LingUist هم در مورد پروژه هایی که در چند زبان (ملیت) مختلف توسعه داده می شوند کاربرد دارد. در مورد تک تک آن ها مفصلاً توضیح داده خواهد شد. برای کامپایل برنامه های نوشته شده از Qt command prompt استفاهده می کنیم. نحوه کامپایل برنامه ها در درس بعدی توضیح داده می شود.
از آن جا که نحوه نصب بر روی سیستم های لینوکسی تا حدودی متفاوت هست. این مبحث را مطرح نمی کنم. هر کسی که مسکلی داشت پیغام بده تا رسیدگی بشه. شاید در ادامه نصب qt بر روی suse رو توضیح داد. اما در مورد بقیه توزیع ها شرمنده ام. منابع اینترنتی فراوان وجود داره.

احیاناً اگه امکان دانلود فایل های حجیم ندارید. یک پیغام خصوصی بدید تا ببینیم چه کار می شه کرد

a.toraby
21-07-2007, 21:28
آدرس درس قبلی:



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

آدرس درس بعدی:



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

نوشتن اولین برنامه
در این قسمت با مفاهیم اولیه برنامه نویسی با Qt و تفاوت های بین Qt Application و KDE Application می پردازیم. همچنین با نحوه ایجاد یک پروژه و کامپایل یک برنامه ساده آشنا می شویم. این فصل بیشتر بر نحوه مدیریت پروژه با استفاده از ابزار qmake تکیه دارد، اما تا حدودی با برنامه های دیگر نیز که در این رابطه در اختیار ما قرار دارد آشنا خواهیم شد.
Hello Qt!
در زیر ساده ترین برنامه ممکن را مشاهده می کنید. با اجرای این برنامه یک پنجره نمایان خواهد شد که پیغام Hello Qt! روی آن نقش بسته است.
با بررسی خط به خط این برنامه ساده و کوتاه تا حدودی با نحوه پیاده سازی اشیای Qt از طریق زبان C++ آشنا می شوید. بنابراین برای درک مفاهیم مطرح شده، باید تا حد قابل قبولی به برنامه نویسی به زبان C++ و اصول شی گرایی تسلط داشته باشید.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در خط اول و دوم، فایل های حاوی تعریف کلاس های QApplication و QLable را include کرده ایم. در خط پنجم یک شیئ از نوع QApplication ایجاد می شود، بنابراین این برنامه از نوع Qt Application میباشد. سازنده این کلاس به دو پارامتر نیاز دارد که عبارتند از argc و argv.
در خط بعد یک شیئ از نوع QLable ایجاد کرده ایم. این Widget کار یک برچسب را برای ما انجام می دهد، با استفاده ازآن می توان متن های غیر قابل تغییر توسط کاربر را، بر روی صفحه، نمایش داد. سازنده این کلاس دارای دو پارامتر می باشد، پارامتر اول رشته ای است که می خواهیم درون lable چاپ شود.
همان طور که قبلاً گفته شد اصطلاح Widget به هر شیئی اطلاق می شود که در صفحه قابل نمایش باشد. در ضمن هر Widget می تواند داخل Widget دیگری قرار بگیرد یا شامل چندین Widget دیگر درون خود باشد. پارامتر دوم سازنده کلاس یک اشاره گر است. مقدار 0 به سازنده کلاس نشان می دهد که این Widget، خود یک پنجره است و درون پنجره دیگری قرار ندارد.
در خط هفتم، متد setMainWidget باعث می شود شیئ lable که در خط قبلی ساخته شده است به عنوان شیئ اصلی برنامه در نظر گرفته شود. با انجام این کار وقتی کاربر این پنجره را ببندد اجرای برنامه پایان می پذیرد و منابع تخصیص داده شده به برنامه، به سیستم بازگردانده می شود. اگر این خط را حذف کنیم، برنامه باز هم اجرا می شود ولی بدون MainWidget برنامه در Background در حال اجرا باقی می ماند، حتی اگر تمام پنجره های آن بسته شده باشد.
البته این متد در نسخه چهارم Qt دیگر به کار نمی رود. در نسخه چهارم شما می توانید از تابع lastWindowClosed برای این کار استفاده کنید. این متد نیز متعلق به QApplication می باشد و هنگامی که آخرین پنجره برنامه بسته می شود سیگنال به متد (اسلات) quit ارسال می شود.
در واقع در برنامه مورد بحث نیازی به اجرای متد setMainWidget نمی باشد چون متد quit همه کارها را انجام خواهد داد. بنابراین می توان خط هفتم برنامه را حذف کرد.
تمام Widget ها در حالت Hidden بوجود می آیند، این مسئله به ما کمک می کند تا ابتدا شیئ را کاملاً سفارشی کنیم سپس با متد show آن را نمایش دهیم. این کار را در خط 8 انجام داده ایم.
در آخرین خط، کنترل اجرای برنامه به Qt واگذار می شود. به این ترتیب برنامه در حالت انتظار باقی می ماند تا این که رویدادی اتفاق بیفتد. این رویداد می تواند کلیک بر روی دکمه X بالای پنجره باشد، در این صورت برنامه به پایان خواهد رسید.
حال نوبت آن رسیده که برنامه بالا را کامپایل نمایید. برای این کار از qmake استفاده می کنیم.
qmake
در این قسمت نحوه استفاده از qmake را به شما آموزش می دهیم. توصیه می شود بعد از خواندن این بخش به مسندات نرم افزار خود مراجعه کنید.
برای شروع کافیست در شاخه مربوطه (دایرکتوری که فایل های برنامه در آن قرار دارند) فایلی متنی با نام hello.pro ایجاد نمایید که شامل اطلاعات مورد نیاز qmake، برای مدیریت پروژه خواهد بود. این فایل را می توانید با استفاده از هر ویرایشگر متنی ایجاد نمایید. البته دستور qmake هم این کار را می تواند انجام دهد. بنابراین دستور زیر را در حالی که درون شاخه مربوطه هستید اجرا نمایید.

qmake –project
به این ترتیب فایلی با پسوند .pro و هم نام با نام دایرکتوری جاری ساخته خواهد شد.
حال که فایل پیکر بندی پروژه را ایجاد کرده اید باید با استفاده از دستورات ویژه ای که وجود دارد منابع مورد نیاز را معرفی کنیم. تمام این تنظیمات درون فایل پروژه، (hello.pro) انجام خواهد شد.
فایل hello.pro را با یکی از ویرایش گرهای متن مورد علاقه خود باز کنید.
با استفاده از دستور SOURCES فایل های منبع را به پروژه اضافه می کنیم. به این ترتیب که خط زیر را به فایل hello.pro اضافه می کنیم.

SOURCES += hello.cpp
مثلاً اگر فایل دیگری هم به نام main.cpp وجود داشت، در خط بعدی فایل، دستور زیر را می بایست تایپ می کردید.

SOURCES += main.cpp
با استفاده از دستور HEADER نیزفایل های هدر (مثلاً hello.h ) را به پروژه اضافه می کنیم

HEADER += hello.h
چون در توسعه نرم افزارمان از کلاس های Qt استفاده کرده ایم. لازم است با استفاده از دستور CONFIG به qmake اعلان کنیم که برای ایجاد فایل اجرایی مربوطه باید از کتابخانه های مخصوص Qt استفاده کند. ( در آینده حتماً همین طور خواهد بود ، ولی فعلاً اگر مایل بودید می توانید آموخته های خود را با یک برنامه helloworld ساده تحت زبان C++ بیازمایید. در این صورت نیازی به دستور CONFIG نخواهید داشت)

CONFIG += qt
در ضمن می توان با استفاده از دستور TARGET نام فایل نهایی را مشخص نمود. به این صورت نام فایل اجرایی تعیین خواهد شد.

TARGET = helloworld
بعد از نوشتن این دستورات فایل را ببندید و تمام تغییرات را در آن ذخیره کنید.
حال می توان با استفاده از دستور qmake فایل Makefile را ایجاد کرد. برای این کار باید در دایرکتوری اصلی پروژه قرار داشته باشید.

qmake –o MakeFile hello.pro
پس از ساخت MakeFile پروژه نوبت به کامپایل برنامه می رسد. اگر قصد استفاده از کامپایلر mingw را دارید، می توانید با اجرای دستور make آن را فراخوانی کنید.

make
دقت داشته باشید که اگر مراحل ساخت makefile را به درستی انجام نداده باشید و این فایل ایجاد نشده باشد، با اجرای دستور make پیام خطایی ظاهر خواهد شد، با این مفهوم که makefile مربوطه در شاخه جاری یافت نمی شود.
همان طور که تا به حال متوجه شدید برای توسعه پروژه خود باید کارهای زیادی را انجام دهید. این بخش از کار، خود زمان زیادی را مصرف می کند و شما باید تسلط کافی در این زمینه داشته باشید، چون با انبوهی از دستورات و ابزارهای متفاوت سرو کار خواهید داشت.
البته حتی این امکان وجود دارد که شما بدون استفاده از qmake و بصورت دستی، خودتان اقدام به ایجاد یک makefile نمایید.
بعد از اجرای دستور make فایل اجرایی مورد نظر به وجود می آید و شما می توانید با اجرای آن از برنامه ای که نوشته ایداستفاده نمایید.
Hello KDE!
همانطور که دیدید این برنامه بر پایه کلاس QApplication نوشته شده است. بنابر این می توانید آن را در هر سیستم عاملی که کلاس های Qt را شامل باشد اجرا کنید. مثل ویندوز، لینوکس، یا سولاریس. اما اگر مایل باشید می توانید از کلاس KApplication نیز برای برنامه نویسی استفاده کنید. بنابراین برنامه قبلی به صورت زیر در می آید.



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

دقت کنید که کلاس KApplication در فایل kapp.h تعریف شده است. در فایل kapp.h فایل qapplication.h نیز include شده است. تمکام امکاناتی که در کلاس QApplication وجود دارد در کلاس KApplication هم موجود است و تفاوت بنیادی بین آن ها وجود ندارد. فقط بعضی تعاریف مخصوص محیط گرافیکی KDE داخل کلاس KApplication گنجانده شده است. بنابراین برنامه های KDE Application همانند Qt Application عمل می کنند با این تفاوت که KDE Application ها قابلیت های اضافی دارند که آن ها را قادر می سازد با محیط گرافیکی کاربر تعامل داشته باشند. به عنوان مثال به تنظیمات KDE سیستم میزبان دسترسی داشته باشند، مثلاً با Theme مورد استفاده توسط کاربر هماهنگ باشند.
با توجه به مطالب گفته شده اگر قصد دارید نرم افزاری را تولید نمایید که روی هر سیستم عاملی قابل کامپایل باشد باید از کلاس های KDE صزف نظر کنید و در واقع یک Qt Application بسازید.
آخرین نکته که باید یادآوری کنم این است که برای کامپایل KDE Application ها باید کتابخانه های مربوطه از قبیل libkdecore و libkdeui را به فایل پروژه اضافه کنید. (یادتان هست که این کار را با استفاده از دستور CONFIG انجام می دهیم.)

a.toraby
22-07-2007, 09:29
چقدر علاقه مند به برنامه نویسی زیاده تو این انجمن:41: :19:

شاید هم همه بلدن این چیزا رو:13:

Cris_Y
22-07-2007, 11:02
salam
kheili jalebe edame bedin
agar momkene ye kam bishtar mesal bezanin

a.toraby
22-07-2007, 14:05
salam
kheili jalebe edame bedin
agar momkene ye kam bishtar mesal bezanin

جلوتر که بریم. تقریباً همش میشه مثال:46:
به نظر تو آموزش ها مفهوم هستش؟؟
تونستی دانلودها رو انجام بدی؟

sudotux
22-07-2007, 17:14
دوست عزیز واقعا ممنون . تاپیک خیلی خوبیه . لطفا درس ها رو فعلا نگذار تا ما خودمونو برسونیم .

a.toraby
22-07-2007, 20:19
دوست عزیز واقعا ممنون . تاپیک خیلی خوبیه . لطفا درس ها رو فعلا نگذار تا ما خودمونو برسونیم .

چشم. اصلاً انجمن که می گن یعنی همین. لطفش به اینه که با هم پیش بریم. فقط شما هم لطف کنید با انرژی تر باشید. تا تاپیک هم جون بگیره.
از همه دعوت به همکاری میشه

Cris_Y
22-07-2007, 23:37
are, kheili khoobe faghat mesle hame chiz dige tamrin mikhad!
faghat ye chizi
age momkene hamzaman too blogetoon ham up konid
chize jalebi mishe!
bazam mamnoon

a.toraby
25-07-2007, 19:34
آدرس درس قبلی:



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

آدرس درس بعدی:



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

پاسخ گویی به رویداد ها توسط Slot ها و Signal ها
دکمه هم مانند برچسب، یک Widget است. اما تفاوتی که با Lable دارد این است که، برنامه شما نیاز دارد بفهمد چه موقعی بر روی دکمه کلیک می شود. در زیر برنامه ای را مورد بررسی قرار می دهیم که با فشار دادن دکمه اجرای آن متوقف می شود.



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

برای این که دکمه در مقابل کلیک ماوس پاسخگو باشد، لازم است در ازای کلیک کاربر، پیغام ویژه ای برای یک متد خاص بفرستد. در برنامه فوق آن متد، تابع quit می باشد. این عملیات در خط 11انجام شده است. پیغامی که در ازای کلیک کاربر ارسال می شود را سیگنال می گوییم و متدی که سیگنال را دریافت می کند اسلات نامیده می شود.
در واقع در خط یازدهم برنامه، با استفاده از متد connect، که متعلق به شیئ QObject می باشد، سیگنال کلیک موشواره بر روی شیئ button را به اسلات quit که متعلق به شیئ app است متصل نموده ایم.
اتصال بین سیگنال ها و اسلات ها از طریق متد connect ایجاد می شود. این متد دارای دو پارامتر است که پارامتر اول سیگنال و پارامتر دوم اسلات مورد نظر است.
اگر قبل از این با سیستم های رویدادگرای دیگر کار کرده باشید حتماً با مفهوم callback function آشنایی دارید. Signal ها هم مانند callback function ها می باشند. با این تفاوت که signal ها type safe هستند.
در مثال بعدی مشاهده خواهید کرد که سیگنال ها و اسلات ها چگونه اشیای مختلف را با هم هماهنگ می کنند. در این برنامه کاربر می تواند سن خود را از طریق یک Spin Box یا یک Slider وارد کند. این دو Widget به صورت خودکار با هم هماهنگ هستند. این هماهنگی از طریق اسلات ها و سیگنال ها به وجود می آید. به این ترتیب که در هر شیئ سیگنالی وجود دارد که به اسلات شیئ دیگر متصل است و روند تغییرات را به گوش آن شیئ می رساند.



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

این برنامه شامل سه Widget می باشد. در خط هشتم hbox را به وجود آورده ایم. این شیئ Widget اصلی برنامه خواهد بود و با بستن آن برنامه به پایان خواهد رسید. همان طور که می بینید در خط 21 تابع setMainWidget را فراخوانی کرده ایم.
در خطوط 12 و 13 نیز به ترتیب spinBox و slider را بوجود آورده ایم. همانطور که ملاحظه می کنید هر دوی این اشیاء را به عنوان فرزندان hbox ایجاد کرده ایم. به این ترتیب این اشیاء درون hbox قرار می گیرند. شیئ hbox این ویژگی را دارد که باعث می شود تمام اشیاء درون آن بطور خودکار به ترتیب کنار یکدیگر قرار گیرند. بنابراین نیازی به تعیین دقیق موقعیت و اندازه اشیاء فرزند نیست. البته این کلاس در Qt3 وجود دارد و در نسخه چهارم باید از کلاس Q3HBox استفاده نمایید. در خط 11 متد setSpacing باعث می شود هر شیئی که درون hbox قرار می گیرد با فاصله 6 پیکسل نسبت به شیئ قبلی قرار بگیرد. متد setMargin هم یک حاشیه 6 پیکسلی برای شیئ hbox در نظر می گیرد.
متد setRange در خطوط 14 و 15 محدوده معتبر برای spibBox و slider را، اعداد بین 0 تا 150 قرار می دهد.
حال موقع آن است که اتصال بین دو شیئ را برقرار کنیم. این کار را طبق معمول با فراخوانی متد connect انجام می دهیم.
در خط 21 spinBox را مقدار دهی اولیه کرده ایم. به محض اجرای برنامه مقدار spinBox تغییر می کند و این باعث می شود سیگنال valueChanged فعال شود. بنابر این اسلات setValue مربوط به شیئ slider آن را دریافت می کند و مقدار slider نیز بروز رسانی می شود.
در خط 22 نیز متد show از شیئ hbox را فراخوانی کرده ایم. این متد باعث می شود شیئ hbox و تمام فرزندان آن بر روی صفحه نمایش داده شوند.
فایل زیر را برای نسخه چهارم Qt استفاده کنید. در این فایل تعدادی از توابع و کلاس هایی که تنها در Qt3 قابل استفاده بوده اند حذف شده اند:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

saeid_azad
26-07-2007, 02:46
اول بگم كارتون خيلي جالبه ولي فكر نمي كنيد كه يكم نسبت به لينوكس داريد كم لطفي مي كنيد اميدوارم در ادامه به لينوكس بيشتر توجه بشه
ضمنا من چند تا سوال داشتم كه ممنون مي شم اگه جواب بديد
1-اول راجع به qt و دات نت مي شه يه توضيحي بديد من كه لينك مستقيم براي دانلودش گير نياوردم ولي توي emole پيداش كردم
البته با سايزهاي متفاوت از 80 تا 136 مگ مي خواستم بدونم اولا لينك دانلود مستقيم ازش سراغ نداريد ثانيا كدومشو بايد دانلود كنم ثالثا مراحل كامپايل برنامه توي اون بصورت متني يا ويژوال
2-وقتي يه برنامه رو كامپايل مي كنم (حتي نمونه هاي خودش) موقع اجراي فايل اين خطا رو مي ده mingwm10.dll was not found ولي وقتي از روي منوي assistant اونارو اجرا مي كنم راحت اجرا مي شن چرا
3-اين designer اش به چه درد مي خوره وقتي باهاش فرم رو مي سازيم چطوري بايد با كدهامون مرتبطش كنيم
اميد وارم كه كارتون رو ادامه بديد

a.toraby
26-07-2007, 20:48
اول بگم كارتون خيلي جالبه ولي فكر نمي كنيد كه يكم نسبت به لينوكس داريد كم لطفي مي كنيد اميدوارم در ادامه به لينوكس بيشتر توجه بشه
ضمنا من چند تا سوال داشتم كه ممنون مي شم اگه جواب بديد
1-اول راجع به qt و دات نت مي شه يه توضيحي بديد من كه لينك مستقيم براي دانلودش گير نياوردم ولي توي emole پيداش كردم
البته با سايزهاي متفاوت از 80 تا 136 مگ مي خواستم بدونم اولا لينك دانلود مستقيم ازش سراغ نداريد ثانيا كدومشو بايد دانلود كنم ثالثا مراحل كامپايل برنامه توي اون بصورت متني يا ويژوال
2-وقتي يه برنامه رو كامپايل مي كنم (حتي نمونه هاي خودش) موقع اجراي فايل اين خطا رو مي ده mingwm10.dll was not found ولي وقتي از روي منوي assistant اونارو اجرا مي كنم راحت اجرا مي شن چرا
3-اين designer اش به چه درد مي خوره وقتي باهاش فرم رو مي سازيم چطوري بايد با كدهامون مرتبطش كنيم
اميد وارم كه كارتون رو ادامه بديد

سلام
تعجب می کنم. این جا در مرود برنامه نویسی در لینوکس داره آموزش داده می شه. اون وقت شما چه جوریه که می گید کم لطفی می شه. اگه منظورتون نحوه نصب و پیکربندی Qt در لینوکس بود که توضیخ ندادم. دلیل داشت. اون هم این که توزیع های لینوکس بسیار متنوع هستند و نصب Qt هم در هر کدوم از اون ها مهارت های خاص خودشو می طلبه. حالا گیریم که من نصبشو تو SUSE توضیح دادم. خیلی کمکی نمی کنه و آمزش عمومی نمیشه.
با این حال سعی می کنم درس دوم رو update کنم. و نصب در لینوکس رو هم بهش اضافه کنم.

در مورد سوال اولتون باید بگم که یک پروژه ای وجود داره به اسم Visual Studio Integration . هدف این پروژه ایجاد یک plugin برای VS هست. بنابراین برنامه نویس می تونه از کلاس های Qt و همچنین از Qtdesigner درون Visual studio.net به صورت ساختار یافته ای استفاده کنه. در واقع شما با Qt برنامه نویسی می کنید. اما VS رو به عنوان یک IDE مورد استفاده قرار می دید. یه پروزه دیگه ای مشابه به همین در مورد eclipse وجود داره. به این ترتیب که برنامه نویسان لینوکسی هم مس تونن از قابلیت های Eclipse برای کدنویسی Qt استفاده کنن. همه این پروژه ها برای اینه که روند توسعه یک application سریع تر انجام بشه. این پلاگین ها باعث می شه که برنامه نویس مجبور نباشه syntax همه دستورات رو حفظ باشه و مزایایی از این قبیل. حالا که شما به این زودی این بحث رو مطرح کردی شاید این مطالب رو زودتر آپلود کنم. اما خودم قصد داشتم یه کم کدنویسی کار کنیم (کدها رو توی notepad بنویسیم) بعد این چیزا رو بگم. این کار فایدش اینه که شما در یادگیری کدها و دستورات دقت بیشتری می کنید.

در مورد سوال های بعدی هم لازمه بگم که، معلومه مطالب رو به خوبی نخوندین وگرنه این سوال ها براتون پیش نمیومد:13: اون error هم که موقع کامپایل مشاهده می شه به خاطر اینه که حتماً MinGW رو نصب نکردید.

در مورد Qtdesigner هم توضیح داده خواهد شد. جزو سرفصل های درسمون هستش:46:

saeid_azad
29-07-2007, 01:41
خوب اگه نحوه نصب رو توي بعضي توزيعها شرح بديد بهتره شايد بقيه هم دست بكار بشند و هركسي نحوه نصب رو توي توزيع دلخواهش شرح بده هرچند اونقدر ها هم نصب متفاوتي نداره
خوب براي شروع من خودم نصبشو توي opendevelop توضيح ميدم
مرحله اول ابتدا سي دي را داخل سي دي رام گذاشته و با اون سيتم رو راه اندازي مي كنيم
مرحله دومي هم وجود نداره چون qt بطور پيش فرض نصبه(توضيح از اين كاملتر)

در مورد qt و vs منظورم اين بود كه من بايد كدوم پكيج رو توي emole دانلود كنم (حجمش چقدره) و اگه لينك مستقيم ازش بديد كه ديگه عاليه
در مورد خطا هم بايد بگم كه من mingw رو نصب كردم اصلا تا نصب نشه كه qt نصب نمي شه و ضمننا گفتم كه فايلهاي كامپايل شده از توي qt examples and demos اجرا ميشند ولي مستقيما خير و از نبود اون dll خبر مي دهند
البته mingwm10.dll وجود داره ومن حتي توي شاخه ويندوز هم كپيش كردم ولي كماكان مشكل باقي است
ممنون مي شم اگه كمكم كنيد

Cris_Y
01-08-2007, 22:29
salam
ye modat kam posht computer boodam dar natije dirooz taze shorou kardam
az hamoon barnameye aval sare dastoore qmake error mide, dorost bad az define ha!
midoonin moshkel chi mitoone bashe?

a.toraby
02-08-2007, 00:16
salam
ye modat kam posht computer boodam dar natije dirooz taze shorou kardam
az hamoon barnameye aval sare dastoore qmake error mide, dorost bad az define ha!
midoonin moshkel chi mitoone bashe?

سلام
دقیقاً متوجه نشدم کجا رو می گی. می شه منظورتو بهتر برسونی؟ آخه qmake که برای کامپایل نیست. qmake پروژه رو ایجاد می کنه.

Cris_Y
02-08-2007, 12:12
salam
shayad man bad motevajeh shodam!oon kari ro ke gofte boodin kardam vali error mide ye chizi mesle compiler error
mishe bishter tozih bedin
merci

a.toraby
02-08-2007, 13:48
salam
shayad man bad motevajeh shodam!oon kari ro ke gofte boodin kardam vali error mide ye chizi mesle compiler error
mishe bishter tozih bedin
merci

دوست خوبم شما اگه می شه اون error ای که دریافت می کنید رو یه عکسی ازش بگیرید و این جا بزارید تا من براتون توضیح بدم

Cris_Y
02-08-2007, 23:45
salam
oon moshkel hal shod
:41:hala ye moshkele jadid
sare compile error mide. qt im 4.3.0 ast
source code:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
va matne shamele error:

C:\Qt\4.3.0>make
mingw32-make -f MakeFile.Debug all
mingw32-make[1]: Entering directory `C:/Qt/4.3.0'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -
DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"inclu
de\QtCore" -I"include\QtCore" -I"include\QtGui" -I"include\QtGui" -I"include" -I
"include\ActiveQt" -I"tmp\moc\debug_shared" -I"." -I"c:\Program Files\Microsoft
Visual Studio\DF98\IMSL\INCLUDE" -I"c:\Program Files\Microsoft Visual Studio\DF9
8\INCLUDE" -I"c:\Program Files\Microsoft Visual Studio\VC98\INCLUDE" -I"mkspecs\
win32-g++" -o tmp\obj\debug_shared\hello.o hello.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-rel
oc -mthreads -Wl -Wl,-subsystem,windows -o "debug\helloqt.exe" tmp\obj\debug_sha
red\hello.o -L"c:\Qt\4.3.0\lib" -L"c:\Program Files\Microsoft Visual Studio\DF9
8\IMSL\LIB" -L"c:\Program Files\Microsoft Visual Studio\DF98\LIB" -L"c:\Program
Files\Microsoft Visual Studio\VC98\LIB" -L"c:\Qt\4.3.0\lib" -lmingw32 -lqtmaind
-lQtGuid4 -lQtCored4
C:\MinGW\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\ mingw32\bin\ld.exe: cannot fin
d -lqtmaind
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\helloqt.exe] Error 1
mingw32-make[1]: Leaving directory `C:/Qt/4.3.0'
mingw32-make: *** [debug-all] Error 2

merci!:11:

a.toraby
03-08-2007, 17:49
لطفاً درس دوم رو یه بار دیگه بخونید: :20:
چرا دقت نمی کنی عزیز:41:

در ضمن دو بار هم از روش بنویس.:21:ok؟؟
مخصوصاً ای خطش رو حتماً خوب بخون:

توصیه می شود نسخه 5 یا بالاتر این کامپایلر را دانلود نمایید. چون نسخه های قدیمی تر در کامپایل برنامه های Qt دچار مشکل می شوند

این هم آدرس درس دوم:



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

به خدا اگه پله به پله و با حوصله و با دقت جلو بری خیلی آسون به نتیجه می رسی. عزیز دل برادر، باید MinGW5.0.2 رو دانلود کنی. اگه خواستی هم می تونی آدرس بدی برات cd بفرستم. چه کنیم دیگه ما خراب رفیقیم. :10:
البته پولشو ازت می گیرم:27:

Cris_Y
03-08-2007, 20:08
salam doost aziz
mamnoon az javabet vali mishe bedoonam chi baes shod fekr konin version mingw man zire 5e? versionesh 5.1.2 e
mamnoon misham dalile in moshkele tozih bedin
bazham mamnoon

a.toraby
03-08-2007, 21:40
خوب دلیل داشت دیگه. دلیلش هم این بود که این error که شما میگی مربوط میشه به یکی از library های MinGW که پیدا نمیشه. و یه احتمالش این بود که ورژن شما با Qt همخوانی نداشته باشه.

احتمال دیگه می تونه این باشه که نسخه Qt که شما نصب کردی نسخه qt-win-opensource-4.x.x-mingw نبوده و مخصوص Visual C بوده . در این صورت باید از کامپایلر nmake استفاده کنید. من توصیه می کنم که حتماً از Qt qt-win-opensource-4.1.4-mingw استفاده کنید. که به خوبی با MinGW-5.0.2 جواب میده.
نگاه کنید این نتیجه کامپایل برنامه من هستش:



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

تو کامپایل برنامه شما یک سری از فایل های مخصوص Visual Studio هم Include شدن در صورتی که در کامپایل من خبری از VC نیستش . من فکر می کنم شما از نسخه Qt که برای VS توسعه داده شده استفاده می کنید. برای همین MinGW باهاش مشکل داره. درست می گم؟

Cris_Y
03-08-2007, 21:48
salam
sharmande vali versionam mingw e!

a.toraby
03-08-2007, 22:31
salam
sharmande vali versionam mingw e!

یعنی دقیقاً همینه: qt-win-opensource-4.1.4-mingw
میشه اسم فایل نصبشو دقیقاً بزاری من ببینم؟
ببینم، برنامه ها رو در مسیر پیش فرض نصی کردی؟ یعنی توی مسیر فایلی که error می ده کاراکتر space (فضای خالی) وجود نداره؟

آخه خودت نگاه کن. کامپایلر تو فایل های VS رو Include کرده. در صورتی که اگه ورژن MinGW باشه اصلاً کاری به VS نداره دیگه. عین کامپایلر من. شما یه کاری کنی خیلی خوب میشه. دقیقاً همین فایل هایی که من گفتم رو دانلود کن. چون تو این مدت من تا حالا همچین مشکلی نداشتم. شما فعلاً اگه می تونی دانلود کن تا کارت راه بیفته. من هم می گردم دنبالش ببینم چی پیدا می کنم.

Cris_Y
04-08-2007, 12:44
salam
ine: qt-win-opensource-4.3.0-mingw.exe
too masire pish farz nasb kardam yani c

too site ino peyda kardam:
Please note that the Open Source Edition of Qt will support the MinGW compiler.
Visual Studio support and integration is provided with the commercial Editions of Qt.
pas nabayad donbale vs begarde na?!
bashe 4.1.4 ro download mikonam albate 2rooz dige ke dastam be chizi joz dialup berese darnatije tool mikeshe ta behetoon begam dorost shod ya na
bazam mamnoon

a.toraby
04-08-2007, 13:18
بله همین طوره. من با این ورژن که شما می گی کار نکردم. اما به هر حال نباید مشکلی پیش میومد. خوب در هر صورت شما می تونی این مشکل رو به راحتی دور بزنی. با دانلود اون نسخه هایی که من گفتم. و تو این 7 ، 8 ماهی که باهاش کار کردم تا حالا مشکلی برام پیش نیومده . پس خیالت از این بابت راحت باشه.
اما من این مشکل رو در Qtforum هم مطرح می کنم. بینم شاید راه حلی وجود داشته باشه. شما خودت هم می تونی تو qtforum عضو بشی.

Cris_Y
10-08-2007, 12:23
salam
ba 4.1.4 ye errore dige migiram!
error:


mingw32-make -f MakeFile.Release
mingw32-make[1]: Entering directory `C:/Qt/4.1.4/test'
g++ -c -O2 -O2 -frtti -fexceptions -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_D
LL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN
-I"C:/Qt/4.1.4/include/QtCore" -I"C:/Qt/4.1.4/include/QtGui" -I"C:/Qt/4.1.4/inc
lude" -I"C:/Qt/4.1.4/include/ActiveQt" -I"tmp\moc\release_shared" -I"." -I"..\mk
specs\win32-g++" -o tmp\obj\release_shared\hello.o hello.cpp
hello.cpp: In function `int qMain(int, char**)':
hello.cpp: 7 : error: 'class QApplication' has no member named 'setMainWidget'
hello.cpp: 10 : 3: warning: no newline at end of file
mingw32-make[1]: *** [tmp\obj\release_shared\hello.o] Error 1
mingw32-make[1]: Leaving directory `C:/Qt/4.1.4/test'
mingw32-make: *** [release] Error 2


zaheran in moshkelat tamoomi nadaran!
merci

a.toraby
10-08-2007, 15:17
salam
ba 4.1.4 ye errore dige migiram!
error:


zaheran in moshkelat tamoomi nadaran!
merci

سلام دوست خوبم. نه خیالت راحت باشه. دیگه مشکلا تت حل شده. چون بالاخره موفق شدی برنامه رو کامپایل کنی. شاید این جای کار تقصیر من باشه. احتمالاً من درس سوم رو بد نوشتم و کاملاً مفهوم نبوده. اگه دقت کرده باشی من این جمله رو نوشتم که:



متد setMainWidget باعث می شود شیئ lable که در خط قبلی ساخته شده است به عنوان شیئ اصلی برنامه در نظر گرفته شود. با انجام این کار وقتی کاربر این پنجره را ببندد اجرای برنامه پایان می پذیرد و منابع تخصیص داده شده به برنامه، به سیستم بازگردانده می شود. اگر این خط را حذف کنیم، برنامه باز هم اجرا می شود ولی بدون MainWidget برنامه در Background در حال اجرا باقی می ماند، حتی اگر تمام پنجره های آن بسته شده باشد.
البته این متد در نسخه چهارم Qt دیگر به کار نمی رود. در نسخه چهارم شما می توانید از تابع lastWindowClosed برای این کار استفاده کنید. این متد نیز متعلق به QApplication می باشد و هنگامی که آخرین پنجره برنامه بسته می شود سیگنال به متد (اسلات) quit ارسال می شود.در واقع در برنامه مورد بحث نیازی به اجرای متد setMainWidget نمی باشد چون متد quit همه کارها را انجام خواهد داد. بنابراین می توان خط هفتم برنامه را حذف کرد.


این جا باید می نوشتم که حتماً باید حذف کرد. :31:البته منظورم از این نوع نوشتن این بوده که می خواستم به مخاطب حالی کنم یه تفاوت هایی بین نسخه های مختلف Qt هست که یه کم مشکل ایجاد می کنه. البته بسیار جزئی هستند. در هر صورت شما اگه خط هفتم برنامه رو کلاً پاک کنی برنامت بدون هیچ مشکلی کامپایل می شه. از این به بعد هم تمام برنامه هایی که می زارم بدون هیچ مشکلی اجرا می شه. بگو ایشالله:20:
حالا راستش رو بگو اصلاً خونده بودی اینا رو یا نه؟ اینو می پرسم تا اشکالات کار خودم رفع بشه. چون من خیال دارم یه کتاب در این مورد بدم بیرون. می خوام ببینم ضعف نوشتارم کجاست؟
تبریک می گم:11: بالاخره با Qt برنامه نوشتی ;)

Cris_Y
10-08-2007, 18:56
salam
hoooooraaaaaaaa!
dorost shod!
na kare shoma eshkali nadasht taghsire man bood. dafe aval baresh dashte boodam, dafe bad ke khastam ba 4.1.4 compilesh konam yadam raft oon khat o pak konam!
az komaketoon mamnoon!
karetoon alie!

Cris_Y
10-08-2007, 19:16
har che migzare eshkalatam maskhare tar mishe!
az barname avale slot ha error migere error:

g++ -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runt
ime-pseudo-reloc -Wl,-s -o "botton.exe" -L"c:\Qt\4.1.4\lib" -L"c:\Qt\4.1.4\lib
" -lQtGui4 -lQtCore4
/mingw/lib/libmingw32.a(main.o):main.c:(.text+0x106): undefined reference to `Wi
="nMain@16'nMain@16'
collect2: ld returned 1 exit status
mingw32-make: *** [hello2.exe] Error 1

a.toraby
10-08-2007, 19:34
با این که از این تاپیک استقبال چندانی نشده و مخصوصاً مدیران تاپیک احتمالاً الان دارند GAME دانلود می کنن و ما رو فراموش کردند. اما همین یکی دو نفری که مطالب رو پی گیری می کنن باعث می شن آدم روحیه پیدا کنه و کارشو ادامه بده.:10: شاید بعد ها کسانی به خاطر همین درس ها عضو P30WORLD شدند.:14:
آدرس درس قبلی:



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

آدرس درس بعدی:



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

چگونه یک اسلات برای یک سیگنال ایجاد کنیم؟
برای این که یک Widget داشته باشیم که به یک سیگنال خاصی جوابگو باشد باید برای آن اسلاتی ایجاد کنیم. در این مثال شیئی را خواهیم داشت که شامل یک شمارنده و یک دکمه می باشد. هنگامی که کاربر بر روی دکمه کلیک می کند شمارنده یک واحد افزایش می یابد.



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

در بالا برنامه اصلی را مشاهده می کنید. این برنامه تنها شامل یک تابع main می باشد، که در خط هشتم آن یک شیئ از روی کلاس ClickCount ایجاد شده است. این کلاس را در فایل دیگری با clickcount.h تعریف خواهیم کرد.



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

در خط ششم تعریف کلاس ما آغاز می شود. بنابر این تعریف، کلاس ما خواص خود را از کلاس QWidget به صورت عمومی به ارث می برد.
اگر نمی دانید وراثت چیست از خواندن ادامه این تاپیک صرف نظر کنید.:41:
شمارنده مورد نظر ما دارای یک دکمه و یک برچسب برای نشان دادن مقدار آن می باشد، بنابراین در خط 15 و 16 به ترتیب، برچسب و دکمه را به عنوان اعضای کلاس ClickCount معرفی کرده ایم. این کلاس یک عضو خیلی ساده هم دارد که متغیر counter می باشد. مقدار شمارنده داخل آن نگهداری می شود.
حال موقع آن رسیده است تا به سوالی که صد رد صد تا الان ذهن شما را آزار داده است جواب داده شود. لازم است بدانید که Q_OBJECT یک ماکرو است. در تعریف هر چیزی که شامل اسلات یا سیگنال می باشد باید از این ماکرو استفاده کرد. فعلاً تا همین جا بدانید کافی است. بنابراین حتماً یادتان باشد هر موقع که خواستید کلاسی بسازید که دارای اسلات یا اسلات هایی است قبل از تعریف آن ها ابتدا ماکروی Q_OBJECT را فراخوانی کنید.
باز، اگر نمی دانید ماکرو چیست، توصیه می شود از خواندن ادامه این تاپیک صرف نظر کنید.:13:
در خط یازدهم ماکروی دیگری به نام slots فراخوانی شده است. این ماکرو به همراه کلمه کلیدی public اعلام می کند که متد incrementCounter یک اسلات عمومی است.
در این فایل، تنها مدل (prototype) تابع سازنده کلاس ، در خط دهم برنامه نوشته شده است. تعریف آن را در فایل دیگری به نام clickcount.cpp قرار می دهیم. این تابع شامل دو آرگومان است. آرگومان اول از نوع کلاس QWidget است. و بیانگر شیئ والد شیئ تولید شده از کلاس ما خواهد بود. کاربرد آرگومان دوم به مسائل debugging مربوط می شود که بعدها توضیح داده خواهد شد.
حال با هم به تعاریف تابع سازنده و اسلات مورد نظر می پردازیم.



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

در خط سیزدهم این برنامه تابع connect را فراخوانی کردیم تا سیگنال clicked را که متعلق به شیئ button است به اسلات incrementCounter که متعلق به نمونه جاری از کلاس ClickCount است، متصل نماید. عملکرد متد incrementCounter هم که واضح است. این تابع یک واحد به متغیر counter می افزاید و عدد داخل برچسب را با مقدار داخل متغیر شمارنده بروز می کند.
باز هم تأکید می کنم، اگر نمی دانید معنی this که در این خط آمده است چیست، از خواندن ادامه تاپیک صرف نظر بفرمایید. و بروید C++ یاد بگیرید و برگردید :27:
برای یادآوری می گویم که اگر می خواهید با استفاده از qmake این برنامه را کامپایل کنید. در دایرکتوری که سه فایل مربوطه را ذخیره کرده اید به ترتیب سه دستور زیر را اجرا کنید.
qmake –project
qmake
make
دستور اول فایل پیکربندی پروژه .pro را ایجاد می کند. و دستور دوم با استفاده از فایل پیکربندی پروژه makefile را ایجاد می کند. البته از همان ابتدا می توانستید با استفاده از یک ویرایشگر متن، makefile را به صورت دستی ایجاد و پیکربندی کنید. بعد از ایجاد makefile، دستور make، کامپایلر gcc را برای کامپایل برنامه و ایجاد فایل اجرایی فراخوانی می کند. بعد از پایان این سه مرحله، فایل اجرایی در دایرکتوری release قرار خواهد داشت.

Cris_Y
10-08-2007, 19:53
:(:(
bazam moshkel too in darse jadid!
error:
mingw32-make -f makefile.Release
mingw32-make[1]: Entering directory `C:/Qt/4.1.4/count'
g++ -c -O2 -O2 -frtti -fexceptions -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_D
LL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN
-I"C:/Qt/4.1.4/include/QtCore" -I"C:/Qt/4.1.4/include/QtGui" -I"C:/Qt/4.1.4/inc
lude" -I"C:/Qt/4.1.4/include/ActiveQt" -I"tmp\moc\release_shared" -I"." -I"..\mk
specs\win32-g++" -o tmp\obj\release_shared\count.o count.cpp
In file included from count.cpp :2 :
clickcount.h: 17 : 8 : warning: no newline at end of file
count.cpp: 19 : 3: warning: no newline at end of file
g++ -c -O2 -O2 -frtti -fexceptions -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_D
LL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN
-I"C:/Qt/4.1.4/include/QtCore" -I"C:/Qt/4.1.4/include/QtGui" -I"C:/Qt/4.1.4/inc
lude" -I"C:/Qt/4.1.4/include/ActiveQt" -I"tmp\moc\release_shared" -I"." -I"..\mk
specs\win32-g++" -o tmp\obj\release_shared\clickcount.o clickcount.cpp
In file included from clickcount.cpp : 2 :
clickcount.h:17 : 8 : warning: no newline at end of file
clickcount.cpp: 19: 3: warning: no newline at end of file
g++ -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runt
ime-pseudo-reloc -Wl,-s -Wl,-s -Wl,-subsystem,windows -o "release\count.exe" tmp
\obj\release_shared\count.o tmp\obj\release_shared\clickcount.o -L"c:\Qt\4.1.4\
lib" -L"c:\Qt\4.1.4\lib" -lmingw32 -lqtmain -lQtGui4 -lQtCore4
tmp\obj\release_shared\count.o:count.cpp:(.text+0x aa): undefined reference to `v
table for ClickCount'
tmp\obj\release_shared\count.o:count.cpp:(.text+0x b1): undefined reference to `v
table for ClickCount'
tmp\obj\release_shared\count.o:count.cpp:(.text+0x 105): undefined reference to `
vtable for ClickCount'
tmp\obj\release_shared\count.o:count.cpp:(.text+0x 117): undefined reference to `
vtable for ClickCount'
tmp\obj\release_shared\clickcount.o:clickcount.cpp :(.text+0x82): undefined refer
ence to `vtable for ClickCount'
tmp\obj\release_shared\clickcount.o:clickcount.cpp :(.text+0x89): more undefined
references to `vtable for ClickCount' follow
collect2: ld returned 1 exit status
mingw32-make[1]: *** [release\count.exe] Error 1
mingw32-make[1]: Leaving directory `C:/Qt/4.1.4/count'
mingw32-make: *** [release] Error 2

hhhheeeeeeeeeelllllppppppp!
fekr konam akharsar az daste man in topico tatil konin! :D
merci

Cris_Y
10-08-2007, 19:59
dar zamn intor naomid nabashid!
topic yekam pish bera bishtar ham shenakhte mishe!
mohem ine ke karetoon alie!

a.toraby
10-08-2007, 21:34
لطفاً مسیری که برنامه ها رو نصب کردی(Qt , mingw) و هم چنین مسیری که فایل های count.exe و بقیه رو توش save کردی برام بنویس. این جوری بهتره. خیلی عجیبه. من هیچ وقت از این مشکل ها نداشتم و الان هم که این درس رو آپلود کردم باز هم امتحانش کردم خیلی راحت کامپایل می شه.

Cris_Y
11-08-2007, 00:32
qt va mingw hardo too c:/ va file count too: c:/qt/4.1.4/count
ye moshkele jadid too barname box male darse ghabl, mige q3hbox.h vojoud nadare!
merci

a.toraby
11-08-2007, 11:26
qt va mingw hardo too c:/ va file count too: c:/qt/4.1.4/count
ye moshkele jadid too barname box male darse ghabl, mige q3hbox.h vojoud nadare!
merci

در مورد q3hbox دیگه واقعاً تقصیر من بود. شرمنده من حواسم نبود برنامه ای که با qt3 کار می کنه رو آپلود کردم. الان اون درس رو آپدیت کردم و کد مربوط به ورژن چهار رو هم گذاشتم.
این مشکل به این علت وجود اومد که من قبلاً از ورژن 3 استفاده می کردم و این مطالبی که این جا قرار دادم تقریباً مال یه سال پیشه و فراموش کرده بودم که همش با نسخه سوم کار می کنه. اما الان ورژن جدیدش رو توی همون درس گذاشتم

اما در مورد clickcount باید بگم خیلی خیلی عجیب به نظر میاد . چون کامپایل برنامه تا قسمت relase کاملاً مشابه با به هم هستند. اما کامایلر شما وقتی می خاد فایل های obj رو درست کنه یه دفعه میره سراغ چیزهای دیگه. من این سوال رو تو qtforum.org مطرح کردم ببینم چی میشه. حالا تا موقعی که اونا جواب بدن شما یه امتحانی بکن. هر چند هیچ ربطی نداره اما شاید کارساز باشه. تمام فایل های count.cpp ، clickcount.h و clickcount.cpp روی توی مسیر c:/Qt/count کپی کن. شاید مشکل از 4.1.4 ای باشه که مسیر جاری فایل های شما داره. :14: البته این خیلی به نظر مسخره میاد ولی ارزش امتحان کردنش رو داره.:13:

در ضمن فایل پروژه ای (.pro ) که تو دایرکتوری شما ساخته شده باید یه چیزی شبیه به همین باشه:



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آیا همین طوره؟ لطفاً محتوای اون فایل رو این جا بزارید

Cris_Y
11-08-2007, 18:38
file e pro:
TARGET+=count
CONFIG+=qt
SOURCES+=count.cpp clickcount.cpp
HEADERs+=clickcount.h

ba jabeja kardane file ham moshkel hal nashod!

va ye chize dige too folder release 2ta file e .o sakhte

darzemn babate virayesh darse box ha kamelan mamnoon
mishe be darsetoon chanta tamrine hal nashode ezafe konin?
bazam mamnoon!

a.toraby
11-08-2007, 19:26
اون یکی مشکل که حل شد؟ یا اون هم error میده هنوز؟
در ضمن لطف کنید فایل رو کامل بذارید. در ضمن فایل Makefile.release و Makefile.debug رو هم بذارید. اگه می شه تو کد و مثل من بذارید. این جوری خوندنشون اعصاب خورد کن میشه ;)

Cris_Y
11-08-2007, 22:48
na oon kole file bood. :31:oon o dasti sakhte boodam
hala ye bar ham ba qmake sakhtam:


################################################## ####################
# Automatically generated by qmake (2.00a) Sat Aug 11 22 08 2007
################################################## ####################
TEMPLATE = app
TARGET +=
DEPENDPATH += .
INCLUDEPATH += .
# Input
HEADERS += clickcount.h
SOURCES += clickcount.cpp count.cpp


va makefile.release:


################################################## ###########################
# Makefile for building: count count
# Generated by qmake (2.00a) (Qt 4.1.4) on: Sat Aug 11 18 06 2007
# Project: count.pro
# Template: app
################################################## ###########################
####### Compiler, tools and options
CC = gcc
CXX = g++
LEX = flex
YACC = byacc
DEFINES = -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN
CFLAGS = -O2 -O2 -Wall $(DEFINES)
CXXFLAGS = -O2 -O2 -frtti -fexceptions -Wall $(DEFINES)
LEXFLAGS =
YACCFLAGS = -d
INCPATH = -I"C:/Qt/4.1.4/include/QtCore" -I"C:/Qt/4.1.4/include/QtGui" -I"C:/Qt/4.1.4/include" -I"C:/Qt/4.1.4/include/ActiveQt" -I"tmp\moc\release_shared" -I"." -I"..\mkspecs\win32-g++"
LINK = g++
LFLAGS = -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -Wl,-s -Wl,-subsystem,windows
LIBS = -L"c:\Qt\4.1.4\lib" -L"c:\Qt\4.1.4\lib" -lmingw32 -lqtmain -lQtGui4 -lQtCore4
QMAKE = qmake
IDC = c:\Qt\4.1.4\bin\idc.exe
IDL = midl
ZIP = zip -r -9
DEF_FILE =
RES_FILE =
COPY = copy /y
COPY_FILE = $(COPY)
COPY_DIR = xcopy /s /q /y /i
DEL_FILE = del
DEL_DIR = rmdir
MOVE = move
CHK_DIR_EXISTS= if not exist
MKDIR = mkdir
INSTALL_FILE = $(COPY_FILE)
INSTALL_DIR = $(COPY_DIR)
####### Output directory
OBJECTS_DIR = tmp\obj\release_shared
####### Files
SOURCES = count.cpp \
clickcount.cpp
OBJECTS = tmp\obj\release_shared\count.o \
tmp\obj\release_shared\clickcount.o
DIST =
QMAKE_TARGET = count count
DESTDIR = release\ #avoid trailing-slash linebreak
TARGET = count.exe
DESTDIR_TARGET = release\count.exe
####### Implicit rules
.SUFFIXES: .c .cpp .cc .cxx
.cpp.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.cc.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.cxx.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.c.o:
$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
####### Build rules
first: all
all: makefile.Release $(DESTDIR_TARGET)
$(DESTDIR_TARGET): $(OBJECTS)
$(LINK) $(LFLAGS) -o "$(DESTDIR_TARGET)" $(OBJECTS) $(LIBS)

qmake: FORCE
@$(QMAKE) -win32 -o makefile.Release count.pro
dist:
$(ZIP) count count.zip $(SOURCES) $(DIST) count.pro ..\mkspecs\features\exclusive_builds.prf ..\mkspecs\features\default_pre.prf ..\mkspecs\features\win32\default_pre.prf C:/Qt/4.1.4/.qmake.cache C:/Qt/4.1.4/mkspecs/qconfig.pri ..\mkspecs\features\qt_config.prf ..\mkspecs\features\release.prf ..\mkspecs\features\debug_and_release.prf ..\mkspecs\features\default_post.prf ..\mkspecs\features\build_pass.prf ..\mkspecs\features\Release.prf ..\mkspecs\features\qt.prf ..\mkspecs\features\win32\thread.prf ..\mkspecs\features\moc.prf ..\mkspecs\features\win32\rtti.prf ..\mkspecs\features\win32\exceptions.prf ..\mkspecs\features\win32\stl.prf ..\mkspecs\features\shared.prf ..\mkspecs\features\warn_on.prf ..\mkspecs\features\win32\windows.prf ..\mkspecs\features\resources.prf ..\mkspecs\features\uic.prf c:\Qt\4.1.4\lib\qtmain.prl HEADERS RESOURCES IMAGES SOURCES FORMS
clean: compiler_clean
-$(DEL_FILE) tmp\obj\release_shared\count.o tmp\obj\release_shared\clickcount.o
distclean: clean
-$(DEL_FILE) "$(DESTDIR_TARGET)"
-$(DEL_FILE) makefile.Release
mocclean: compiler_moc_header_clean compiler_moc_source_clean
mocables: compiler_moc_header_make_all compiler_moc_source_make_all
compiler_moc_header_make_all:
compiler_moc_header_clean:
compiler_rcc_make_all:
compiler_rcc_clean:
compiler_image_collection_make_all:
compiler_image_collection_clean:
-$(DEL_FILE) qmake_image_collection.cpp
compiler_moc_source_make_all:
compiler_moc_source_clean:
compiler_uic_make_all:
compiler_uic_clean:
compiler_clean: compiler_moc_header_clean compiler_rcc_clean compiler_image_collection_clean compiler_moc_source_clean compiler_uic_clean

####### Compile
tmp\obj\release_shared\count.o: count.cpp ..\include\QtGui\qapplication.h \
..\src\gui\kernel\qapplication.h \
..\include\QtCore\qcoreapplication.h \
..\src\corelib\kernel\qcoreapplication.h \
..\include\QtCore\qobject.h \
..\src\corelib\kernel\qobject.h \
..\include\QtCore\qobjectdefs.h \
..\src\corelib\kernel\qobjectdefs.h \
..\include\QtCore\qnamespace.h \
..\src\corelib\global\qnamespace.h \
..\include\QtCore\qglobal.h \
..\src\corelib\global\qglobal.h \
..\include\QtCore\qconfig.h \
..\src\corelib\global\qconfig.h \
..\include\QtCore\qfeatures.h \
..\src\corelib\global\qfeatures.h \
..\include\QtCore\qstring.h \
..\src\corelib\tools\qstring.h \
..\include\QtCore\qchar.h \
..\src\corelib\tools\qchar.h \
..\include\QtCore\qbytearray.h \
..\src\corelib\tools\qbytearray.h \
..\include\QtCore\qatomic.h \
..\src\corelib\thread\qatomic.h \
..\include\QtCore\arch\qatomic.h \
..\src\corelib\arch\windows\arch\qatomic.h \
..\include\Qt3Support\q3cstring.h \
..\src\qt3support\tools\q3cstring.h \
..\include\QtCore\qlist.h \
..\src\corelib\tools\qlist.h \
..\include\QtCore\qiterator.h \
..\src\corelib\tools\qiterator.h \
..\include\QtCore\qalgorithms.h \
..\src\corelib\tools\qalgorithms.h \
..\include\QtCore\qcoreevent.h \
..\src\corelib\kernel\qcoreevent.h \
..\include\QtCore\qeventloop.h \
..\src\corelib\kernel\qeventloop.h \
..\include\QtCore\qstringlist.h \
..\src\corelib\tools\qstringlist.h \
..\include\QtCore\qdatastream.h \
..\src\corelib\io\qdatastream.h \
..\include\QtCore\qiodevice.h \
..\src\corelib\io\qiodevice.h \
..\include\QtCore\qregexp.h \
..\src\corelib\tools\qregexp.h \
..\include\QtCore\qstringmatcher.h \
..\src\corelib\tools\qstringmatcher.h \
..\include\Qt3Support\q3valuelist.h \
..\src\qt3support\tools\q3valuelist.h \
..\include\QtCore\qlinkedlist.h \
..\src\corelib\tools\qlinkedlist.h \
..\include\QtGui\qwindowdefs.h \
..\src\gui\kernel\qwindowdefs.h \
..\include\QtGui\qwindowdefs_win.h \
..\src\gui\kernel\qwindowdefs_win.h \
..\include\QtCore\qpoint.h \
..\src\corelib\tools\qpoint.h \
..\include\QtCore\qsize.h \
..\src\corelib\tools\qsize.h \
..\include\QtGui\qcursor.h \
..\src\gui\kernel\qcursor.h \
..\include\QtGui\qdesktopwidget.h \
..\src\gui\kernel\qdesktopwidget.h \
..\include\QtGui\qwidget.h \
..\src\gui\kernel\qwidget.h \
..\include\QtGui\qpaintdevice.h \
..\src\gui\painting\qpaintdevice.h \
..\include\QtCore\qrect.h \
..\src\corelib\tools\qrect.h \
..\include\QtGui\qpalette.h \
..\src\gui\kernel\qpalette.h \
..\include\QtGui\qcolor.h \
..\src\gui\painting\qcolor.h \
..\include\QtGui\qrgb.h \
..\src\gui\painting\qrgb.h \
..\include\QtGui\qbrush.h \
..\src\gui\painting\qbrush.h \
..\include\QtCore\qpair.h \
..\src\corelib\tools\qpair.h \
..\include\QtCore\qvector.h \
..\src\corelib\tools\qvector.h \
..\include\QtGui\qfont.h \
..\src\gui\text\qfont.h \
..\include\QtGui\qfontmetrics.h \
..\src\gui\text\qfontmetrics.h \
..\include\QtGui\qfontinfo.h \
..\src\gui\text\qfontinfo.h \
..\include\QtGui\qsizepolicy.h \
..\src\gui\kernel\qsizepolicy.h \
..\include\QtGui\qregion.h \
..\src\gui\painting\qregion.h \
..\include\QtGui\qkeysequence.h \
..\src\gui\kernel\qkeysequence.h \
..\include\QtGui\qevent.h \
..\src\gui\kernel\qevent.h \
..\include\QtGui\qmime.h \
..\src\gui\kernel\qmime.h \
..\include\QtCore\qmimedata.h \
..\src\corelib\kernel\qmimedata.h \
..\include\QtCore\qvariant.h \
..\src\corelib\kernel\qvariant.h \
..\include\QtCore\qmetatype.h \
..\src\corelib\kernel\qmetatype.h \
..\include\QtCore\qmap.h \
..\src\corelib\tools\qmap.h \
..\include\QtGui\qdrag.h \
..\src\gui\kernel\qdrag.h \
clickcount.h \
..\include\QtGui\qpushbutton.h \
..\src\gui\widgets\qpushbutton.h \
..\include\QtGui\qabstractbutton.h \
..\src\gui\widgets\qabstractbutton.h \
..\include\QtGui\qicon.h \
..\src\gui\image\qicon.h \
..\include\QtGui\qpixmap.h \
..\src\gui\image\qpixmap.h \
..\include\QtGui\qimage.h \
..\src\gui\image\qimage.h \
..\include\QtGui\qlabel.h \
..\src\gui\widgets\qlabel.h \
..\include\QtGui\qframe.h \
..\src\gui\widgets\qframe.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o tmp\obj\release_shared\count.o count.cpp
tmp\obj\release_shared\clickcount.o: clickcount.cpp clickcount.h \
..\include\QtGui\qpushbutton.h \
..\src\gui\widgets\qpushbutton.h \
..\include\QtGui\qabstractbutton.h \
..\src\gui\widgets\qabstractbutton.h \
..\include\QtGui\qicon.h \
..\src\gui\image\qicon.h \
..\include\QtCore\qglobal.h \
..\src\corelib\global\qglobal.h \
..\include\QtCore\qconfig.h \
..\src\corelib\global\qconfig.h \
..\include\QtCore\qfeatures.h \
..\src\corelib\global\qfeatures.h \
..\include\QtCore\qsize.h \
..\src\corelib\tools\qsize.h \
..\include\QtCore\qnamespace.h \
..\src\corelib\global\qnamespace.h \
..\include\QtGui\qpixmap.h \
..\src\gui\image\qpixmap.h \
..\include\QtGui\qpaintdevice.h \
..\src\gui\painting\qpaintdevice.h \
..\include\QtGui\qwindowdefs.h \
..\src\gui\kernel\qwindowdefs.h \
..\include\QtCore\qobjectdefs.h \
..\src\corelib\kernel\qobjectdefs.h \
..\include\QtGui\qwindowdefs_win.h \
..\src\gui\kernel\qwindowdefs_win.h \
..\include\QtCore\qrect.h \
..\src\corelib\tools\qrect.h \
..\include\QtCore\qpoint.h \
..\src\corelib\tools\qpoint.h \
..\include\QtGui\qcolor.h \
..\src\gui\painting\qcolor.h \
..\include\QtGui\qrgb.h \
..\src\gui\painting\qrgb.h \
..\include\QtCore\qstringlist.h \
..\src\corelib\tools\qstringlist.h \
..\include\QtCore\qalgorithms.h \
..\src\corelib\tools\qalgorithms.h \
..\include\QtCore\qdatastream.h \
..\src\corelib\io\qdatastream.h \
..\include\QtCore\qiodevice.h \
..\src\corelib\io\qiodevice.h \
..\include\QtCore\qobject.h \
..\src\corelib\kernel\qobject.h \
..\include\QtCore\qstring.h \
..\src\corelib\tools\qstring.h \
..\include\QtCore\qchar.h \
..\src\corelib\tools\qchar.h \
..\include\QtCore\qbytearray.h \
..\src\corelib\tools\qbytearray.h \
..\include\QtCore\qatomic.h \
..\src\corelib\thread\qatomic.h \
..\include\QtCore\arch\qatomic.h \
..\src\corelib\arch\windows\arch\qatomic.h \
..\include\Qt3Support\q3cstring.h \
..\src\qt3support\tools\q3cstring.h \
..\include\QtCore\qlist.h \
..\src\corelib\tools\qlist.h \
..\include\QtCore\qiterator.h \
..\src\corelib\tools\qiterator.h \
..\include\QtCore\qcoreevent.h \
..\src\corelib\kernel\qcoreevent.h \
..\include\QtCore\qregexp.h \
..\src\corelib\tools\qregexp.h \
..\include\QtCore\qstringmatcher.h \
..\src\corelib\tools\qstringmatcher.h \
..\include\Qt3Support\q3valuelist.h \
..\src\qt3support\tools\q3valuelist.h \
..\include\QtCore\qlinkedlist.h \
..\src\corelib\tools\qlinkedlist.h \
..\include\QtGui\qimage.h \
..\src\gui\image\qimage.h \
..\include\QtGui\qkeysequence.h \
..\src\gui\kernel\qkeysequence.h \
..\include\QtGui\qwidget.h \
..\src\gui\kernel\qwidget.h \
..\include\QtGui\qpalette.h \
..\src\gui\kernel\qpalette.h \
..\include\QtGui\qbrush.h \
..\src\gui\painting\qbrush.h \
..\include\QtCore\qpair.h \
..\src\corelib\tools\qpair.h \
..\include\QtCore\qvector.h \
..\src\corelib\tools\qvector.h \
..\include\QtGui\qfont.h \
..\src\gui\text\qfont.h \
..\include\QtGui\qfontmetrics.h \
..\src\gui\text\qfontmetrics.h \
..\include\QtGui\qfontinfo.h \
..\src\gui\text\qfontinfo.h \
..\include\QtGui\qsizepolicy.h \
..\src\gui\kernel\qsizepolicy.h \
..\include\QtGui\qregion.h \
..\src\gui\painting\qregion.h \
..\include\QtGui\qcursor.h \
..\src\gui\kernel\qcursor.h \
..\include\QtGui\qevent.h \
..\src\gui\kernel\qevent.h \
..\include\QtGui\qmime.h \
..\src\gui\kernel\qmime.h \
..\include\QtCore\qmimedata.h \
..\src\corelib\kernel\qmimedata.h \
..\include\QtCore\qvariant.h \
..\src\corelib\kernel\qvariant.h \
..\include\QtCore\qmetatype.h \
..\src\corelib\kernel\qmetatype.h \
..\include\QtCore\qmap.h \
..\src\corelib\tools\qmap.h \
..\include\QtGui\qdrag.h \
..\src\gui\kernel\qdrag.h \
..\include\QtGui\qlabel.h \
..\src\gui\widgets\qlabel.h \
..\include\QtGui\qframe.h \
..\src\gui\widgets\qframe.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o tmp\obj\release_shared\clickcount.o clickcount.cpp
####### Install
install: FORCE
uninstall: FORCE
FORCE:


makefile.debug:


################################################## ###########################
# Makefile for building: count count
# Generated by qmake (2.00a) (Qt 4.1.4) on: Sat Aug 11 18 06 2007
# Project: count.pro
# Template: app
################################################## ###########################
####### Compiler, tools and options
CC = gcc
CXX = g++
LEX = flex
YACC = byacc
DEFINES = -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN
CFLAGS = -g -g -Wall $(DEFINES)
CXXFLAGS = -g -g -frtti -fexceptions -Wall $(DEFINES)
LEXFLAGS =
YACCFLAGS = -d
INCPATH = -I"C:/Qt/4.1.4/include/QtCore" -I"C:/Qt/4.1.4/include/QtGui" -I"C:/Qt/4.1.4/include" -I"C:/Qt/4.1.4/include/ActiveQt" -I"tmp\moc\debug_shared" -I"." -I"..\mkspecs\win32-g++"
LINK = g++
LFLAGS = -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,windows
LIBS = -L"c:\Qt\4.1.4\lib" -L"c:\Qt\4.1.4\lib" -lmingw32 -lqtmaind -lQtGuid4 -lQtCored4
QMAKE = qmake
IDC = c:\Qt\4.1.4\bin\idc.exe
IDL = midl
ZIP = zip -r -9
DEF_FILE =
RES_FILE =
COPY = copy /y
COPY_FILE = $(COPY)
COPY_DIR = xcopy /s /q /y /i
DEL_FILE = del
DEL_DIR = rmdir
MOVE = move
CHK_DIR_EXISTS= if not exist
MKDIR = mkdir
INSTALL_FILE = $(COPY_FILE)
INSTALL_DIR = $(COPY_DIR)
####### Output directory
OBJECTS_DIR = tmp\obj\debug_shared
####### Files
SOURCES = count.cpp \
clickcount.cpp
OBJECTS = tmp\obj\debug_shared\count.o \
tmp\obj\debug_shared\clickcount.o
DIST =
QMAKE_TARGET = count count
DESTDIR = debug\ #avoid trailing-slash linebreak
TARGET = count.exe
DESTDIR_TARGET = debug\count.exe
####### Implicit rules
.SUFFIXES: .c .cpp .cc .cxx
.cpp.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.cc.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.cxx.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
.c.o:
$(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
####### Build rules
first: all
all: makefile.Debug $(DESTDIR_TARGET)
$(DESTDIR_TARGET): $(OBJECTS)
$(LINK) $(LFLAGS) -o "$(DESTDIR_TARGET)" $(OBJECTS) $(LIBS)

qmake: FORCE
@$(QMAKE) -win32 -o makefile.Debug count.pro
dist:
$(ZIP) count count.zip $(SOURCES) $(DIST) count.pro ..\mkspecs\features\exclusive_builds.prf ..\mkspecs\features\default_pre.prf ..\mkspecs\features\win32\default_pre.prf C:/Qt/4.1.4/.qmake.cache C:/Qt/4.1.4/mkspecs/qconfig.pri ..\mkspecs\features\qt_config.prf ..\mkspecs\features\debug.prf ..\mkspecs\features\debug_and_release.prf ..\mkspecs\features\default_post.prf ..\mkspecs\features\build_pass.prf ..\mkspecs\features\Debug.prf ..\mkspecs\features\qt.prf ..\mkspecs\features\win32\thread.prf ..\mkspecs\features\moc.prf ..\mkspecs\features\win32\rtti.prf ..\mkspecs\features\win32\exceptions.prf ..\mkspecs\features\win32\stl.prf ..\mkspecs\features\shared.prf ..\mkspecs\features\warn_on.prf ..\mkspecs\features\win32\windows.prf ..\mkspecs\features\resources.prf ..\mkspecs\features\uic.prf c:\Qt\4.1.4\lib\qtmaind.prl HEADERS RESOURCES IMAGES SOURCES FORMS
clean: compiler_clean
-$(DEL_FILE) tmp\obj\debug_shared\count.o tmp\obj\debug_shared\clickcount.o
distclean: clean
-$(DEL_FILE) "$(DESTDIR_TARGET)"
-$(DEL_FILE) makefile.Debug
mocclean: compiler_moc_header_clean compiler_moc_source_clean
mocables: compiler_moc_header_make_all compiler_moc_source_make_all
compiler_moc_header_make_all:
compiler_moc_header_clean:
compiler_rcc_make_all:
compiler_rcc_clean:
compiler_image_collection_make_all:
compiler_image_collection_clean:
-$(DEL_FILE) qmake_image_collection.cpp
compiler_moc_source_make_all:
compiler_moc_source_clean:
compiler_uic_make_all:
compiler_uic_clean:
compiler_clean: compiler_moc_header_clean compiler_rcc_clean compiler_image_collection_clean compiler_moc_source_clean compiler_uic_clean

####### Compile
tmp\obj\debug_shared\count.o: count.cpp ..\include\QtGui\qapplication.h \
..\src\gui\kernel\qapplication.h \
..\include\QtCore\qcoreapplication.h \
..\src\corelib\kernel\qcoreapplication.h \
..\include\QtCore\qobject.h \
..\src\corelib\kernel\qobject.h \
..\include\QtCore\qobjectdefs.h \
..\src\corelib\kernel\qobjectdefs.h \
..\include\QtCore\qnamespace.h \
..\src\corelib\global\qnamespace.h \
..\include\QtCore\qglobal.h \
..\src\corelib\global\qglobal.h \
..\include\QtCore\qconfig.h \
..\src\corelib\global\qconfig.h \
..\include\QtCore\qfeatures.h \
..\src\corelib\global\qfeatures.h \
..\include\QtCore\qstring.h \
..\src\corelib\tools\qstring.h \
..\include\QtCore\qchar.h \
..\src\corelib\tools\qchar.h \
..\include\QtCore\qbytearray.h \
..\src\corelib\tools\qbytearray.h \
..\include\QtCore\qatomic.h \
..\src\corelib\thread\qatomic.h \
..\include\QtCore\arch\qatomic.h \
..\src\corelib\arch\windows\arch\qatomic.h \
..\include\Qt3Support\q3cstring.h \
..\src\qt3support\tools\q3cstring.h \
..\include\QtCore\qlist.h \
..\src\corelib\tools\qlist.h \
..\include\QtCore\qiterator.h \
..\src\corelib\tools\qiterator.h \
..\include\QtCore\qalgorithms.h \
..\src\corelib\tools\qalgorithms.h \
..\include\QtCore\qcoreevent.h \
..\src\corelib\kernel\qcoreevent.h \
..\include\QtCore\qeventloop.h \
..\src\corelib\kernel\qeventloop.h \
..\include\QtCore\qstringlist.h \
..\src\corelib\tools\qstringlist.h \
..\include\QtCore\qdatastream.h \
..\src\corelib\io\qdatastream.h \
..\include\QtCore\qiodevice.h \
..\src\corelib\io\qiodevice.h \
..\include\QtCore\qregexp.h \
..\src\corelib\tools\qregexp.h \
..\include\QtCore\qstringmatcher.h \
..\src\corelib\tools\qstringmatcher.h \
..\include\Qt3Support\q3valuelist.h \
..\src\qt3support\tools\q3valuelist.h \
..\include\QtCore\qlinkedlist.h \
..\src\corelib\tools\qlinkedlist.h \
..\include\QtGui\qwindowdefs.h \
..\src\gui\kernel\qwindowdefs.h \
..\include\QtGui\qwindowdefs_win.h \
..\src\gui\kernel\qwindowdefs_win.h \
..\include\QtCore\qpoint.h \
..\src\corelib\tools\qpoint.h \
..\include\QtCore\qsize.h \
..\src\corelib\tools\qsize.h \
..\include\QtGui\qcursor.h \
..\src\gui\kernel\qcursor.h \
..\include\QtGui\qdesktopwidget.h \
..\src\gui\kernel\qdesktopwidget.h \
..\include\QtGui\qwidget.h \
..\src\gui\kernel\qwidget.h \
..\include\QtGui\qpaintdevice.h \
..\src\gui\painting\qpaintdevice.h \
..\include\QtCore\qrect.h \
..\src\corelib\tools\qrect.h \
..\include\QtGui\qpalette.h \
..\src\gui\kernel\qpalette.h \
..\include\QtGui\qcolor.h \
..\src\gui\painting\qcolor.h \
..\include\QtGui\qrgb.h \
..\src\gui\painting\qrgb.h \
..\include\QtGui\qbrush.h \
..\src\gui\painting\qbrush.h \
..\include\QtCore\qpair.h \
..\src\corelib\tools\qpair.h \
..\include\QtCore\qvector.h \
..\src\corelib\tools\qvector.h \
..\include\QtGui\qfont.h \
..\src\gui\text\qfont.h \
..\include\QtGui\qfontmetrics.h \
..\src\gui\text\qfontmetrics.h \
..\include\QtGui\qfontinfo.h \
..\src\gui\text\qfontinfo.h \
..\include\QtGui\qsizepolicy.h \
..\src\gui\kernel\qsizepolicy.h \
..\include\QtGui\qregion.h \
..\src\gui\painting\qregion.h \
..\include\QtGui\qkeysequence.h \
..\src\gui\kernel\qkeysequence.h \
..\include\QtGui\qevent.h \
..\src\gui\kernel\qevent.h \
..\include\QtGui\qmime.h \
..\src\gui\kernel\qmime.h \
..\include\QtCore\qmimedata.h \
..\src\corelib\kernel\qmimedata.h \
..\include\QtCore\qvariant.h \
..\src\corelib\kernel\qvariant.h \
..\include\QtCore\qmetatype.h \
..\src\corelib\kernel\qmetatype.h \
..\include\QtCore\qmap.h \
..\src\corelib\tools\qmap.h \
..\include\QtGui\qdrag.h \
..\src\gui\kernel\qdrag.h \
clickcount.h \
..\include\QtGui\qpushbutton.h \
..\src\gui\widgets\qpushbutton.h \
..\include\QtGui\qabstractbutton.h \
..\src\gui\widgets\qabstractbutton.h \
..\include\QtGui\qicon.h \
..\src\gui\image\qicon.h \
..\include\QtGui\qpixmap.h \
..\src\gui\image\qpixmap.h \
..\include\QtGui\qimage.h \
..\src\gui\image\qimage.h \
..\include\QtGui\qlabel.h \
..\src\gui\widgets\qlabel.h \
..\include\QtGui\qframe.h \
..\src\gui\widgets\qframe.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o tmp\obj\debug_shared\count.o count.cpp
tmp\obj\debug_shared\clickcount.o: clickcount.cpp clickcount.h \
..\include\QtGui\qpushbutton.h \
..\src\gui\widgets\qpushbutton.h \
..\include\QtGui\qabstractbutton.h \
..\src\gui\widgets\qabstractbutton.h \
..\include\QtGui\qicon.h \
..\src\gui\image\qicon.h \
..\include\QtCore\qglobal.h \
..\src\corelib\global\qglobal.h \
..\include\QtCore\qconfig.h \
..\src\corelib\global\qconfig.h \
..\include\QtCore\qfeatures.h \
..\src\corelib\global\qfeatures.h \
..\include\QtCore\qsize.h \
..\src\corelib\tools\qsize.h \
..\include\QtCore\qnamespace.h \
..\src\corelib\global\qnamespace.h \
..\include\QtGui\qpixmap.h \
..\src\gui\image\qpixmap.h \
..\include\QtGui\qpaintdevice.h \
..\src\gui\painting\qpaintdevice.h \
..\include\QtGui\qwindowdefs.h \
..\src\gui\kernel\qwindowdefs.h \
..\include\QtCore\qobjectdefs.h \
..\src\corelib\kernel\qobjectdefs.h \
..\include\QtGui\qwindowdefs_win.h \
..\src\gui\kernel\qwindowdefs_win.h \
..\include\QtCore\qrect.h \
..\src\corelib\tools\qrect.h \
..\include\QtCore\qpoint.h \
..\src\corelib\tools\qpoint.h \
..\include\QtGui\qcolor.h \
..\src\gui\painting\qcolor.h \
..\include\QtGui\qrgb.h \
..\src\gui\painting\qrgb.h \
..\include\QtCore\qstringlist.h \
..\src\corelib\tools\qstringlist.h \
..\include\QtCore\qalgorithms.h \
..\src\corelib\tools\qalgorithms.h \
..\include\QtCore\qdatastream.h \
..\src\corelib\io\qdatastream.h \
..\include\QtCore\qiodevice.h \
..\src\corelib\io\qiodevice.h \
..\include\QtCore\qobject.h \
..\src\corelib\kernel\qobject.h \
..\include\QtCore\qstring.h \
..\src\corelib\tools\qstring.h \
..\include\QtCore\qchar.h \
..\src\corelib\tools\qchar.h \
..\include\QtCore\qbytearray.h \
..\src\corelib\tools\qbytearray.h \
..\include\QtCore\qatomic.h \
..\src\corelib\thread\qatomic.h \
..\include\QtCore\arch\qatomic.h \
..\src\corelib\arch\windows\arch\qatomic.h \
..\include\Qt3Support\q3cstring.h \
..\src\qt3support\tools\q3cstring.h \
..\include\QtCore\qlist.h \
..\src\corelib\tools\qlist.h \
..\include\QtCore\qiterator.h \
..\src\corelib\tools\qiterator.h \
..\include\QtCore\qcoreevent.h \
..\src\corelib\kernel\qcoreevent.h \
..\include\QtCore\qregexp.h \
..\src\corelib\tools\qregexp.h \
..\include\QtCore\qstringmatcher.h \
..\src\corelib\tools\qstringmatcher.h \
..\include\Qt3Support\q3valuelist.h \
..\src\qt3support\tools\q3valuelist.h \
..\include\QtCore\qlinkedlist.h \
..\src\corelib\tools\qlinkedlist.h \
..\include\QtGui\qimage.h \
..\src\gui\image\qimage.h \
..\include\QtGui\qkeysequence.h \
..\src\gui\kernel\qkeysequence.h \
..\include\QtGui\qwidget.h \
..\src\gui\kernel\qwidget.h \
..\include\QtGui\qpalette.h \
..\src\gui\kernel\qpalette.h \
..\include\QtGui\qbrush.h \
..\src\gui\painting\qbrush.h \
..\include\QtCore\qpair.h \
..\src\corelib\tools\qpair.h \
..\include\QtCore\qvector.h \
..\src\corelib\tools\qvector.h \
..\include\QtGui\qfont.h \
..\src\gui\text\qfont.h \
..\include\QtGui\qfontmetrics.h \
..\src\gui\text\qfontmetrics.h \
..\include\QtGui\qfontinfo.h \
..\src\gui\text\qfontinfo.h \
..\include\QtGui\qsizepolicy.h \
..\src\gui\kernel\qsizepolicy.h \
..\include\QtGui\qregion.h \
..\src\gui\painting\qregion.h \
..\include\QtGui\qcursor.h \
..\src\gui\kernel\qcursor.h \
..\include\QtGui\qevent.h \
..\src\gui\kernel\qevent.h \
..\include\QtGui\qmime.h \
..\src\gui\kernel\qmime.h \
..\include\QtCore\qmimedata.h \
..\src\corelib\kernel\qmimedata.h \
..\include\QtCore\qvariant.h \
..\src\corelib\kernel\qvariant.h \
..\include\QtCore\qmetatype.h \
..\src\corelib\kernel\qmetatype.h \
..\include\QtCore\qmap.h \
..\src\corelib\tools\qmap.h \
..\include\QtGui\qdrag.h \
..\src\gui\kernel\qdrag.h \
..\include\QtGui\qlabel.h \
..\src\gui\widgets\qlabel.h \
..\include\QtGui\qframe.h \
..\src\gui\widgets\qframe.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o tmp\obj\debug_shared\clickcount.o clickcount.cpp
####### Install
install: FORCE
uninstall: FORCE
FORCE:

a.toraby
13-08-2007, 20:45
:18: :18: :18: :18: :18: :18:
معلوم هست چی کار کردی؟؟؟؟؟؟؟؟؟؟ :41:

اینا چیه دیگه؟
محتوای makefile منو ببین:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اینو با فایل خودت مقایسه کن.خوب حالا به این نرم افزار بدبخت حق بده که error بده. میشه همه اون کارها رو از اول انجام بدی؟ همون طور که گفته شد. فایل های مربوطه رو ایجاد کن. تو یه فولدر به اسم مثلاً clickcount بعدش هم به ترتیب سه دستورqmake -project و qmake وآخر از همه make رو اجرا کن. ورژن mingw رو هم برام بنویس.
آخه واسه چی خودت دستی ساخته یودی؟؟؟؟؟ برای این کار باید خیلی تجربه داشته باشی. از تمام کتابخانه ها سر در بیاری. همین جوری کشکی که نیست. به جای این کار می رفتی کار با qmake رو دقیقاً یاد می گرفتی. اگه قرار باشه یه پروژه بزرگ رو مدیریت کنی چه جوری میخای به صورت دستی فایلش رو درست کنی؟؟؟

Cris_Y
13-08-2007, 21:02
dare halam az qt beham mikhore!
avalan ke faghat .pro ro dasti sakhte boodam. ba filei ke khodesh misaze faghi nadasht
badam emrooz sob ye dor dige make kardam dar kamale taajob error nadad! dar hali ke 3 rooze har 5min daram make mikonam! akhe chera?!!!
badam hala eshtebah az man boode ya shoma man makefile.debug va release o ferestadam na makefile o. fekr kardam oona ro mikhayn
bazam mamnoon!
va baraye bare 100om: mishe tamrin bezarin? albate agar momkene!

a.toraby
13-08-2007, 22:06
dare halam az qt beham mikhore!
avalan ke faghat .pro ro dasti sakhte boodam. ba filei ke khodesh misaze faghi nadasht
badam emrooz sob ye dor dige make kardam dar kamale taajob error nadad! dar hali ke 3 rooze har 5min daram make mikonam! akhe chera?!!!
badam hala eshtebah az man boode ya shoma man makefile.debug va release o ferestadam na makefile o. fekr kardam oona ro mikhayn
bazam mamnoon!
va baraye bare 100om: mishe tamrin bezarin? albate agar momkene!

خوب ببین عزیز کامپیتور که خودش عشقی یه کاری نمی کنه. مطمئن باش یه جای کار داری سوتی میدی. مثلاً من اصلاً نمی ونم makefile.o چیه؟؟ من که همچین چیزی هیچ وقت ندیدم. این فایلی هم ه گذاشتم makefile.release هستش نه makefile.o. به تفاوتشون نگاه کن. ببین مال تو یه مشت فایل عجیب غریب آورده تو کامپایل در صورتی که makefile من 180 خط بیشتر نیست. من اصلاً سر در نمیام چی کار کردی. توی qtforum.org هم کسی نفهمید چی کار کردی :31: حالا خودتو ناراحت نکن.
در مورد تمرین هم چشم،می زارم. به زودی

Cris_Y
14-08-2007, 11:18
akhe koja! hata qmake ham nazadam faghat make! man kei goftam makefile.o? .o nadare yani shoma hamchin chizi nadidin?!! badam man kari nakardam qmake file a ro sakhte pas moshkel nemitoone in bashe.
bazam mamnoon.

a.toraby
14-08-2007, 13:22
akhe koja! hata qmake ham nazadam faghat make!.



ببخشید منظورتون چیه از ین جمله؟؟ بالا خره شما qmake زدی یا نزدی؟:13: منو گیج کردی:41: بدون qmake که نمیشه. یه بار از اول شروع می کنیم. شما یه فولدر بساز به اسم clickcount بعد سه تا فایل برنامه رو بزار توش . بعدش هم به ترتیب سه تا دستور زیر رو اجرا کن.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Cris_Y
14-08-2007, 15:19
oh sorry bad goftam. manzooram in bood ke oon barname ke dorost shod ro dobare qmake nakarde boodam. hamoon qmake bare aval bood . yani makefile ha avaz nashode boodan. va man faghat dobare makesh kardam!
chandta soal:
avalan ke tavabei mesle clicked() va setGeometery() ozve che classian?
dige ham inke metody baraye get value kardan az ye spinboz ya slider ya... vojoud dare?

merci

a.toraby
14-08-2007, 17:02
متد clicked یکی از سیگنال های Qt هستش که در کلاس QAbstractButton تعریف شده. حتی می ونی بری ببینی چه جوری کار می کنه. کلاس QAbstractButton که همون کلاسی هستش که QPushButton ازش وراثت گرفته. توجه داشته باش که QAbstractButton یک کلاس Abstract هستش و نمیشه از روش شیئی تولید کرد. ولی QPushButton این متد رو از کلاس پایه خودش یعنی همون QAbstractButton به ارث برده. تو ای برنامه میشه از pressed() هم به جای clicked() استفاده کرد.

متد setGeometry هم متعلق به کلاس QWidget هستش دیگه . به این ترتیب تمام widget هایی که شما درست می کنی می تونن دارای سایزهای مختلفی باشند. یادته هست که QPushButton هم در نهایت یکی از فرزندان QWidget هست.

در مورد slider و spinbox هم توابع setValue و valueChanged همین کاری که شما می خای می کنن دیگه. دقیقاً تو برنامه همین کاربرد آموزش داده شده. این توابع مقدار یک متغیر private به اسم value رو در دسترس قرار می دن. برای هر دو کلاس slider و spinbox مشترک هستن.

Cris_Y
14-08-2007, 23:32
agar dorost fahmide basham setvalue meghdare slider ro set mikone va valuechanged neshoon mide ke aya meghdar avaz shode ya na. darvaghe ye event ro neshoon mide. vali ina hich kodoom neshoon nemidan ke meghdare slider chie. yani nemitoonim meghdaro begirim o masalan ye jaye dige azash estefade konim.

a.toraby
15-08-2007, 05:29
اگه دقت کنی می بینی که هر دو این توابع یک آرگومان از نوع int دارن. که همون مقدار مورد نظر هستش. وقتی سیگنال valuechanged رو به اسلات setvalue دیگری متصل می کنیم. این آرگومان مقدار درون متغیر value رو انتقال می ده


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

Cris_Y
17-08-2007, 22:55
ghasd edame dadan nadarin?!

a.toraby
19-08-2007, 20:53
آدرس درس قبلی



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ایجاد دیالوگ ها
در این فصل با نحوه ایجاد دیلوگ ها آشنا می شویم. دیالوگ ها فرم هایی هستند که ارتباط بین کاربر و برنامه را میسر می سازند، از همین رو نام محاوره را برای آن ها برگزیدیم.
دیالوگ ها گزینه ها و انتخاب های مربوط به نرم افزار را در اختیار کاربر قرار می دهند. اطلاعاتی را به کاربر نشان می دهند یا اطلاعات خاصی را از او درخواست می کنند. بسیاری از دیالوگ ها خیلی ساده هستند و تنها شامل یک یا دو دکمه Cancel و Ok می باشند اما همه آن ها اینطور نیستند. به عنوان مثال می توان به ماشین حساب ویندوز اشاره کرد که تنها از یک دیالوگ تشکیل شده است.
اغلب نرم افزارها شامل یک پنجره اصلی همراه با یک نوار منو و نوار ابزار هستند. اما در عین حال می توان نرم افزاری را ایجاد نمود که فقط شامل یک دیالوگ باشد. این نوع از نرم افزار ها بر پایه دیالوگ توسعه داده می شوند.
دیالوگ ها را می توان از طریق کدنویسی یا با استفاده از نرم افزار Qt designer ایجاد نمود. ابزار Qt designer راه حل سریع تری برای طراحی فرم های یک برنامه می باشد. اما در هر حال، بدون فراگیری جزئیات، نمی توان کار را به خوبی پیش برد. با کدنویسی، قابلیت های بیشتری را می توانید به کار ببرید.
از آن جا که کلاس های توسعه پذیر زیادی بر اساس دیالوگ ها وجود دارند، روش های زیادی نیز برای پیاده سازی دیالوگ ها در اختیار برنامه نویس قرار دارند. علاوه بر این ها می توان از کلاس های پایه برای ساخت دیالوگ های نسبتاً ساده استفاده کرد. در این بخش با روش های گوناگون ایجاد دیالوگ ها و معایب و مزایای هر کدام از آن ها آشنا خواهیم شد.
یک دیالوگ ساده
حال موقع آن رسیده است تا با یک کلاس جدید آشنا شویم. نام این کلاس QDialog است. شما می توانید از این کلاس برای ساخت دیالوگ ها استفاده کنید، آن را برای آرایش نحوه قرارگیری Widget های ساده در کنار هم نیز به کار خواهید برد. کلاس QDialog خودش به تنهایی فقط یک پنجره خیلی ساده و خالی است که البته می توان Widget های زیادی را داخل آن قرار داد.
ابتدا با مطرح کردن یک مثال ساده روش ایجاد یک دیالوگ را بررسی می کنیم. در این مثال قصد داریم دیالوگ Find در KDE را ایجاد نماییم. شکل این دیالوگ را در زیر مشاهده می کنید.


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

برای این کار ابتدا کلاسی تحت عنوان finddialog ایجاد می کنیم. برنامه سه فایل جداگانه به نام های finddialog.h ، finddialog.cpp و main.cpp خواهد داشت. دو فایل اول حاوی تعاریف مربوط به کلاس finddialog می باشند. و فایل سوم شامل تابع main و محل شروع اجرای برنامه می باشد.
در زیر محتویات فایل finddlialog.h را مشاهده می کنید:



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

از آنجا که کلاس مذکور ویژگی های خود را از کلاس QDialog به ارث می برد باید قبل از هر کاری فایل Qdialog.h را وارد برنامه کنیم. این عمل در خط سوم انجام شده است.
خط چهار تا هفتم برنامه شامل پیش اعلان کلاس های مورد نیاز در پیاده سازی کلاس finddialog می باشند. می توانستیم به جای استفاده از پیش اعلان، فایل های مربوط به این کلاس ها را با استفاده از دستور include مورد استفاده قرار دهیم، اما از آن جا که تمام متغیرهای درون تعریف کلاس از نوع اشاره گرها می باشند و می توان از پیش اعلان استفاده نمود ما این روش را برگزیدیم، زیرا با به کارگیری این روش سرعت کامپایلر بهبود میابد.
در خط هشتم تعریف کلاس را آغاز کرده ایم. همان طور که می بینید عمل وراثت به صورت عمومی انجام می شود و QDialog کلاس والد است. ماکروی Q_OBJECT هم، که طبق گفته های فصل قبل باید فراخوانی شود. در خط 12 برنامه، الگوی سازنده کلاس را بیان کرده ایم.
دو متد findNext و findPrev نیز سیگنال هایی هستند که یکی از آن ها، بسته به فعال یا غیر فعال بودن گزینه search backward، برای اسلات findClicked ارسال خواهند شد. این سیگنال ها زمانی ارسال می شوند که دکمه find فشرده شود.
حال به جزئیات درون فایل fiddialog.cpp می پردازیم که شامل پیاده سازی و اجرای کامل کلاس finddialog می باشد.



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

همانطور که می بینید در اولین قدم، فایل های مربوط به کلاس های مورد نیاز را به همراه فایل هدری که خودمان ایجاد کرده ایم، وارد برنامه می کنیم.
در خط هفتم تعریف دقیق متد سازنده کلاس آغاز می شود.
تابع setWindowTitle، متنی که هنگام اجرای برنامه در titlebar پنجره ظاهر می شود، تعیین می کند. در نسخه های قبلی Qt این کار را تابع setCaption انجام می داد. تابع tr به شما این امکان را می دهد که نرم افزار خود را با استفاده از ابزار Qt Translator به زبان های مختلف ترجمه کنید. در این مورد در فصلی جداگانه توضیح داده خواهد شد.
حال نوبت آن است که تمام اجزای پنجره find را ایجاد نماییم. این اجزاء را در خطوط 11 تا 20 ساخته ایم و تنظیمات لازم را انجام داده ایم.
با کمی دقت متوجه می شوید که تمام اشیائی که ایجاد می شوند فرزند شیئ جاری (به کلمه this توجه کنید) هستند. بدین ترتیب تمام این اشیاء درون شیئ والد، یعنی شیئ ساخته شده از روی کلاس finddialog قرار خواهند داشت. حال فقط کافی است که مکان قرارگیری آن ها را تعیین کنیم. این کار را در خطوط 26 تا 41 برنامه انجام داده ایم. با این توابع در فصل آینده آشنا خواهید شد. در حال حاضر برای این که تأثیر خطوط فوق را در اجرای برنامه درک کنید می توانید آن ها را حذف کنید و برنامه را کامپایل کنید. خواهید دید که تمام اشیای ایجاد شده رو هم میفتند و قابل تشخیص نیستند.
در خط پانزدهم به عبارتSearch &backward توجه کنید. علامت & باعث می شود، در اثر فشردن دکمه Alt+B از روی صفحه کلید این گزینه فعال یا غیرفعال شود. به این کلیدها اصطلاحاً کلیدهای شتاب دهنده می گویند.
نکته قابل توجه دیگری که در این برنامه وجود دارد، تابع setDefault می باشد. این تابع باعث می شود در ابتدای اجرای برنامه شیئ مربوطه در حالت جذب باشد. مثلاً در این برنامه با فشردن کلید Enter دکمه findButton عمل خواهد کرد. بلافاصله در خط بعدی تابع setEnabled را با پارامتر false فراخوانی کرده ایم. این تابع باعث می شود دکمه مورد نظر غیرفعال شود. این حالت از روی ظاهر خاکستری رنگ دکمه مشخص خواهد بود.
تابع setBuddy که در خط 13 قید شده است باعث می شود هنگامی که کاربر کلید شتاب دهنده Alt+W را فشار می دهد focus صفحه کلید بطور اتوماتیک به شیئ lineEdit منتقل شود.
بعد از ایجاد تمام این اجزاء، نوبت آن است که اتصالات بین آن ها را ایجاد کنیم. این کار را در خطوط 20 تا 25 برنامه انجام داده ایم.
به عنوان مثال خط 20 و 21 را توضیح می دهیم. در این جا سیگنالی از طرف شیئ فرزند به شیئ والد فرستاده می شود. به این ترتیب که هنگام تغییر متن درون lineEdit سیگنال textChanged برای شیئ جاری فرستاده می شود و اسلات enableFindButton را فراخوانی می کند. آرگومان این تابع حاوی رشته جدید می باشد. دقت داشته باشید که اسلات موردنظر را در خط 52 تعریف کرده ایم.
در ضمن در تابع findClicked با نحوه کار با جعبه های انتخابی آشنا می شوید.
در زیر فایل main.cpp را مشاهده می کنید. تنها کاری که در این جا انجام می دهیم ایجاد یک شیئ از روی کلاس FindDialog است.



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

Cris_Y
21-08-2007, 10:50
salam
ye soal. in barname gharare chiro search kone?
va methode findNext koja tashkil shode?
merci

rootnt
21-08-2007, 15:41
با تشکر از شما دوست عزیز


جناب Cris_Y
لازمه که به شما تذکر بدم
شما خیلی وقته که دارید فینگیلیش پست می دید لطفا فارسی تایپ کنید

a.toraby
21-08-2007, 15:48
salam
ye soal. in barname gharare chiro search kone?
va methode findNext koja tashkil shode?
merci

این برنامه هیچی رو پیدا نمی کنه. :31:فقط دیالوگش درست شده. البته کافیه سیگنال های findnext و findprev رو به متدهایی که عملیاتی هستند و فایل رو جستجو می کنند متصل کنیم. به این ترتیب هر موقع با استفاده از کلمه کلیدی emit این سیگنال ها ساطع می شوند متدهای مربوطه رو فراخوانی می کنند و عمل جستجو انجام میشه. شما خودت می تونی این کار رو به عنوان یه تمرین انجام بدی. یه تابع سرچ ساده بساز و با استفاده از متد connect بچسبونش به این سیگنال ها. در حال حاضر چون این سگنال ها به هیچ اسلاتی وصل نیستند هیچ کاری هم انجام نمی دن. فرض کن فرستنده کارش رو انجام میده اما گیرنده ای در کار نیست که ازش استفاده کنه. شما باید یه اسلات درست کنی و با متد connect کاری کنی که گوش به زنگ ایستاده باشه و منتظر پیغام این سیگنال ها باشه.

شرمنده از این خوشگل تر بلد نیشتم توضیح بدم :46:

a.toraby
21-08-2007, 15:51
با تشکر از شما دوست عزیز


جناب Cris_Y
لازمه که به شما تذکر بدم
شما خیلی وقته که دارید فینگیلیش پست می دید لطفا فارسی تایپ کنید

والله من هم یه بار گفتم اما گوش نمی کنه که:21: :46:

mohpooria
25-08-2007, 22:15
سلام دوست عزيز
ممنون از آموزش هايت :11:

ولي براي من كه تا حالا فايده نداشته چون من نتوانستم آن را روي ابونتو نصب كنم

اگر دوستان راهنمايي دارند ممنون مي شوم .:10:

tux-world
13-09-2007, 23:54
عجب تاپیک باحالی . ایول دستتون درد نکنه

j_r120
14-10-2007, 12:39
با سلام و عرض ادب و احترام:

چطوری میشه از PHP در linux استفاده کرد.

من اصلا نمیتونم PHP را نصب کنم.

نسخه linuxی که من استفاده میکنم redhat 9.0 میباشد.

لطفا به من کمک کنید خیلی واجب هست با تشکر فراوان.

m a j r i x
14-10-2007, 20:43
با سلام و عرض ادب و احترام:

چطوری میشه از PHP در linux استفاده کرد.

من اصلا نمیتونم PHP را نصب کنم.

نسخه linuxی که من استفاده میکنم redhat 9.0 میباشد.

لطفا به من کمک کنید خیلی واجب هست با تشکر فراوان
سلام
۱- سوال شما ربطی به این تاپیک نداره
۲- این دیستروی که شما دارید استفاده میکنید دیگه فسیل شده از دیستروها بروز استفاده کنید
۳- این انجمن برای استفاده کاربران desktop هست اگر در نصب PHP مشکل دارید به این انجمن ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) مراجعه کنید

a.toraby
14-10-2007, 21:01
با سلام و عرض ادب و احترام:

چطوری میشه از PHP در linux استفاده کرد.

من اصلا نمیتونم PHP را نصب کنم.

نسخه linuxی که من استفاده میکنم redhat 9.0 میباشد.

لطفا به من کمک کنید خیلی واجب هست با تشکر فراوان.


بعد از شالی ماهی یکی این جا پست داد. اون هم اشتباهی بود :31: دایی یه سری به این لینک بزن. شاید به دردت بخوره



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

بامزی
30-01-2008, 23:29
بعد از شالی ماهی یکی این جا پست داد. اون هم اشتباهی بود :31: دایی یه سری به این لینک بزن. شاید به دردت بخوره



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

سلام :11:

واقعا تاپیک جالبی رو شروع کردی . بهت تبریک می گم
1. من می خام یه برنامه با امکان گرافیک برداری مثل خود همین Examples and Demos مال qt بنویسم . از چی باید استفاده کنم ؟ به نظرم اومد این یه جورایی شبیه WPF هست ، اینطوری نیست ؟ :5:
2 . اصلا من نمی دونم چرا موقع کامپایل کردن qt توی visual studio 2005 به مشگل برمی خورم . می تونی کمکم کنی :41:

a.toraby
31-01-2008, 00:08
من خیلی وقته دیگه فعالیت نمی کنم. چون استقبال نشد دیگه انگیزه ای ندارم. p30world فقط انجمن موزیک و ین چیزاش به درد میخوره. سطح علمیش خیلی پایینه. به درد آموزش qt نمیخوره. اگه سوالی داشتی می تونی با میلم تماش بگیری دوست عزیز

F@$hist
22-01-2009, 13:03
عجب ! حیفه که دیگه آموزش ها ادامه نداره ! هر چند که من باید از ابتدا شروع کنم ! ولی فعلا به دلیل دیال آپ نمی تونم برنامه ها رو دانلود کنم و این یعنی : سرعت دانلود : 1 کیلوبایت بر ثانیه !

amsjavan
27-02-2009, 19:06
a.toraby عزیز خواهش می کنم ادامه بده. شاید الان تعداد افرادی که می خوان Qt یاد بگیرن کم باشه( به دلیل اینکه خیلی ها هنوز نمی دوند Ot چیه!) اما مطمپن باشید در آینده نزدیک تعداد آن ها بسیار زیاد خواهد شد و همه از این تاپیک به عنوان یک مرجع بسیار خوب استفاده خواهند کرد. ما منتظر ادامه آموزش های شما هستیم.

Mehrdad-bx
01-03-2009, 17:03
نمیخوام آموزش های a.toraby رو کم ارزش نشون بدم ولی اگه کسی میخواد برنامه نویسی ویژوال رو از صفر شروع کنه(مثل من که شروع کردم) میتونه gtk یاد بگیره. یه مزیت خوبی که داره سایت هایی مثل gtk.ir هستند.(چون دیدم عتوان برنامه نویسی ویژوال در لینوکس بود اینو گفتم، وگرنه میدونم QT هم تو عنوان وجو داره :46: )

m.saeedebrahimi
13-12-2009, 19:54
رشته کاری من soccer 2d میباشد.
تو لینوکس suse 11 سرور را نصب کردم boost 1.38 را همین تور.ولی وقتی تیم را make میکنم تو
act handler eror میده.
چیکار کنم؟