صفحه 1 از 2 12 آخرآخر
نمایش نتایج 1 تا 40 از 57

نام تاپیک: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

  1. #1

    معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    توضیح: این تاپیک کپی تاپیک مشابه بنده در چند فروم دیگر هست. اگر آیدی استارتر چیز دیگری بود فکر نکنید رفتم مطلب آموزشی دیگران رو بنام خودم کپی کردم! Folaani خودم هستم.

    دو نکته رو بگم. اول اینکه روش درست نوشتن این هست: Qt و نه QT
    دوما تلفظ میشه کیوت نه کیوتی.

  2. #2

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    در این تاپیک میخوایم به یاری خدا از فریمورکی قدرتمند و Cross platform برای اپلیکیشن نویسی دسکتاپ و ایجاد GUI که Qt (تلفظ میشه کیوت) نامیده میشه صحبت کنیم. البته این فریمورک اونقدری وسیع و کارا و راحت هست که ازش در کاربردهای متعددی غیر از اپلیکیشن دسکتاپ هم میشه استفاده کرد. طراحی برنامه های با رابط و کارایی کامندلاین و برنامه های سرویس دهندهء خاص هم با این فریمورک عملی و معمول و خوشایند هست.

    این فریمورک (Framework) دارای کتابخانهء وسیع و قدرتمند خوب و راحت طراحی شده با زبان سی++ هست و داکیومنت و کامیونیتی (جامعهء برنامه نویسان و علاقمندان و حامیان در اینترنت) خوبی هم داره.

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

    با این فریمورک میشه روی سیستم عامل ها و پلتفرم های سخت افزاری متعدی برنامه نویسی کرد (خصوصیت Cross platform) و بقول معروف یک کد رو روی چند سیستم عامل کامپایل و اجرا کرد. اغلب به تغییرات در کد یا نیازی نیست یا تغییرات بسیار محدود هستن. حتی درصورت استفاده از امکانات این پلتفرم در این زمینه، فایلهای دیتای شما هم میتونن با این فریمورک مستقل از سیستم عامل و سخت افزار باشن و از سیستم عامل و سخت افزاری به سیستم عامل و سخت افزار دیگر انتقال داده بشن و احتیاج به تطبیق و تبدیلهای خاصی که بعضا پیش میان نداشته باشن.

    سیستم عاملهای اصلی که این فریمورک پشتیبانی میکنه شامل ویندوز و ویندوز CE، یونیکس/گنو-لینوکس و Embedded Linux، و Mac OS X و همچنین تقریبا اخیرا پلتفرم دیگری برای گوشی های موبایل هست (ظاهرا S60 که متعلق به نوکیا هست).

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

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

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

  3. #3

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    ... (توضیح: پستهای میانی فاصله اندازه بخاطر کم شدن حجم صفحات تاپیک بخاطر حجم زیاد متن پستها هست که بصورت تجربی مفید دیدم).

  4. #4

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    بهتر دیدم ابتدا از مقالهء ویکیپدیا دربارهء کیوت شروع کنم و بخشهایی از این مقاله بعلاوهء مقداری اطلاعات شخصی خودم رو نقل کنم.

    از جمله نرم افزارهای معروفی که در اونها از کیوت استفاده شده KDE (یکی از دو محیط دسکتاپ اصلی برای توزیعهای مختلف گنو/لینوکس که خودش شامل نرم افزارهای مهم متعددی هم میشه)، مرورگر وب اپرا، Google Earth، Skype، Adobe Photoshop Album، VirtualBox، و OPIE هستن.
    مسلما تعداد نامحدودی اپلیکیشنهای پراکنده و شخصی هم تاکنون با کیوت نوشته شدن و استفاده از این فریمورک بعد از ابزارهای پلتفرم ویندوز (بعلت غلبهء بازاری مایکروسافت)، خیلی فراگیر هست. ضمنا کیوت یکی از مهمترین و معروف ترین ها درمیان معدود کتابخانه ها و فریمورک های قدرتمند و کامل آزادی که وجود دارن هست.
    البته در دنیای نرم افزار آزاد تنوع و تکثر معمولا زیاد و گاهی گیج کننده هست (که این اثر طبیعی آزادی و تعدد تولیدکنندگان هست) اما تنها چند کتابخانهء معدود در سطح اول رقابت هستن که اینقدر کامل، قوی و مستقل از پلتفرم هم باشن (یکی دیگه که خیلی معروفه GTK نامیده میشه).

    کیوت تا June 17, 2008 که شرکت تولید کنندش توسط کمپانی نوکیا خریداری شد به یک کمپانی نروژی بنام Trolltech تعلق داشت، و الان با وارد کردن نام سایت شرکت Trolltech بصورت trolltech.com به بخش مربوط به کیوت شرکت نوکیا (Qt Software) با آدرس qtsoftware.com هدایت میشیم.

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

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

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

    امکانات مفید دیگری که کیوت داره و جزو لازم برای یک کتابخانهء رابط گرافیکی نیستن شامل کتابخانهء دسترسی و کار با دیتابیس های مختلف مثل MySQL و SQLITE و ODBC، کار با XML، کار و مدیریت thread ها (اصطلاحا برنامه های چندریسمانی یا چندنخی)، کتابخانهء شبکه برای کار با شبکه و اینترنت، و یک رابط یکپارچه مستقل از پلتفرم برای کار با فایلها هستن.
    همه اینها خیلی مفید و کارا هستن و مثلا برنامهء شما میتونه سریعا تبدیل به یک برنامه ای که با دیتابیس خودش یا دیتابیسی روی سیستم کار میکنه بشه.
    کتابخانهء مربوط به thread هم کمبود کتابخانهء استاندارد thread رو در سی++ بطور کامل برطرف میکنه و کار کردن باهاش هم خیلی راحته. با برنامه نویسی چند ریسمانی ما میتونیم برنامه هایی بنویسیم که ویژگیهای مفید و جالبی دارن مثل پردازش موازی و استفادهء بهینه تر از منابع سیستم و وقت و انرژی کاربر و همچنین جاهایی که نیاز داریم برای داشتن یک برنامهء خوب اون رو بصورت چند ریسمانی پیاده کنیم.

    از نظر لایسنس یا مجوز قانونی، کیوت تحت چند مجوز منجمله GNU LGPL ارایه میشه که این مجوز یک مجوز رسمی و معروف نرم افزار آزاد هست و این امکان رو هم میده که برنامه هایی داشته باشیم که لزوما همهء بخشهای اونها آزاد نیست و مجبور نیستیم سورس کدهای خودمون رو همراه برنامه و تحت مجوز آزاد دراختیار دریافت کنندگان برنامه قرار بدیم. البته اصولا چنین قابلیتی برای کسانی که به فلسفهء نرم افزار آزاد علاقه و اعتقاد دارن چندان جذاب نیست یا بی ارزش و حتی در مواردی مضر تلقی میشه، ولی بهرحال خیلی افراد هم کم و بیش طور دیگری فکر میکنن و چنین امکانی رو میخوان.
    اگر بیش از این بخوایم امکان انحصاری کردن برنامه رو داشته باشیم و حتی LGPL هم شرایط مورد نظر رو به ما نده، میتونیم کیوت رو با لایسنس انحصاری که باید بابت بدست آوردنش هزینهء لازم رو بپردازیم خریداری کنیم. م: تاجایی که میدونم نسخهء انحصاری کیوت یکی دو مورد امکانات خاصی رو هم بیشتر از نسخهء آزاد داره که البته نبودن اونها در نسخهء آزاد چندان مهم و مشکل ساز بنظر نمیرسن و اونها تنها یکی دو مورد اجزای ویژه ای مثلا مربوط و مختص به سیستم عامل ویندوز هستن (مثل اکتیوایکس) که ارتباط مستقیمی هم با بخشهای اصلی مثل رابط گرافیکی ما ندارن و اونها رو ناقص نمیکنن؛ ضمنا اگر نیاز ضروری در برنامهء خودتون داشته باشید و بخواید از کتابخانه های آزاد یا مجانی استفاده کنید بنظرم میتونید از کتابخانه های دیگر در این زمینه یا کتابخانه های خود میکروسافت برای چنین امکاناتی در کنار کیوت استفاده کنید.

    م: راستی از اینکه ممکنه کیوت زمانی انحصاری بشه هم زیاد نگران نباشید چون وجود KDE که جزو عمده و مهمی از گنو/لینوکس و دنیای نرم افزار آزاد هست پشتوانهء خوبی برای اون بحساب میاد. سالهاست که کیوت یکی از اجزای اصلی پروژه های بزرگی در نرم افزار آزاد بوده و به مرور حتی آزادتر و سازگارتر با مجوزهای رسمی نرم افزار آزاد هم شده، در کنار اینکه از نظر فنی هم واقعا رشد کرده.

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

    ==========================

    منبع بخشهای مربوط به ویکی پدیا: http://en.wikipedia.org/wiki/Qt_toolkit

  5. #5

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    ..........

  6. #6

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    خب درحال حاضر شما اگر به http://www.qtsoftware.com/downloads مراجعه کنید و LGPL / Free رو انتخاب کنید میتونید مستقیما پکیج کامل کیوت نسخهء اپن سورس رو دانلود کنید. این پکیج در نسخهء جاری حجمش حدود 167 مگابایت هست و برای دانلودش باید اینترنت پرسرعت داشته باشید یا بهرصورت دیگه ای مثل سفارش دانلود اون رو دریافت کنید. من با اینترنت 256 کیلوبیت بر ثانیه در شرکت محل کارم فکر میکنم ظرف حدود 3 ساعت دانلودش کردم.
    درمیان گزینه ها گزینهء Download Qt SDK for Windows رو انتخاب کنید که مجموعه کامل ابزارهای برنامه نویسی کیوت برای محیط ویندوز هست. شامل: کتابخانه های کیوت (فایلهای دی ال ال)، Qt Creator IDE (محیط گرافیکی با ابزارهای مجتمع شده)، و ابزارهای خط فرمان کیوت (برای ساخت برنامه ها، آپدیت زبان برنامه ها و غیره).

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

    این نسخهء اپن سورس ویندوزی از کیوت که شما دانلود میکنید از MinGW برای کامپایل برنامه ها استفاده میکنه که این MinGW یک مجموعه از ابزارها و کامپایلرهای لازم برای اینکار هست و یک پروژهء مستقل از کیوت که افراد دیگری اون رو ایجاد کردن که این ابزارها و برنامه ها در اصل به محیط لینوکس تعلق دارن اما مثل کیوت نسخهء ویندوزی اونها هم ساخته شده. البته اینکه میگیم این ابزارها و کیوت در اصل و اول روی محیط لینوکس بودن نباید لزوما به این معنا تلقی بشه که این ابزارها برای محیط ویندوز کارا و مناسب نیستن و باهاش هماهنگی ندارن. این ابزارها در یک حداقل کاملا قابل استفاده هستن، اگر بهتر از این و حتی گاهی بهتر از ابزارهای بومی ویندوز نباشن.
    ضمنا مزیت اینکه از کیوت و اینطور برنامه ها و ابزارهای آزاد استفاده میکنید اینه که اولا کاملا آزاد و قانونی هستن و محدودیتی روشون نیست و در هرنقطه ای از جهان با هر قانونی تغییری در امکان استفادهء شما بوجود نمیاد، و دوما شما به تنها یک سیستم عامل وابسته نیستید، و سوما به یک شرکت انحصارگر با سیاستهای تجاری صرف هم وابسته نیستید و مجبور نیستید در همه چیز از یک مرجع اینچنین پیروی کنید! راستی مجانی بودن کیوت رو هم میشه مزیت بزرگی دونست، گرچه در کشور ما فعلا بعلت عدم اعمال قوانین کپی رایت و انحصارهای فکری بخصوص کشورهای دیگر، برای ما عملا تفاوتی نمیکنه؛ ولی حداقلش اینه که شما نیازی به استفاده از ابزارها و برنامه های پردردسر کرک شده ندارید و لازم نیست تا همیشه منتظر کرک شدن نسخه های جدید چنین برنامه هایی و گیرآوردن اونها باشید. چه دیدید شاید هم یه زمانی فناوریهای حفاظتی و انحصار پیشرفت کرد و دیگه نتونستن چنین برنامه هایی رو کرک کنن!!

    حالا که کیوت رو دانلود کردید نصب اون با استفاده از برنامهء نصب دانلود شده، مثل برنامه های معمولی ویندوز کار راحتی هست و نیاز به توضیح خاصی نداره.
    بعد از نصب این نسخهء کیوت (2009.02 / Qt 4.5)، در منوی استارت شما تحت منوی Qt SDK by Nokia v2009.02 گزینه هایی اضافه میشن که اصل کاری های اونها رو شرح میدم:

    Qt Command Prompt: محیط خط فرمان رو برای کیوت آماده و اجرا میکنه که ما صرفا برای ساخت و کامپایل برنامه ها باهاش سروکار داریم و چند فرمان خاص رو برای ساخت پروژه ها و کامپایل برنامه ها مدام درش اجرا میکنیم (ضرورتی برای تسلط بر داس یا خط فرمان ویندوز نیست).

    Qt Creator: محیط طراحی و برنامه نویسی گرافیکی و مجتمع شدهء جدید کیوت که در اون میتونید رابط برنامه ها رو بصورت ویژوال طراحی کنید، کد بنویسید، دیباگ کنید (بخش دیباگر گرافیکی هم داره)، از Help / Reference کیوت استفاده کنید و غیره.
    نکته اینکه Qt Creator جدید هست و در نسخهء قبلی کیوت نبود و بجاش تنها برنامهء طراحی ویژوال رابط کاربری ای بنام Qt Designer وجود داشت که الان این برنامه زیرمجموعهء محیط کاملتر Qt Creator شده و در درون اون قرار گرفته.
    چون من با نسخهء قبلی کیوت و بنابراین فقط با Qt Designer کار کردم اگر توضیحی درمورد ابزارهای برنامه نویسی ویژاول کیوت بخوام بدم فقط درمورد Qt Designer خواهد بود.

    Qt Linguist: ابزار گرافیکی ای برای تغییر زبان و تولید ترجمه های مختلف برای متونی که در برنامهء شما بکار رفتن هست.
    توضیح اینکه من با این برنامه کار نکردم و اولویتی هم بهش نمیدم و بنابراین مطلبی راجع بهش نمیذارم. تازه اگر برسیم و بتونیم راجع به ابزارهای گرافیکی کیوت مطلبی بذاریم. البته درمورد تغییر زبان و استفاده از ترجمه های متن در برنامه های کیوت و کدنویسی احتمالا صحبت خواهیم کرد.
    بازم روشن کنم که این تاپیک یک آموزش کامل و کلی نیست و فقط نکات خاص و عمومی برای آشنایی و دید کافی و کمک به راه اندازی اولیه هست. برای آموزش کامل کیوت به زبان فارسی باید کل رفرنس رسمی اون رو ترجمه کرد. البته در این تاپیک کسی اگر سوال خاصی هم داشت میتونه مطرح کنه که اگر تونستیم و وقت شد پاسخ داده بشه.

  7. #7

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    ...........

  8. #8

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    موقعی که شما نسخهء اپن سورس کیوت رو نصب میکنید و MinGW هم باهاش نصب میشه، یکسری ابزار و کامپایلر روی سیستم شما نصب میشه؛ شامل مجموعه کامپایلر معروف gcc. بنابراین شما نه تنها کیوت رو دارید بلکه مجموعه ای از ابزارهای ساخت برنامه و کامپایلر رو هم دارید که مستقلا قابل استفاده هستن و وابستگی به کیوت ندارن. بنابراین میتونید با این کامپایلرها، برنامه های به زبان سی و سی++ خودتون رو هم کامپایل کنید و از کتابخانه های استاندارد این زبانها هم که در پکیج MinGW موجود هستن استفاده کنید.
    توضیح اینکه کدی که این کامپایلرها تولید میکنن کد اجرایی 32 بیتی ویندوز هست و نه کد 16 بیت تحت داس. بنابراین شما از امکانات سیستم عامل 32 بیتی استفاده میکنید و محدودیت های محیط DOS رو ندارید. نباید فکر کنید هر برنامه ای که در خط فرمان کامپایل یا اجرا میشه و کامپایلرش رابط گرافیکی نداره مربوط به عهد بوق و داس 16 بیتی درپیت میشه!!
    خب این نکته ها رو برای چی گفتم؟ برای اینکه هم جالب و آموزنده هست و هم اینکه موقع کار با کیوت نظر به اینکه بهرحال با زبان ++C کار میکنید ممکنه نیاز به نوشتن و تست برنامه های خارج از کیوت به زبان سی++ داشته باشید و در اینصورت میتونید با فرمانهایی مثل g++ test.cpp راحتتر و سریعتر و مستقل از پروژهء کیوت جاری، اون برنامه ها رو کامپایل کنید. من معمولا برنامه های کوچکی برای تست کردن بعضی جنبه های زبان سی++ که به دونستن اونها در کیوت احتیاج داشتم می نوشتم.
    دقت کنید که با اجرای فرمانی مثل g++ test.cpp، فایل اجرایی حاصل از عملیات کامپایل با نام a.exe در دایرکتوری جاری ایجاد میشه، مگر اینکه ما با آپشنهای خط فرمان نام دیگری رو براش تعیین کرده باشیم.
    برای کامپایل برنامه های به زبان C هم از فرمان gcc test.c استفاده کنید (نام فایل سورس شما میتونه هرچیزی باشه که باید بجای test.c قرار بدید).

    خب ما اولین برنامهء کیوت خودمون رو مینویسیم و به این روش بحث کیوت رو ادامه میدیم.
    برنامهء ما همون برنامهء معروف Hello World هست که همهء برنامه نویسها در هر زبان برنامه نویسی ای باهاش آشنا هستن. منتها این بار محیط و رابط برنامهء ما گرافیکیه و زرق و برق و کارایی اضافه ای داره:

    این کد رو داخل فایلی بنام main.cpp قرار بدید:

    #include <QApplication>
    #include <QPushButton>

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    QPushButton hello("Hello world!");

    hello.show();
    return app.exec();
    }

    انتخاب نام main.cpp اجباری نیست اما معمولا در برنامه های کیوت فایلی رو که حاوی تابع main هست (برنامه نویسان سی و سی++ این تابع رو میشناسن) اینطوری نامگذاری میکنیم که مشخص و برای پیدا کردن راحت باشه. در برنامه های کیوت این تابع و فایل معمولا خیلی مختصرتر از فایلهای سورس دیگه که محتوی کلاسها و پیاده سازی اونها و جزییات کدهای عملیاتی برنامه هستن هست و گاه چندخطی بیشتر نیست. اما برنامه در همین چند خط و از این فایل و با تابع main شروع میشه. تابع main در زبان سی و سی++ نقطهء ورود خودکار و اجرای برنامه توسط سیستم عامل هست.

    بخاطر ساده و کوتاه بودن این برنامه و تازگی ورودمون به محیط کیوت، خط به خط این برنامه رو توضیح میدم:

    - خط اول تعریف کلاس QApplication رو اینکلود میکنه که ما نیاز داریم در هر برنامهء کیوت با رابط گرافیکی و همینطور بخاطر استفاده از خیلی از کلاسها و امکانات دیگه که به وجود یک شیء QApplication در برنامه وابسته هستن یک نمونه از اون رو در برنامه و در همون خطوط ابتدایی داشته باشیم.

    - خط دوم تعریف کلاس QPushButton رو اینکلود میکنه که تولید کنندهء دکمهء فشاری یا همون Push Button متداول هست که همه جا دیده میشه (مثلا دکمهء Ok در کادرهای ویندوز و غیره). ما میخوایم Hello world خودمون رو بعنوان متن روی این دکمه نمایش بدیم. استفاده از Push Button بخاطر مناسب بودنش برای این متن و آماده و راحت بودن برای استفاده هست (مثلا نیازی به تعیین سایزش بطور دستی نداریم و خودش بطور خودکار تنظیم میکنه).

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

    - خط چهارم یک نمونه یا شیء از کلاس QApplication برای ما ایجاد میکنه که معمولا اولین دستور بیشتر برنامه های کیوت هست. ما آرگومانهای برنامه رو ابتدا به این شیء پاس میکنیم تا کیوت آرگومانهایی رو که خودش میشناسه از میان اونها انتخاب کنه و برداره (مثلا آرگومانی که تعیین میکنه استایل گرافیکی برنامه چی باشه، شبیه ویندوز XP یا Mac OS X که کاربر برنامه میتونه در خط فرمان به برنامه پاس کنه). بقیهء آرگومانها دراختیار برنامهء ما هست که اگر خواستیم میتونیم ازشون استفاده کنیم (مثلا اسم فایلی که برنامهء ما کاری روش انجام میده). کیوت آرگومانهایی رو که مال خودشه از متغییرهای argc و argv حذف میکنه.

    - خط پنجم یک نمونه از کلاس دکمهء فشاری ایجاد میکنه و چون ما رشتهء Hello world رو به Constructor این کلاس پاس کردیم متن روی این دکمه عبارت Hello world خواهد بود. اغلب کلاسها و اشیاء گرافیکی در کیوت هنگام تعریف پارامترهای مختلفی رو میتونن بگیرن که بسته به نوع و تعداد این پارامترها استفاده های مختلفی دارن و خصوصیات و کاربردهای مختلفی رو باعث میشن.

    - خط ششم تابع show دکمهء گرافیکی ما رو اجرا میکنه که به زبان ساده بهش میگه قابل مشاهده باش. اشیاء گرافیکی ما بعد از تعریف شدن تا زمانیکه صریحا مشخص نکرده باشیم نمایش داده بشن، نامریی خواهند بود.

    - خط هفتم تابع exec نمونهء QApplication برنامهء ما رو که در اینجا اسمش app هست اجرا میکنه. تازمانیکه ما این تابع رو روی نمونهء QApplication برنامهء خودمون اجرا نکردیم برنامهء کیوت وارد Event Loop اصلی برنامه نمیشه و کاربر قادر به کار کردن با برنامه نیست و معمولا هیچ جزء گرافیکی از برنامه هم نمایش داده نمیشه. درواقع این تابع مثل استارت اتومبیل یا زنده شدن یک کالبد بیجان هست که اگر انجام نشه عملکرد طبیعی شروع نمیشه و کاری صورت نمیگیره.
    معمولا اجرای کدهای وابسته به کیوت در برنامهء ما زمانی که برنامه از این تابع برمیگرده تمام شدن و ما کد دیگری هم مستقل از کیوت برای اجرا نداریم و بنابراین مقداری که این تابع برمیگردونه بعنوان مقدار برگشتی برنامهء سی++ موقع خاتمه به سیستم عامل و محیط کاربری برگردونده میشه (با دستور return در سی++).

    توضیحات خود برنامه تمام شد.
    حالا برای کامپایل برنامه پس از ایجاد فایل main.cpp باید چند فرمان رو در خط فرمان اجرا کنیم. پس خط فرمان کیوت (Qt Command Prompt) رو از منوی استارت اجرا کنید؛ سپس دایرکتوری جاری خط فرمان رو باید به دایرکتوری ریشهء محتوی برنامه و پروژهء کیوت خودمون تغییر بدیم. من اینکار رو با کشیدن آیکون فولدر برنامه (از گوشهء آدرسبار پنجرهء ویندوز اکسپلورر) به پنجرهء خط فرمان و سپس اضافه کردن دستور cd بعلاوهء یک فاصله در ابتدای مسیر فولدر انجام میدم. یادتون باشه اگر فولدر برنامهء شما در درایوی بغیر از درایو C ویندوز هست باید دستور :d رو هم بعد یا قبل از تغییر دایرکتوری جاری اجرا کنید تا خط فرمان در درایور مورد نظر قرار بگیره، که بجای d باید نام درایور مورد نظر خودتون رو قرار بدید.
    علت نیاز به بودن در دایرکتوری برنامه این هست که برنامه ها و دستورات لازم برای مدیریت و کامپایل پروژه های کیوت ما روی فولدر جاری کار میکنن و اون رو بعنوان فولدر ریشه ای که محتوی تمام اجزای پروژهء ما هست درنظر میگیرن و توی اون دنبال فایلهای مورد نظر گشته و تمام عملیات رو روی فایلهای مورد نظر خودشون در این فولدر انجام میدن؛ این کار ما رو هم راحتتر میکنه چون نیازی نداریم برای هر فرمان مسیر فولدر خاصی رو هم وارد کنیم.

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

    فرمان qmake رو اجرا کنید.
    این فرمان مراحل نهایی و اصلی آماده سازی برای کامپایل برنامهء ما رو انجام میده و یکسری فولدر و فایلهای محتوی دستورات و پیکربندی مربوط به فرایند کامپایل خودکار (عمدتا Make File ها) رو به پروژهء ما اضافه میکنه.

    فرمان سوم یا فرمان آخر که درصورت بدون اشکال بودن و کامل بودن اجزاء برنامهء ما فایل اجرایی تحویل ما میده فرمان mingw32-make release هست.
    این فرمان برنامهء make پکیج MinGW رو که اسم فایلش mingw32-make هست اجرا میکنه که این برنامهء mingw32-make فایلهای برنامهء ما رو بررسی کرده و اگر فایلی تاریخ ویرایشی جدیدتر از آخرین کامپایل پروژهء کیوت ما رو داشت، بخشهای لازم رو کامپایل مجدد میکنه و نهایتا یک فایل اجرایی جدید تحویل ما میده. البته اگر همه چیز بخوبی پیش بره و نقص و اشکال کد نویسی ای درکار نباشه. بعنوان اطلاع باید بگم که برنامهء make در مراحل اصلی کامپایل، برنامهء کامپایلر ++g رو با آپشنها و آرگومانهای خط فرمان لازم فراخوانی میکنه.
    make خودش یک کامپایلر نیست، اما برنامهء مهم و پیچیده ای برای مدیریت پروژه ها در ارتباط با کامپایل خودکار هست که هرچیزی رو و هر فایل سورس از میان فایلهای سورس برنامهء ما رو فقط وقتی که لازم هست کامپایل مجدد میکنه و پیکربندیهای لازم رو نسبت به پلتفرم و تنظیمات سیستم عامل انجام میده و نهایتا دستورات طولانی و متعدد لازم برای کامپایل و ترکیب اجرای برنامه رو یکی پس از دیگری بطور خودکار برامون اجرا میکنه و ما رو از این عمل شاق و پیچیده معاف میکنه.
    برنامهء make خیلی مهمه و بخصوص روی سیستم عاملهای گنو/لینوکس و یونیکسی ها خیلی معروف و پرکاربرد هست و میشه گفت اکثر پلتفرمهای دنیا از این روش برای پیکربندی و مدیریت خودکار ساخت و کامپایل نهایی برنامه ها استفاده میکنن (هرچند مثلا بعلت پشت صحنه بودن به دید کاربران و حتی برنامه نویسان نیاد).
    علت پاس کردن آرگومان release به برنامهء make این هست که میخوایم از ابتدا یک فایل اجرایی عادی تولید بشه. چون حالت عادی پیشفرض میتونه تولید یک فایل اجرایی از نوع مخصوص Debug (هم) باشه که این نوع فایل اجرایی هم زمان بیشتری برای کامپایل میبره و هم حجمش خیلی بیشتر و سرعتش کمتر هست و بنابراین فایل اجرایی نهایی برای کاربرد عملی بحساب نمیاد و فقط برای مراحل توسعه و باگ یابی در برنامه کاربرد داره. هرچند خودم هرگز از این نوع فایلها استفاده نکردم و فکر میکنم در بیشتر کاربردهای ما برنامه نویسان عادی، نیازی بهش نیست.

    حالا که ما برناممون رو با موفقیت و بدون خطا کامپایل کردیم، فایل اجرایی تولید شده باید در دایرکتوری ای بنام release در دایرکتوری اصلی پروژه قرار داشته باشه و بنابراین با توجه با اینکه خط فرمان ما در دایرکتوری ریشهء پروژه قرار داره ما میتونیم با فرمان release/project.exe برناممون رو اجرا کنیم. البته به مشخص کردن پسوند exe نیازی نیست ولی برای خوانایی و تفکیک خیلی خوبه. ضمنا نام فایل اجرایی تولید شده برگرفته از نام دایرکتوری پروژه خواهد بود؛ مثلا اگر ما در فولدری بنام test برناممون رو کامپایل کردیم، نام فایل اجرایی تولید شده test.exe خواهد بود؛ البته اگر در فایل پروژه (فایلی که گفتیم پسوندی pro داره) نام دیگری توسط برنامه نویس برای فایل اجرایی تولید شده تعیین نشده باشه.

    نهایتا برای راحتی کار کسانی که به امکانات خط فرمان وارد نیستم بگم که میتونید برای سرعت و راحتی اجرای این فرمانها از امکانات خط فرمان مثل تکمیل خودکار نام فایلها و دایرکتوریها استفاده کنید. مثلا اگر ما حرف r رو تایپ کنیم و بعد کلید Tab رو بزنیم، احتمالا اولین گزینه ای که بطور خودکار در خط فرمان برامون تایپ میشه حروف release خواهد بود که این ما رو از تایپ تمامی این حروف و اشتباهات احتمالی راحت میکنه. با زدن کلید تب در بارهای دیگر گزینه های ممکن دیگر درصورت وجود برامون تایپ میشن.
    ضمنا مورد دیگه اینه که فرمانهایی رو که قبلا تایپ کردیم میتونیم با کلیدهای مکان نمای بالا و پایین دوباره ظاهر کنیم و نیازی نیست اونها رو مجددا تایپ کنیم.

    یک نکتهء دیگه که باید بگم اینه که فایل اجرایی شما بخاطر نیاز به چند فایل dll کیوت، با دوبار کلیک روی اون اجرا نمیشه و فعلا فقط به اینصورت از طریق خط فرمان کیوت تستش کنید تا بعدا که بگم باید برای پکیج کردن نهایی برنامه چکار کرد.

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

    نکتهء دیگر اینکه، اگر بعد از تلاشهای متعدد هنوز با پیامهای ناشناخته و اشکالات ظاهرا برطرف نشدنی مواجه شدید سعی کنید تمام فایلهای اضافی بطور خودکار تولید شده رو (بغیر از فایل پروژه با پسوند pro) دلیت کنید و ساخت برنامه رو از فرمان دومی که در اینجا مطرح شد (qmake) شروع کنید. چون گاهی بخصوص در عملیات و تغییرات متعدد و پیچیده در جریان توسعهء برنامه اشکالات و گیرهایی در این ارتباط پیش میاد که با حذف و تولید مجدد این فایلها برطرف میشن.
    یعنی فقط فایلها و دایرکتوریهایی رو باقی بگذارید که تا مرحلهء تولید فایل پروژه موجود بودن. شامل سورسها و فایلهای جانبی شما.

    ضمنا هروقت فایل سورس یا بعضی فایلهای جانبی جدیدی رو به برنامهء خودتون اضافه میکنید لازم هست که مشخصات چیزهای جدیدا اضافه شده، به فایل پروژهء برنامه اضافه بشن که اینکار یا با اجرای مجدد qmake -project انجام میشه و یا بطور دستی. بهرحال یادتون باشه با اجرای مجدد qmake -project، محتویات قبلی فایل پروژه و بنابراین چیزهایی هم که ممکنه شما بعدا بطور دستی به اون اضافه کرده بوده باشید پاک میشن.

    یکبار دیگه فرمانهای لازم برای کامپایل رو بطور یکجا درج میکنم:

    qmake -project
    qmake
    mingw32-make release


    - فرمان اول فایل مشخصات فایلهای پروژه و تنظیمات خاص لازم در بعضی موارد رو که بعدا توسط برنامه نویس بطور دستی اضافه میشن ایجاد میکنه.
    - فرمان دوم دایرکتوریها و Make file های لازم که حاوی دستورات لازم برای عملکرد برنامهء make هستن رو ایجاد میکنه.
    ایجاد Make file هم عمل نسبتا شاق و پیچیده ای هست که نیاز به دانش تخصصی داره، ولی ما با کیوت نیازی به انجام دستی اینکار نداریم.
    - فرمان سوم برنامهء make رو اجرا میکنه که این برنامه قواعد موجود در Make file پیدا شده رو خونده و بر اساس اطلاعات فایلهای پروژه و فایلهای موجود از کامپایلهای قبلی این قواعد رو اجرا میکنه؛ مثلا قاعده ای میگه اگر فلان فایل جدید بود فلان دستور رو اجرا کن. فرامین نهایی لازم برای کامپایل هرکدام از سورسهای برنامه و اتصال نهایی اونها به همدیگر که برنامهء کامپایلر اصلی (در اینجا ++g) رو فراخوانی میکنن هم جزو این دستورات هستن.

  9. #9

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    ............

  10. #10

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    این رو برای برنامه نویسان تازه کار کیوت که با مشکل عدم درج و نمایش صحیح نوشته های فارسی در برنامهء خودشون مواجه میشن میذارم.
    برای استفاده از حروف فارسی در برنامهء خودتون این کارها رو باید انجام بدید:

    - انکدینگ (Encoding) فایل سورس برنامهء خودتون رو روی UTF-8 قرار بدید.
    اینکار بطور مثال در ادیتور برنامه نویسی ++Notepad به اینصورت انجام میشه:
    Format -> Encode in UTF-8 without BOM
    ناگفته نماند كه ++Notepad يك اديتور برنامه نويسي مجهز (گول اسمش رو نخوريد؛ از نوتپد ويندوز خيلي فاصله داره) و آزاد هست كه روي ويندوز نصب ميشه و بغير Syntax highlighting داشتن براي تعداد زيادي زبان برنامه نويسي و فرمت مانند سي++ و PHP و HTML، از امكانات مفيد ديگري هم برخوردار هست. ضمنا رابط اون از Tab براي سازماندهي همزمان چند فايل استفاده ميكنه.
    براي اطلاعات بيشتر و دانلود به اين آدرسها مراجعه كنيد:
    http://en.wikipedia.org/wiki/Notepad%2B%2B
    http://notepad-plus.sourceforge.net/uk/download.php
    فايلي مثل npp.5.4.3.Installer.exe رو بايد دانلود كنيد كه در اينجا 5.4.3 آخرين نسخهء اين برنامه درحال حاضر هست.

    خب براي امكان استفادهء مستقيم از حروف فارسي (يا هر زبان ديگري) در برنامه هاي كيوت به شكل زير عمل كنيد.

    - اول هدر لازم رو در برنامهء خودتون اضافه كنيد:

    #include <QTextCodec> 


    - این کدها رو:

    QTextCodec::setCodecForTr(QTextCodec::codecForName ("UTF-8"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecF orName("UTF-8"));

    در ابتدای برنامهء خودتون قرار بدید (البته بعد از QApplication).

    ----------------

    حالا مثلا ميتونيد براحتي اين كد رو بنويسيد:

    QPushButton hello("!سلام دنيا");


    البته دقت کنید که این دستورات روی امکانات و توابع کتابخانهء کیوت کار میکنن و انتظار نداشته باشید روی بخشهای دیگر برنامهء شما که با کدهای استاندارد سی++ و توابع و کتابخانه های غیرکیوت نوشته میشن تاثیری داشته باشن.

  11. #11

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    يه نكتهء كوچك ولي مهم كه فهميدنش از خودم وقت و انرژي زيادي برد:
    يادتون باشه تمام كلاسهايي كه از ماكروي Q_OBJECT در تعريف اونها استفاده ميشه، بايد تعريف اونها در يك فايل هدر (با پسوند h) انجام بشه (و نه مثلا در يك فايل با پسوند cpp). چون پيش پردازندهء كيوت كه در اين موارد لازم هست، داخل اين فايلها رو ميخونه و پردازش ميكنه.

  12. #12

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    ...............

  13. #13

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

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

    خب با توجه به اینکه کیوت بطور پیشفرض برنامه هایی که با رابط خط فرمان ارتباط ندارن تولید میکنه، ما چطور میتونیم یک رابط خط فرمان به برنامهء خودمون اضافه کنیم که مثلا فرمانهای خروجی ما رو که با توابع و اشیاء استاندارد سی++ مثل cout صادر میکنیم نشون بده؟
    پاسخ اینه که، اینکار به سادگی با اضافه کردن دستور CONFIG+=console به فایل پروژهء برنامهء کیوت ما انجام میشه.

    یک نکتهء مهم بخصوص برای کسانی که کمتر از روش خط فرمان برنامه ها رو کامپایل کردن اینکه، اگر برنامه قبل از اینکه ما این دستور رو به فایل پروژه اضافه کرده باشیم کامپایل شده باشه، صرفا با اضافه کردن این دستور به فایل پروژه و اجرای دستور ساخت برنامه (mingw32-make release) عمل خاصی انجام نمیشه. ما باید حداقل یکی از فایلهای پروژه رو تغییری بدیم تا تاریخ ویرایشی جدیدتر از آخرین کامپایل برنامه پیدا کنه و برنامهء make متوجه این تغییر بشه و اقدام به کامپایل مجدد برنامه کنه. برای این منظور ما میتونیم یکی از فایلهای سورس برنامه مثل main.cpp رو باز کرده و بدون اینکه تغییری در اصل کدش بدیم اون رو دوباره save کنیم. (اگر گزینهء سیو ادیتور شما فعال نیست میتونید با اضافه کردن دو کاراکتر اسلش (//) که برای اضافه کردن توضیحات در برنامه های سی و سی++ بکار میرن این گزینه رو فعال کنید، یا صرفا یک کاراکتر تایپ و بعد همون کاراکتر رو پاک کنید).

    راستی مزیت دیگر داشتن رابط خط فرمان موقع برنامه نویسی و تست برنامه اینه که وقتی ما برنامهء کامپایل شده رو در خط فرمان فراخوانی میکنیم، تازمانیکه برنامه خاتمه پیدا نکرده خط فرمان برنمیگرده و این کنترل و آگاهی کافی درمورد وضعیت برنامه به ما میده. بخصوص چون اگر یادمون رفته باشه برنامه رو بعد از اجرا و تست خاتمه بدیم و بعد سورس برنامه رو تغییر داده و اقدام به کامپایل مجدد برنامه کنیم، عمل کامپایل نهایتا موفق نمیشه و با یک پیام خطا خاتمه پیدا میکنه (بعلت اینکه کامپایلر نمیتونه فایل اجرایی برنامه ای رو که هنوز خاتمه نیافته جایگزین کنه).
    ضمنا از طریق خط فرمان میشه برنامه ها رو براحتی با فشار دادن کلیدهای Ctrl+C خاتمه داد. این کاربرد هم بخصوص زمانیکه برنامه رابط گرافیکی برای خروج نداره بسیار مفیده و در وقت و انرژی برنامه نویس صرفه جویی میکنه، چون در غیراینصورت مجبور میشیم با فشار دادن Ctrl+Alt+Del و بعد در Task Manager ویندوز اینکار رو انجام بدیم تا قادر به کامپایل مجدد برنامه باشیم.

    بخاطر اینکه یک مطلب کاربردی دیگه به این پست که بیشترش توضیحات شد اضافه کنم میگم که چطور استفاده از خط فرمان کیوت رو راحتتر و شیرین تر کنید.
    خیلی وقتها برای آموزش و تست های برنامه نویسی، یک فولدر درست میکنیم که همیشه فایلهای برنامهء خودمون رو داخل اون ذخیره و کامپایل کنیم. فرضا من در سیستم خودم یک فولدر بنام test روی دسکتاپ ویندوز دارم. من این فرمانها رو:

    c:
    cd C:\Documents and Settings\hm\Desktop\test

    به انتهای فایل E:\QT\bin\qtenv.bat اضافه کردم که باعث میشه وقتی خط فرمان کیوت رو از منوی استارت اجرا میکنم، بطور خودکار در دایرکتوری test من قرار بگیره و بتونم از همون ابتدا به اجرای فرمانهای کیوت روی پروژهء جاری بپردازم.
    بجای فرمان c: باید فرمان مربوط به درایو مورد نظر خودتون رو قرار بدید که پوشهء مورد نظر شما در اون قرار داره (همونطور که در آدرس فولدر در خط دوم میبینید، دسکتاپ ویندوز معمولا در درایو c قرار داره چون ویندوز معمولا در درایو c نصب میشه).
    آدرس فولدر مورد نظر رو هم که میتونید با باز کردن اون فولدر و کپی کردن آدرس از آدرسبار بدست بیارید و بعد فقط کافیه اولش فرمان cd رو اضافه کنید.
    نکتهء بعدی اینکه، در اینجا میبینید که من کیوت رو در درایو E و در پوشه ای با نام QT نصب کردم؛ شما برای پیدا کردن فایل qtenv.bat و اضافه کردن فرمانهای بالا بهش، باید به محل نصب کیوت در سیستم خودتون برید.

  14. #14

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    ..........

  15. #15

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    یک تجربهء شخصی و نکتهء جالب:
    اینو بیاد داشته باشید که جلو بودن تاریخ سیستم شما موقع نصب کیوت یا اینکه بعد از نصب کیوت تاریخ سیستم رو عقب ببرید، موجب یک اشکال اساسی برای کامپایل برنامه های کیوت میشه.
    فهمیدن علت این مشکل خیلی دشوار بود و وقت و انرژی زیادی از من تلف کرد. باتری مادربورد من تموم شد و تاریخ سیستم عقب رفت، از اون موقع اشکال عجیبی موقع اجرای فرمان mingw32-make بوجود آمد که باعث میشد یک فرمان مدام تکرار بشه و دستور ساخت برنامه هیچوقت تمام نشه!
    از اونجایی که سیستم ویروس هم گرفته بود فکر کردم اشکال از ویروس هست و ویندوز رو دوباره نصب کردم، اما بازم اشکال برطرف نشد، چون اینبار موقع نصب کیوت تاریخ سیستم جلوتر از بعد از نصب کیوت بود که تاریخ سیستم رو عقب تر بردم.
    نمیدونم بدون سماجت و اطلاع از طرز کار برنامهء make کسی چطور میتونست حدس بزنه که اشکال از کجاست! اینطور اشکالهای بسیار عجیب و غیرقابل حدس هستن؛ مثلا من خودم حتی سخت افزار سیستم مثل RAM و هارد رو هم چک کردم!!

    علت این مشکل این بود که موقع صدور فرمان ساخت برنامه های کیوت، یکسری فایلهای پیکربندی دستورات کامپایل که جزو کیوت و در دایرکتوری نصب کیوت هستن چک میشن و اگر تاریخ اونها از تاریخ فایلهای برنامه جدیدتر باشه، دستور خاصی اجرا میشه تا پیکربندی برنامه رو مطابق تنظیمات جدید کیوت آپدیت کنه، اما اگر تاریخ سیستم قدیمی تر از تاریخ فایلهای کیوت باشه حتی با آپدیت شدن هم باز تاریخ فایلهای برنامه قدیمی تر از تاریخ فایلهای کیوت خواهد بود و نتیجتا دستور مجددا و بصورت حلقهء بی پایانی اجرا میشه.
    البته اگر بعلتی ناگزیز از عقب بردن تاریخ سیستم پس از نصب کیوت باشیم، میشه راههایی برای خلاص شدن از شر این مشکل پیدا کرد (آپدیت کردن تاریخ فایلهای مربوطه در کیوت یا حذف فرمان مورد نظر از Make File پروژه).

  16. #16

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    ...........

  17. #17

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

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

    خب شما برای اینکه برنامه رو آماده و مستقل کنید باید فایلهای لازم رو از فریمورک کیوت دراختیارش بذارید که این فایلها عمدتا یکسری dll هستن.

    یک راه بدوی و احتمالا غیراصولی اینه که برای پیدا کردن فایلهای لازم برای برنامه، بسادگی روی فایل اجرایی برنامه دابل کلیک میکنیم و در پیام های خطایی که داده میشه اسم فایلهای لازم رو تشخیص داده و بعد در مکانهای مربوطه (دایرکتوری نصب کیوت و MinGW که در نسخه های اخیر همراه با خود کیوت در دایرکتوری کیوت نصب میشه) اونها رو پیدا کرده و یک کپی از اونها رو کنار فایل اجرایی برنامه قرار میدیم.
    مثلا با کلیک بر روی فایل اجرایی برنامهء Hello World (فایل اجرایی برنامهء شما در فولدر release قرار داره) که بعنوان مثال در این تاپیک درج کردیم، اولین پیام خطایی که دریافت میکنیم اینه:

    This application has failed to start because mingwm10.dll was not found. Re-installing the application may fix this problem
    همونطور که میبینید اولین فایلی که برنامهء ما طلب میکنه mingwm10.dll هست. من این فایل رو براحتی در E:\QT\mingw\bin پیدا کرده و یک کپی از اون رو کنار فایل اجرایی برنامه قرار میدم (من کیوت خودم رو در E:\QT نصب کرده ام اما آدرس مال شما احتمالا فرق داره).
    حالا با اقدام به اجرای برنامه، پیام:

    This application has failed to start because QtCore4.dll was not found. Re-installing the application may fix this problem

    دریافت میشه که میبینیم اینبار فایل QtCore4.dll رو درخواست میکنه.
    این فایل رو هم در آدرس E:\QT\qt\bin پیدا و کپی کردم.
    بعد یک فایل دیگر مورد نیاز هم QtGui4.dll هست و همونطور که از اسمش مشخصه محتوی اجزای رابط کاربری گرافیکی کیوت هست، به همین ترتیب در E:\QT\qt\bin پیدا و کپی کردم.
    حالا برنامهء ما با کلیک کردن روی اون اجرا میشه و کافیه برنامه رو همراه با فایلهایی که به این روش پیدا و کپی کردیم پکیج کنیم. یعنی هرجا فایل اجرایی برنامه میره، فایلهای دی ال ال هم در دسترسش باشن.
    راستی وقتی با امکان search ویندوز داخل دایرکتوری نصب کیوت دنبال فایلهای لازم میگردید، اگر دو نسخهء مختلف از فایل مورد نظر پیدا شد، هرکدام که با کپی کردنش برنامتون اجرا شد یا فایل dll بعدی رو درخواست کرد، همون فایل صحیح هست. مثلا کیوت من یکسری فایل مشابه در E:\QT\bin هم داره که برنامم با اونها کار نمیکنه. طبق تحقیقی که در اینباره انجام دادم، دو سری بودن این فایلها ظاهرا به این خاطر هست که یک سری از اونها (اونهایی که در E:\QT\bin هستن) برای اجرای برنامه های خود کیوت هستن و جزو توزیع استاندارد کتابخانهء کیوت نیستن (علت این امر بماند که به بحث ما مربوط نمیشه و مجالش نیست).
    یک راه دیگه برای پیدا کردن dll های مورد نیاز، استفاده از برنامه هایی مثل Dependency Walker هست که dll هایی رو که یک برنامه ازشون استفاده میکنه با خیلی جزییات و اطلاعات مربوط دیگه لیست میکنن. برنامهء Dependency Walker رو میتونید از این آدرس بصورت رایگان دانلود کنید (حجمش هم کمه): http://www.dependencywalker.com
    دقت کنید هر dll ای که اینطور برنامه ها لیست میکنن رو نباید در کل سیستم سرچ و با برنامه پکیج کرد، چون خیلی از اونها dll های خود ویندوز هستن و در تمام سیستمها وجود دارن و نیازی به همراه بودنشون با برنامه نیست.
    تقریبا تمام برنامه های کیوت (نسخهء اپن سورس که با MinGW کامپایل میشه) نیاز به این فایلها دارن:
    mingwm10.dll
    libgcc_s_dw2-1.dll (این فایل در نسخه های اخیر اضافه شده)
    QtCore4.dll
    QtGui4.dll
    و یک سری برنامه ها تنها به همین فایلها نیاز دارن و کار تمامه، اما اگر برنامهء شما از امکانات دیگری استفاده میکنه باید dll های دیگری رو هم اضافه کنید. یک نمونه از امکانات دیگه مثل کارهای شبکه/اینترنتی هست که نیاز به فایل QtNetwork4.dll داره.
    در فهرست بالا تنها درصورتی به فایل QtGui4.dll نیاز نیست که برنامه از اجزای کتابخانهء رابط گرافیکی کیوت و امکانات مربوطه استفاده نکنه.
    بنابراین شما میتونید این سه فایل رو همراه تقریبا هر برنامه ای بذارید و دیگه مراحلی رو که گفتم طی نکنید. اما بهرحال اگر برنامهء شما dll دیگری رو طلب کرد یا از امکان خاصی استفاده میکنه (اما ممکنه پیام خطایی هم نده)، باید dll های مربوط دیگر رو هم پیش برنامتون بذارید.

  18. #18

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    ................

  19. #19

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    یک نکتهء مهم دربارهء پلاگین ها میخوام بگم.
    بعضی کارایی ها در کیوت بصورت پلاگین پیاده سازی شدن. این پلاگین ها در پوشه ای بنام plugins در دایرکتوری نصب کیوت قرار دارن. اگر شما نسخه های جدید Qt SDK رو نصب کنید، احتمالا آدرس چنین خواهد بود: Qt installation dir\qt\plugins
    منظور از Qt installation dir آدرس دایرکتوری محل نصب کیوت روی سیستم شما هست.

    بقیهء مطلب رو با یک مثال نشون میدم که درمورد پلاگین jpg هست، اما بنظرم دقیقا همانطور به بقیهء موارد نیز قابل تعمیم هست. اینکه چه برنامه ای از چه امکاناتی استفاده میکنه و کدام پلاگین ها مورد نیاز هستن و نام فایلهای اونها چیه، کاری هست که برنامه نویس باید انجام بده و بنظرم با بیان این مطلب و این مثال دیگه زیاد سخت نیست.

    این کد:

    #include <QApplication>
    #include <QPixmap>
    #include <QPushButton>

    int main(int argc, char *argv[]) {

    QApplication app(argc, argv);

    QPushButton quit("Quit");
    QObject::connect(&quit, SIGNAL(clicked()), &app, SLOT(quit()));
    quit.show();

    QPixmap pm(100,100);
    pm.save("test.jpg", "jpg");

    return app.exec();
    }

    برنامه ای ایجاد میکنه که بجز یک دکمه که کلیک کردنش باعث خروج از برنامه میشه، یک تصویر خالی با ابعاد 100 در 100 پیکسل ایجاد میکنه و با فرمت jpg اون رو در دایرکتوری جاری ذخیره میکنه. این یک تصویر تماما سیاه خواهد بود و محتویات دیگری نداره، چون ما فقط میخوایم طرز پکیج کردن برنامه هایی رو که با پلاگین های استاندارد کیوت و در اینجا با پلاگین jpg کیوت کار میکنن نشون بدیم.
    چون برنامهء ما در فرمت jgp فایل رو ذخیره میکنه، بنابراین ما به پلاگین jpg کیوت نیاز داریم چون امکان کار با این فرمت توسط یک پلاگین در کیوت پیاده سازی شده.
    وقتی ما برناممون رو در خط فرمان اجرا میکنیم همه چیز خوب کار میکنه و فایل مورد نظر در دایرکتوری پروژه ایجاد میشه.
    اما ما بعد سعی میکنیم برنامه رو به روشی که در پست قبلی گفتم پکیج کنیم تا مستقل از نصب کیوت و روی هر سیستمی اجرا بشه و ضمنا ما هم بتونیم بدون خط فرمان و با کلیک مستقیم روی فایل برنامه اون رو اجرا کنیم.
    ما فایلهای QtCore4.dll، QtGui4.dll و mingwm10.dll رو طبق معمول و مطابق درخواست برنامه در اختیارش میذاریم (در دایرکتوری فایل اجرایی برنامه کپی میکنیم). حالا برنامه رو با کلیک کردن روش اجرا میکنیم و میبینیم که ظاهرا همه چیز درست پیش میره.
    اما حالا اگر برنامه رو روی سیستم دیگری ببریم که کیوت روش نصب نیست، برنامه با این اشکال مواجه میشه که فایل jpg تولید شده عملا خراب خواهد بود و میبینیم که یک فایل خالی با حجم صفر بایت ایجاد میشه. این به این خاطر هست که برنامهء ما از پلاگین jpg که از دایرکتوری نصب کیوت بدست میاره استفاده میکنه، اما روی سیستم دیگر که کیوت نصب نشده یا احتمالا چون در آدرس دیگری نصب شده، نمیتونه این پلاگین رو پیدا کنه.
    ضمنا شما میتونید با Rename کردن موقت دایرکتوری نصب کیوت، این شرایط عدم پیدا شدن پلاگین jpg رو برای تست کردن روی سیستم خودتون شبیه سازی کنید و نهایتا با پکیج کردن تمام فایلهای لازم مطمئن بشید برنامهء شما کاملا مستقل از نصب کیوت روی سیستم کار میکنه. البته یادتون باشه به موقع نام دایرکتوری کیوت رو به نام اولیه برگردونید و همینطور موقع تست حواستون باشه که نام دایرکتوری کیوت در وضعیت استاندارد خودش هست یا در وضعیت تغییر نام یافته و شما کدوم حالت رو برای تست لازم دارید (اشتباه در این زمینه راحت پیش میاد و آدم رو گمراه کرده و باعث هدر رفتن وقت و انرژی و نیاز به تکرار مجدد تست ها میشه).

    خب حالا ما چطور باید پلاگین رو در اختیار برناممون بذاریم؟
    در دایرکتوری plugins چند دایرکتوری دیگه وجود داره که یکی از اون فولدرها نام imageformats داره و در درونش یکسری پلاگین مربوط به فرمت های تصویر وجود داره که یکی از اونها qjpeg4.dll هست.
    ما باید یک فولدر دقیقا با همین نام (imageformats) در فولدر برنامهء خودمون ایجاد کرده و بعد فایل qjpeg4.dll رو هم داخل این فولدر که درست کردیم کپی کنیم.
    حالا اگر برنامه رو مجددا تست کنیم (تغییر نام دایرکتوری کیوت فراموش نشه)، میبینیم که فایل jpg تولید شده اینبار درست و غیرخالی خواهد بود.

    یک نکته: اگر به فایل qjpeg4.dll خصوصیت پنهان (hidden attribute) داده بشه، برنامهء کیوت اون رو load نکرده و برنامه دوباره درست کار نخواهد کرد.

    نکتهء دیگر: موقعی که برنامهء مثال رو اجرا میکنید، محل ذخیرهء فایل تولید شده احتمالا بسته به اینکه از خط فرمان برنامه رو اجرا میکنید یا با کلیک مستقیم، متفاوت خواهد بود. چون معمولا خط فرمان در دایرکتوری پروژه قرار داره، اجرای برنامه از این طریق باعث ایجاد فایل تصویر در دایرکتوری پروژه خواهد شد، اما با کلیک مستقیم روی برنامه، فایل در دایرکتوری خود برنامه که فولدر release در درون فولدر پروژه هست ایجاد میشه.

  20. #20

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    ..................

  21. #21

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    راستی حتما دقت کردید که ما برای هر جزء از کتابخانهء گرافیکی کیوت که لازم داریم مجبوریم یک دستور include بذاریم. اینکار کمی زحمت داره و ممکنه بارها با پیام خطاهای بعضا عجیب و غیرقابل فهم بعلت فراموش کردن درج دستور اینکلود برای تعریف شیء مورد نظر مواجه بشیم.
    برای اینکه بخش بزرگی از این قضیه رو حل کنیم، میتونیم بجای اینکلود کردن تک تک اجزای کتابخانهء اجزای رابط کاربر گرافیکی کیوت، این یک اینکلود رو قرار بدیم که باعث میشه تمام اینکلودها برای تمام اجزای رابطهای گرافیکی انجام بشن:

    #include <QtGui>

    تنها اشکال بزرگ این دستور اینه که بعلت اینکلود شدن تمام هدرها، که بیشتر اونها مورد نیاز برنامهء ما هم نیستن، پردازش زیادی انجام میشه و این به زمان کامپایل اضافه میکنه؛ ولی اگر سیستم شما اونقدری قوی هست که این زمان افزوده کم و نامحسوس باشه میتونید از این روش برای راحتی کار استفاده کنید.
    اما معمولا اینکلود کردن تک تک فایلهای هدر مورد نیاز بنظر حرفه ای تر میاد و ممکنه مزایای دیگری هم با دید وسیعتر و دورنگری بیشتر داشته باشه. روش اینکلود کردن تک تک و فقط اجزایی که برنامه نیاز داره برای حرفه ای تر شدن و شناخت ساختار و ارتباط و طرز کار اجزای رابط گرافیکی، مناسبتر بنظر میرسه.

  22. #22

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    ..........

  23. #23

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

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

    qDebug("variable abc has a zero value");
    qDebug("v1=%d, v2=%d", v1, v2);

    ما یک فرم دیگه رو هم از این تابع میتونیم بکار ببریم که گاه راحتتره و شبیه cout در زبان C++‎ عمل میکنه.
    اما برای اینکه بتونیم از این شکل هم در برنامه هامون استفاده کنیم باید فایل header خاصی رو به برنامه اضافه کنیم:

    #include <QtDebug>

    حالا میتونیم مثلا اینطور بنویسم:

    qDebug()<<"condition 1"<<v1<<v2;

    دقت کنید که پرانتزها ضروری هستن.
    در این فرم از بیشتر انواع دادهء هم سی++ و هم کیوت میشه استفاده کرد.

    خب تا اینجا دیدیم که چطور میشه پیامهایی رو به خروجی فرستاد. کاری که ظاهرا میشه توسط printf و cout هم که آشنای برنامه نویسان سی و سی++ هستن انجام داد. البته مشخصا یک مزیت استفاده از qDebug این هست که نیازی به درج اینکلود هدر سی و سی++ نداریم و یک مزیت دیگر هم اینکه با انواع داده ای خاص کیوت میشه راحتتر کار کرد و نیاز به تبدیل ندارن؛ چیزی که ممکنه درمورد توابع printf و cout نیاز بشه (مثلا احتمالا درمورد رشته های کیوت که از نوع یونیکد هستن).

    مسلمه که ما فقط موقعی میتونیم از خروجی متنی در برناممون کمک بگیریم که برنامهء ما یک رابط خط فرمان داشته باشه؛ یعنی ما دستور CONFIG+=console رو به فایل پروژه اضافه کرده باشیم.
    البته درصورتیکه برنامه در یک محیط IDE که امکانات دیباگ داره بکار بره، این خروجی مستقیما به دیباگر ارسال میشه و بنظرم دیگه نیازی به داشتن خط فرمان ندشته باشیم (تست نکردم، ولی در مستندات ظاهرا اینطور نوشته).

    حالا ممکنه مثلا گاهی ما بخوایم خط فرمان نداشته باشیم یا اینکه اصولا این دستورات خروجی (توسط qDebug) در برنامه باقی بمونن و جزیی از پیامهای خطای برنامه باشن که میخوایم موقعی که برنامه رابط خط فرمان هم نداره، اطلاع داده بشن.
    به این منظور میتونیم اینطور عمل کنیم:

    #include <QErrorMessage>

    و بعد در اوایل بدنهء برنامه:

    QErrorMessage::qtHandler ();

    این باعث میشه پیامهای qDebug بجای رفتن به کنسول (محیط متنی و خط فرمان) یا دیباگر، توسط یک پنجرهء گرافیکی که به کاربر اجازه میده انتخاب کنده که پیام یکسانی دوباره نمایش داده نشه، به اطلاع کاربر برسه.

    راستی از QErrorMessage میشه بصورت مستقل و بدون اینکه مجبور باشیم اون رو بعنوان نمایش دهندهء پیامهای qDebug تنظیم کنیم هم استفاده کرد. مثلا به اینصورت:

    QErrorMessage errOut;
    errOut.showMessage("application's config file is missing!");

  24. #24

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    .................

  25. #25

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    توضیح: این پست تاریخچه ای هست و دیگه مسئلهء ذکر شده در این پست در کیوت وجود نداره (در نسخه های اخیر Phonon بدون مشکل بصورت پیشفرض فعال هست و کار میکنه).

    ================================================

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

    درمورد phonon باید بگم که یک فریمورک یا سیستم پخش مالتی مدیا، یعنی عموما صوت و ویدئو، هست که استفاده از اینطور امکانات رو در برنامه ها بصورت خیلی ساده و استاندارد و مستقل از پلتفرم درآورده. یعنی با چند خط کد میشه ویدئو یا صوت رو پخش و کنترل کرد بدون اینکه به جزییات دیگر و کدهای حجیم تر و پیچیده تر نیاز داشته و به پلتفرم خاصی وابسته باشیم. phonon خودش جزو کیوت نیست و یک پروژهء اپن سورس دیگر هست که برنامه نویسان و مراجع دیگری تهیه کردن، اما پشتیبانی از اون و اینترفیس برنامه نویسی لازم در کیوت گنجانده شده (یک مزیت بزرگ و مایهء قدرت نرم افزارهای آزاد همین امکان ترکیب و استفاده از کارهای دیگران هست).

    مسئله ای که این قضیه رو بیشتر مایهء تاسف میکنه اینه که این امکان در نسخه های دیگر کیوت، منجمله نسخه های اپن سورسی که با کامپایلر Visual C++‎ میکروسافت کامپایل بشن وجود داره. البته بازهم من هنوز گزینهء کامپایل با ویژوال سی++ رو آزمایش نکردم، ولی میگن مشکل فقط با mingw هست. سعی من در این هست که این قابلیت با mingw امکان پذیر بشه چون ابزارهایی مثل mingw و کامپایلرهای آزاد معروفش نزد برنامه نویسان خبره و نرم افزار آزاد خیلی متداول و محبوب هستن (البته در گنو/لینوکس بیشتر) و ضمنا با mingw نیاز و وابستگی ای نسبت به ابزارهای صرفا میکروسافتی و انحصاری نخواهیم داشت و بیشتر هم مستقل از پلتفرم خواهیم بود.
    بهرحال اگر با mingw موفق نشدم، احتمالا گزینهء ویژوال سی++ رو هم خواهم آزمود و اگر موفق شدم، روش افزودن phonon به کیوت نسخهء اپن سورس با ویژوال سی++ رو آموزش خواهم داد که باعث میشه دیگه کمبود و شکایتی در این زمینه نباشه (مگر از جانب افراد گیری مثل من که خیلی علاقمند به نرم افزار آزاد باشن).

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

    البته پخش صوت به شکل ساده برای بخشهای رابط کاربری، قابلیت مورد انتظاری در یک فریمورک اپلیکیشن نویسی و GUI هست، بنابراین حتی بدون phonon هم امکان پخش اینطور صوتها در کیوت بطور خیلی راحتی وجود داره که بعدا بهش اشاره خواهم کرد.

  26. #26

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    ................

  27. #27

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    توضیح: این پست تاریخچه ای هست (به توضیح پست قبلی مراجعه شود)

    =====================================

    مدتیست هر روز به هر دری زدم، با مسئولان رسمی خود کیوت مکاتبه کردم، توی اینترنت سرچ کردم، مدت زیادی توی یک فروم انگلیسی زبان داشتم سر و کله میزدم، حداقل بیش از ده بار کیوت رو روی سیستم نصب و کامپایل مجدد کردم. هر کامپایل حداقل حدود 4 ساعت روی سیستم 800Mhz من وقت میبره. تازه کلی مخلفات جانبی و همچنین دانلود داشتم. صدها مگابایت فقط حجم Microsoft DirectX SDK هایی بوده که دانلود کردم (نسخه های مختلفی رو تست کردم). آخرین DirectX SDK که تاریخش 2008 هست، به تنهایی حدود 500MB حجم داره.

    مصمم بودم بالاخره کیوت رو به فونون مجهز کنم. منتها با MinGW، نه با Microsoft VC.
    گزینهء میکروسافت ویژوال سی++ رو گذاشته بودم بعنوان آخرین راه چاره. انحصاریه دیگه نه؟

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

    حالا بهرحال بنظر میرسه مشکل رفع شده. البته من روی سیستم خودم با پخش ویدئو از طریق فونون مشکل جدی دارم (تصویر بهم خورده)، ولی صوت بدون مشکل پخش میشه. و ضمنا این مشکل فقط روی سیستم من هست و حتی برنامه ای رو که روی سیستم خودم کامپایل کرده بودم وقتی روی سیستم های دیگه ای اجرا کردم ویدئوش مشکلی نداشت! تنها مورد ابهام برام همینه که چرا سیستم من اینطوریه و آیا باگی چیزی هست و چطور میشه حلش کرد. امیدوارم این تصادفی و نادر باشه و روی بقیهء سیستمها مشکلی نباشه.
    اگر کسی داوطلب میشه لطفا Qt SDK رو برای ویندوز دانلود و نصب کنه و دوباره به روش لازم برای افزودن فونون کامپایل کنه و ببینه برنامه های فونون در ویدئو مشکلی دارن یا خیر.

    اما من یه کار دیگه هم کردم که بنظرم خیلی جالب و مفیده و واقعا بهش نیاز بود.
    اونم اینه که پکیج و برنامه ای ساختم که محتوی تمام فایلها و ابزارهای لازم برای کامپایل مجدد Qt SDK با MinGW جهت اضافه کردن فونون به کیوت هست.
    جالب اینکه این پکیج پس از فشرده شدن فقط حدود 6 مگابایت حجم داره. تنها فایلهای لازم رو از DirectX SDK رو در این پکیج گذاشتم که علت اصلی کم شدن حجم اونه (کس دیگری تاحالا حتی اینکار راحت رو هم نکرده).
    و مزیت بزرگ دیگر این پکیج اینه که بطور خودکار و خیلی راحت و حتی همراه یکسری امکانات و ویژگیهای مفید، این امکان رو میده که کیوت رو بدون نیاز به دانش فنی و مهارتهای مربوطه کامپایل مجدد کنیم.

    کار کامپایل مجدد کیوت و اضافه کردن phonon بهش از چیزی که فکر کنید سخت تره و مشکلات و نکات زیادی داره که جایی مطرح نشده؛ راهنماهای ارایه شده خیلی مبهم و ناقص هستن. اونهایی که راهنماها رو نوشتن خودشون توی کار و خبره بودن و ضمنا تمام حالات و پیکربندی ها رو هم تست و ذکر نکردن.

    اما با پکیجی که من درست کردم همه چیز خیلی راحتتر شده.
    خودتون ببینید و قضاوت کنید.
    مزایاش:
    - مجتمع شدگی تمام مواد اولیه و ابزارها که پیدا کردن و دانلود و استفاده از هرکدوم خودش دردسری هست؛ بخصوص برای افرادی که بقدر کافی دانش پایه و مهارت بخصوص در ابزارهای دنیای نرم افزار آزاد ندارن.
    - حجم بسیار کمتر نسبت به دانلودی که شما برای اون مواد و ابزارها بر طبق راهنماهای اینترنتی باید انجام بدید. البته عمدهء این حجم به DirectX SDK مربوط میشه که چندصد مگابایت هست. اما حجم پکیجی که بنده تهیه کردم پس از فشرده سازی فقط 6 مگابایت هست و توش فقط فایلهای لازم رو از DirectX SDK گذاشتم.
    - خودکار بودن کامل عملیات: نیاز به هیچ تخصص و وارد کردن فرمانهای طولانی و پیچیده و با ترتیب خاص نیست و برنامه اینکارها رو برای شما انجام میده. فقط باید بتونید دستورالعمل های ابتدایی برنامه رو که به زبان انگلیسی هست تشخیص بدید. البته من توضیح فارسی اون رو هم در انتهای این پست میذارم.
    - امکانات اضافه: گزینهء شات داون کردن خودکار سیستم که با توجه به اینکه عملیات ساخت معمولا چند ساعت طول میکشه ممکنه نیاز باشه + لاگ کردن زمانهای شروع فرمانها که میشه میزان زمانی رو که هر فرمان مصرف کرده بعدا از روش محاسبه کرد + گزینهء فرستادن خروجی فرمانهای ساخت به فایل لاگ که بعدا به عیب یابی و تشخیص پیکربندی ساخت خیلی کمک میکنن.

    پکیج رو از يكي از اين مكانها دریافت کنید:

    http://www.4shared.com/file/12072345...n4qtmingw.html

    http://rapidshare.com/files/26015601...on4qtmingw.zip

    http://flashqard-project.org/uploads...on4qtmingw.zip

    سایت این لینک دانلود آخر مال یکی از دوستان عزیز هست که لطف کرد و پکیج منو روی سایتش آپلود کرد؛ خود سایت و پروژه ای که سایت درموردش هست ربطی به بنده یا پکیج phonon4qtmingw نداره.


    یادتون باشه شما باید یک نسخهء اخیر از Qt SDK رو بطور کامل نصب کنید و قبلا هم پیکربندی و کامپایلش نکرده باشید تا احیانا تداخلی در کار این برنامه ایجاد نکنه.
    من روی qt-sdk-win-opensource-2009.03 (محتوی نسخهء 4.5.2 کیوت) تست کردم.
    اگر مشکلی یا تغییری در نسخه های بعدی بود به من اطلاع بدید.

    ضمنا معلوم نیست و تضمینی وجود نداره که mingw و phonon و Qt بالاخره چه وقت باهم کاملا هماهنگ بشن و ما یک فونون کامپایل شده همراه با نسخهء اپن سورس کیوت آماده داشته باشیم.
    البته امیدوارم اینکار هرچه زودتر انجام بشه. بهرحال فعلا پکیجی که بنده تهیه کردم تنها راه کامل و راحت موجود هست و کار رو راه میندازه.
    این تاپیک آشنایی با کیوت بخاطر این مسئله دچار تعطیلی موقت شده بود چون نمیدونستم بالاخره باید بگم phonon داریم یا نداریم و با mingw کار کنید یا ویژوال سی++. نبودن امکانات ویدئو و صوت پیشرفته هم روی یک فریمورک اپلیکیشن نویسی، اونم وقتی روی نسخه های دیگرش هست، واقعا افراد رو دچار سردرگمی و ناامیدی میکنه. اونم فریمورکی که ادعای کراس پلتفرم بودن داره.

    روش استفاده از این پکیج و برنامه به اینصورت هست:

    - پکیج رو روی هارد اکسترکت کنید (مکانش فرقی نمیکنه)

    - فایل install.cmd رو از داخل دایرکتوری پکیج با دابل کلیک کردن اجرا کنید (توجه: از طریق خط فرمان فراخوانی نکنید! فقط از طریق محیط گرافیکی ویندوز و با کلیک)
    بلافاصله بعد از یکبار اجرا، میتونید پنجرهء مربوط به install.cmd رو با کلیک کردن روی دکمهء close ببندید (البته بهتره قبلا توضیحاتش رو بخونید).

    - حالا خط فرمان کیوت رو باز کنید و فرمان phonon4qt رو وارد کنید.

    - در پرسش اول میپرسه که آیا میخواید بعد از کامپایل، سیستم بطور خودکار خاموش بشه یا نه؛ حرف y رو برای تایید وارد کنید و هر حرف دیگری رو برای عدم تایید.

    - در پرسش بعدی میپرسه که آیا میخواید خروجی فرمانهای ساخت (configure و mingw32-make) هم به فایل لاگ فرستاده بشه (نتیجتا دیگه در کنسول دیده نمیشن).

    - حالا منتظر باشید تا عملیات کامپایل تمام بشه؛ میتونید در این مدت برید به کارهای دیگرتون برسید. حواستون باشه سیستم در این مدت خاموش نشه و پنجرهء کنسول رو هم اشتباهی نبندید.

    لطفا هر مشکل و سوالی رو در اینجا مطرح کنید و اگر برنامه درست کار نمیکرد بگید.
    ضمنا سورس دو برنامهء خیلی ساده برای تست صوت و ویدئو در پکیج برنامه هست که میتونید کامپایل و تست کنید. یادتون نره فایلهای ویدئو و صوت لازم رو در اختیار این برنامه ها بذارید.

    نکته: چون این برنامه کیوت رو در حالت release کامپایل میکنه، فقط از خط فرمان mingw32-make release برای ساخت برنامه های خودتون استفاده کنید.

    =============================================

    هرکس که میتونه و مایل هست لطفا این پکیج رو دانلود و روی سیستم ویندوزش تست کنه: http://rapidshare.com/files/258404056/release.zip.html
    حجم: حدود 8 مگابایت
    این محتوی یک برنامهء خیلی سادهء کامپایل شده برای تست ویدئو با فونون هست. تمام دی ال ال های لازم هم همراهش هست و نیاز نیست روی ویندوزتون کیوت داشته باشید یا برای مجهز شدن به phonon کامپایل مجددش کنید.
    من با ویدئو روی سیستم خودم مشکل دارم و تصویر قاطه! اما روی دوتا سیستم دیگه که تست کردم ظاهرا مشکل نداره. ولی از طرف دیگه بازهم مطمئن نیستم و شاید روی سیستمهای قدیمی یا کارت گرافیک خاصی مشکل داره. بهرحال میخوام مطمئن بشم آمار این مشکل زیاد نیست و باگ جدی ای در فونون کیوت که کامپایل کردم وجود نداره.
    لطفا نتیجه رو با ذکر مشخصات سخت افزار و سیستم عامل خودتون در اینجا درج کنید.

  28. #28

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    ..............

  29. #29

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    برای ساده ترین حالت پخش صوت و با فرمت wav در برنامه های کیوت میتونیم از کلاس QSound استفاده کنیم. بنظرم مثلا موقعیکه فقط نیاز داریم که دکمه هایی که کاربر کلیک میکنه صدای کوتاهی بدن و غیره.
    اما برای کارهای پیچیده تر و پشتیبانی از فرمتهای دیگر، همونطور که گفتم باید از Phonon استفاده کنیم که خوشبختانه موفق به مجهز کردن کیوت نسخهء اپن سورس با MinGW به این امکان خاص شدیم.

    من فعلا تنها مورد QSound رو معرفی میکنم:

    #include <QApplication>
    #include <QSound>
    #include <QLabel>
    #include <QDebug>

    int main(int argv, char **args) {
    QApplication app(argv, args);

    QSound::play("test.wav");

    QLabel l("do you hear the sound?");
    l.show();

    return app.exec();
    }

    در اینجا ما از متد استاتیک QSound برای پخش صوت استفاده کردیم که نتیجتا بلافاصله با اجرای برنامه صدا هم پخش میشه.
    اما برای کنترل بیشتر، میتونیم یک شیء QSound با نام فایل مورد نظر ایجاد کنیم و بعد از متدهای play و stop استفاده کنیم که چون این متدها از نوع SLOT هستن میتونیم مثلا یک دکمه رو مستقیما به اونها اتصال بدیم (با استفاده از متد استاتیک QObject::connect که ضمنا در تمام کلاسهای کیوت هم بخاطر مشتق شدگی از QObject بهش دسترسی مستقیم داریم).

  30. #30

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    .................

  31. #31

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    میشه گفت کیوت سه روش برای ایجاد تایمر داره؛ QTimer، QBasicTimer و تایمر درونی QObject.
    تایمر عمومی و استاندارد در کیوت QTimer هست که امکانات و انعطاف لازم رو برای تایمرهای حرفه ای مختلف داره.
    اما گاهی نیاز به یک تایمر داریم که بسادگی تابعی رو در فواصل زمانی معین اجرا بکنه و برنامهء ما احتمالا ساده تر و کوچکتر از اونه که بخوایم یک کلاس اختصاصی با اسلات (Slot) مخصوص تایمر تعریف کنیم و تعریف اون رو در یک فایل جداگانه قرار بدیم و بعد یک QTimer رو هم به برنامه اضافه کرده و به اسلات کلاس خودمون متصل کنیم. احتمالا برنامهء ما کوچک و ساده هست یا یک برنامهء آزمایشی یا برای تست چیزی و میخوایم سریع و راحت و مختصر در تنها یک فایل تمام برنامهء خودمون رو گنجانده و کامپایل کنیم.
    در اینگونه موارد میتونیم از تایمر درونی QObject استفاده کنیم. هر کلاس مشتق شده از QObject که عملا شامل تمامی کلاسهای خود کیوت هم میشه دارای امکان یک تایمر داخلی ساده هست.
    این تایمر با تابع startTimer در QObject بکار میفته، و با فاصلهء زمانی تعیین شده تابع timerEvent رو مکرارا فراخوانی میکنه.

    بعنوان نمونه این کد:


    #include <QApplication>
    #include <QLabel>
    #include <QBasicTimer>

    class TimerTest : public QObject
    {

    public:
    TimerTest(QWidget *p, float t) {
    this->p=p;
    startTimer(int(t*1000));
    }

    void timerEvent(QTimerEvent *) {
    p->setVisible(!p->isVisible());
    }

    QWidget *p;

    };

    int main(int argv, char **args) {
    QApplication app(argv, args);

    QLabel l("Blinking...");
    l.setAlignment(Qt::AlignHCenter);
    l.show();
    TimerTest t(&l, .5);

    return app.exec();
    }


    یک پنجرهء کوچک ایجاد میکنه که هر نیم ثانیه ظاهر و ناپدید میشه (نکته: چون این تنها پنجره و بنابراین پنجرهء اصلی برنامهء ما هم هست، دکمه برنامهء ما در Taskbar ویندوز هم هر بار با نامریی شدن پنجره حذف شده و با پدیدار شدنش دوباره ظاهر میشه).
    همونطور که میبینید ما کلاس TimerTest خودمون رو از QObject مشتق کردیم تا امکانات QObject رو، در اصل تنها بخاطر تایمر درونی اون، به کلاس خودمون اضافه کنیم.

    ------------------------------

    کلاس QBasicTimer هم خیلی شبیه به تایمر درونی QObject کار میکنه و تابع timerEvent شیء مورد نظر رو (که باید از QObject ارث بری داشته باشه) فراخوانی میکنه؛ اما بصورت یک کلاس جداگانه تعریف شده.
    در مستندات این کلاس آمده که QBasicTimer در اصل برای کاربردهای داخلی خود کیوت طراحی شده (ظاهرا بخاطر پرفورمنس، از QTimer سبکتر و سریعتر هست) و بهتره برنامه نویسان از QTimer در برنامه های خودشون استفاده کنن. اما خب بهرحال این کلاس و روش تایمر داخلی QObject هم در دسترس برنامه نویسان هست و بدون مشکل کار میکنه و ضمنا همونطور که اشاره کردم مزایایی داره و در شرایط خاصی میتونه مناسبتر باشه.
    توجه داشته باشید که ما از این روشهای دیگر استفاده نمیکنیم چون سبکتر و سریعتر هستن، چون این مقادیر در برنامه های برنامه نویسان اونقدری ناچیز هستن که بحساب نمیان و یک کد منعطف و خوانا خیلی بهتر از کم کردن منابع مصرفی برنامه به مقدار ناچیز هست؛ اما ما از اونها در ساده تر کردن و سریعتر کردن کدنویسی و ساخت برنامه های خیلی کوچک یا آزمایشی و یا شرایط خاص دیگر استفاده میکنیم، چون وقت و انرژی برنامه نویس حرفه ای از منابع بسیار ارزشمند محسوب میشن. البته اینها نظر و توجیه بنده برای استفاده از این روشهای نه چندان استاندارد هست!

  32. #32

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    ..........

  33. #33

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    این یک برنامهء کوچکه که با Qt نوشته شده.
    یک بازی ساده هست که در بخش خودآموز کیوت بعنوان مثال آورده شده بود؛ اما ویژگیهای متعددی رو که بعضی از اونها بعنوان تمرین مطرح شده بودن بهش اضافه کردم.
    شاید بتونه بعنوان یک نمونه، قابلیت ها و انعطاف کیوت و همچنین رابطهء اونها با حجم کد رو نشون بده. از امکانات متنوعی از کیوت درش استفاده شده که باعث میشه مثال کوچک خوبی بنظر برسه.

    کد منبع: http://www.4shared.com/file/12187321...annon-src.html

    پکیج اجرایی (ویندوز): http://www.4shared.com/file/12187258...annon-bin.html


  34. #34

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    ............

  35. #35

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    حتما تابحال برنامه هایی رو دیدید که موقعی که میخوایم سیستم رو shutdown یا logoff بکنیم پیام میدن و مثلا میگن فایلهای شما save نشده و میخواید چکار کنید.
    حداقل بعضی از این برنامه ها (مثلا نوتپد ویندوز) حتی این امکان رو هم میدن که عملیات shutdown یا logoff رو cancel کنیم.
    شما میتونید بوسیلهء کیوت هم چنین امکانی رو در برنامه هاتون قرار بدید.
    این یک نمونه کد و برنامهء ساده هست که چگونگی انجام اینکار رو نشون میده:

    #include <QApplication>
    #include <QMessageBox>
    #include <QSessionManager>
    #include <QLabel>

    class MyApp : public QApplication
    {
    public:

    MyApp(int argc, char *argv[]) : QApplication(argc, argv) {}

    void commitData(QSessionManager& manager) {
    if(manager.allowsErrorInteraction()) {
    int ret = QMessageBox::warning(
    0, "My Application", "Realy quit and shutdown/log off?", QMessageBox::Yes|QMessageBox::No
    );
    if(ret==QMessageBox::No) manager.cancel();
    }
    else {
    // we did not get permission to interact, then
    // do something reasonable instead
    }
    }
    };

    int main(int argc, char *argv[])
    {
    MyApp app(argc, argv);

    QLabel lbl("This is my Qt application.");
    lbl.show();

    return app.exec();
    }

    همونطور که میبینید، ما تابع QApplication::commitData رو Reimplement کردیم.
    برای آگاهی بیشتر به مستندات کیوت مراجعه کنید.
    چند نکته که من در آزمایشهای خودم بدست آوردم اینهاست:
    - این روش تنها برای شات داون یا لاگ آف از طریق محیط گرافیکی کار میکنه و مثلا اگر فرمان شات داون از خط فرمان فراخوانی شده باشه برنامه بدون امکان مقاومت بسته میشه.
    - اگر برنامهء شما از نوع خط فرمان باشه یا اصولا در پس زمینه اجرا میشه، باید حداقل یک عنصر GUI در برنامتون قرار بدید تا این روش بازهم کار کنه. برای اینکه این جزء گرافیکی دیده نشه و در برنامه های خط فرمان یا مخفی و پس زمینهء ما اختلالی ایجاد نکنه من چنین ترفندی رو بکار گرفتم:

    #include <QApplication>
    ...
    #include <QSplashScreen>

    class MyApp : public QApplication
    {
    ...
    };

    int main(int argc, char *argv[])
    {
    MyApp app(argc, argv);

    QSplashScreen* spl=new QSplashScreen;
    spl->show();
    delete spl;

    return app.exec();
    }

  36. #36

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    ................

  37. #37

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    این پست یک مثال از تبادل اطلاعات با وب هست.
    یک کاربرد جالب و مهم که بعضی وقتا بهش نیاز داریم آپلود کردن یک فایل از روی رایانه به سایت مورد نظر هست.
    چون مثالی برای آپلود فایل در رفرنس کیوت نیامده و نمونه کدهایی هم که در اینترنت پیدا کردم با استفاده از کلاس QHttp بود من این مثال رو برای استفاده از QNetworkAccessManager تطبیق دادم.
    QNetworkAccessManager کلاسی با رابط سطح بالاتری هست که شما باید در اغلب برنامه هاتون استفاده کنید؛ مگر اینکه نیاز به ارتباط سطح پایینتری برای تبادل اطلاعات با وب داشته باشید که در چنان صورتی از کلاسهای دیگه مثل QHttp استفاده میکنید.

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

    فایلهای کد برنامه:

    فایل main.cpp:

    #include <QApplication>

    #include "uploader.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    Uploader u;

    return app.exec();
    }


    فایل uploader.h:

    #include <QFile>
    #include <QObject>
    #include <QNetworkAccessManager>
    #include <QUrl>
    #include <QNetworkRequest>
    #include <qdebug.h>
    #include <QNetworkReply>
    #include <QBuffer>
    #include <QApplication>

    class Uploader : public QObject
    {
    Q_OBJECT

    public:

    Uploader() {
    uploadManager = new QNetworkAccessManager(this);
    connect(uploadManager, SIGNAL(finished(QNetworkReply*)),
    this, SLOT(uploadFinished(QNetworkReply*)));
    postData=new QByteArray;
    buffer=new QBuffer(postData, this);
    QFile *file=new QFile("test.txt");
    file->open(QIODevice::ReadOnly);
    boundary = "----xmdjekop098356td----";
    (*postData)=QString("--" + boundary + "\r\n").toAscii();
    (*postData) += "Content-Disposition: form-data; name=\"test\"; filename=\"test.txt\"\r\n";
    (*postData) += "Content-Type: text/plain\r\n\r\n";
    (*postData) += file->readAll();
    (*postData) += "\r\n";
    (*postData) += QString("--" + boundary + "--\r\n").toAscii();
    buffer->open(QBuffer::ReadOnly);
    QNetworkRequest req(QUrl("http://localhost/upload.php"));
    req.setHeader(QNetworkRequest::ContentTypeHeader, "multipart/form-data; boundary="+boundary);
    qDebug()<<"uploading result...";
    uploadManager->post(req, buffer);
    }

    public slots:

    void uploadFinished(QNetworkReply* r) {
    if(r->error()) {
    qDebug()<<"Upload network error: "<<r->error();
    r->deleteLater();
    qApp->exit(1);
    return;
    }
    qDebug()<<"upload reply: "<<r->readAll();
    r->deleteLater();
    qApp->exit(0);
    }

    private:
    QNetworkAccessManager* uploadManager;
    QBuffer* buffer;
    QByteArray* postData;
    QString boundary;
    };


    محتویات فایل پروژه:

    TEMPLATE = app
    TARGET =
    DEPENDPATH += .
    INCLUDEPATH += .

    # Input
    HEADERS += uploader.h
    SOURCES += main.cpp
    QT+=network
    CONFIG+=console

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

    اینهم نمونهء بسیار ساده شده ای از برنامهء سمت سرور ما که فایل آپلود شده رو دریافت و ذخیره میکنه.
    شما برای تست برنامهء آپلودر کیوت به چنین اسکریپت یا برنامهء دیگری هم در سمت سرور نیاز دارید.
    نام فایل upload.php هست که در دایرکتوری ریشهء localhost ذخیره میکنیم:

    <?php

    if (move_uploaded_file($_FILES['test']['tmp_name'], 'test.txt')) echo 'uploaded successfully.';
    else echo 'upload failed!';

    ?>

  38. #38

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    ...................

  39. #39

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    در اینجا میخوایم برای اینکه مطالب مقدماتی کیوت کامل باشن کمی هم درمورد استفاده از رابط های کاربری ای که بصورت ویژوال طراحی شدن صحبت کنیم. این رابطها با نرم افزار Qt Creator ایجاد میشن. البته در نسخه های قدیمی تر کیوت برنامهء جامع Qt Creator وجود نداشت و بجاش فقط برنامهء Qt Designer رو داشتیم. بهرحال در عمل برای کاربرد ایجاد رابطهای کاربری گرافیکی این دوتا فرقی نمیکنن. Qt Creator برنامهء جامعتری برای ایجاد برنامه های دسکتاپ هست که Qt Designer قدیم رو هم درواقع در داخل خودش مجتمع کرده و Qt Designer دیگه یک برنامهء مجزا که بطور مستقل در دسترس باشه نیست.

    طرز استفادهء کامل از Qt Creator و طراحی ویژوال رابط گرافیکی توسط اون رو خودتون باید یاد بگیرید و این تاپیک همونطور که از ابتدا گفتم، به این مسائل نمیپردازه. اما من یک مثال کوچک از بکارگیری رابطهای طراحی شده به روش ویژوال رو در اینجا نشون میدم.

    Qt Creator رو اجرا کنید.
    از منوی File گزینهء New رو انتخاب کنید.
    Qt Designer Form رو انتخاب کنید.
    Widget رو انتخاب کنید.
    یک دایرکتوری برای ذخیره ایجاد/انتخاب کنید.
    طراحی ویژوال: یک دکمه روی فرم (صفحهء رابطی که میخواید طراحی کنید) خودتون قرار بدید.
    نام این دکمه رو pb بذارید (مقدار فیلد objectName).
    خب حالا کار طراحی فرم ما تموم شده و میتونید فرم خودتون رو سیو کرده و برنامهء Qt Creator رو ببندید.

    چون من در اینجا میخوام فقط طرز استفاده از فرمهای تولید شده رو در سورس برنامه ها نشون بدم، بقیهء کارها رو به روش خیلی پایه ای استفاده از خط فرمان کیوت انجام میدم، وگرنه میشه بقیهء فایلهای برنامه رو هم با استفاده از Qt Creator ایجاد و در همون محیط کدنویسی کرد و مراحل کامپایل رو هم از طریق Qt Creator براحتی انجام داد (البته خودم هنوز تست نکردم!!).

    ضمنا توجه داشته باشید روشی که مطرح میشه یکی از چند روش استفاده از فایلهای تولید شده توسط محیط ویژوال کیوت هست که من این روش رو بخاطر مناسبتر و عمومی تر بنظر اومدن از بین بقیه انتخاب کردم.

    الان ما باید یک فایل با پسوند ui در دایرکتوری ای که Qt Creator انتخاب کرد یا ما براش انتخاب کردیم داشته باشیم. این فایل محتوی شرح رابط کاربری طراحی شده توسط شما، در فرمت XML هست. این فایلهای ui یا موقع ساخت برنامه به فایل و کدهای سی++ متناظر ترجمه و بعد کامپایل میشن و یا میتونن موقع اجرای برنامه بطور دینامیک لود و اجرا بشن. ما در اینجا به حالت اول، یعنی تبدیل و کامپایل اولیه میپردازیم چون بنظرم عمومی تر و بهینه تر هست.

    فایل من اسمش form.ui هست که در دایرکتوری ای با نام test روی دسکتاپم ذخیره شده.
    وقتی من اقدام به ساخت برنامه بکنم یک فایل به نام ui_form.h از روی این فایل ایجاد خواهد شد که محتوی یک کلاس با نام Form خواهد بود که این کلاس کدهای سی++ معادل رابط گرافیکی ای رو که بصورت ویژوال طراحی کردیم در خودش داره.

    حالا من یک فایل با نام myui.h در دایرکتوری برنامه ایجاد میکنم که محتویاتش اینهاست:

    #include <QWidget>
    #include "ui_form.h"

    class myUi : public QWidget, private Ui::Form
    {
    Q_OBJECT

    public:
    myUi(QWidget *parent = 0) : QWidget(parent)
    {
    setupUi(this);
    }

    private slots:
    void on_pb_clicked() {
    qApp->quit();
    }

    };

    در خط یک و دو اینکلودهای لازم رو انجام دادیم.
    ما نیاز داریم یک کلاس درست کنیم (اسم این کلاس رو myUi گذاشتم) که ترکیبی از QWidget یا (هر کلاس رابط گرافیکی دیگری که میخوایم) باشه که فرم ما نیاز داره اون رو بعنوان Parent خودش داشته باشه و بعد بتونیم اجزای دیگری رو هم که میخوایم، بدون نیاز به دستکاری فایل فرم مورد نظر به کلاس خودمون اضافه کنیم؛ بنابراین ما کلاسی میسازیم (خط 4) که ترکیبی از هردوی QWidget و کلاس تعریف شده در ui_form.h باشه.
    private در private Ui::Form میگه که اجزای کلاس رابط گرافیکی طراحی شده باید فقط از داخل این کلاس ترکیبی در دسترس باشن (این یک طراحی استاندارد و اصولی بحساب میاد).
    فضای نامی Ui هم در ui_form.h تعریف شده؛ بهتره به محتویات ui_form.h خوب نگاه کنید (این فایل موقع اجرای فرمان mingw32-make release تولید میشه). چیز حجیم و پیچیده ای داخلش نیست که قابل درک یا نوشتن توسط خودمون نباشه!
    حتما یادتون هست که در تعریف کلاسهایی که در اونها سیگنال و اسلات (Signals and Slots) ایجاد میکنیم به ماکروی Q_OBJECT نیاز داریم. ضمنا یک نکتهء ریز قابل ذکر اینه که فایلی که این ماکرو درش هست باید پسوند h داشته باشه (قبلا در این تاپیک گفتم چرا).
    در constructor ما setupUi رو که عضو کلاس تعریف شده در ui_form.h هست فراخوانی میکنیم و کلاس جاری رو که یک شیء رابط کاربری گرافیکی هست (باید از QWidget ارث بری داشته باشه) بعنوان Parent بهش پاس میکنیم.
    کار setupUi اینه که اجزای رابط گرافیکی ما رو در کلاس Ui::Form ایجاد میکنه؛ بعد از این مرحله ما به این اجزاء (مثلا دکمهء خودمون) از داخل کلاس خودمون هم دسترسی مستقیم داریم. مثلا میتونیم این کد رو بکار ببریم:

    pb->setText("Quit app!");

    البته این یه مثال بود و بدیهی هست که برچسب روی دکمه رو میتونستیم در همون Qt Creator براحتی تعیین کنیم.
    در خط 16 ما اسلاتی رو تعریف کردیم و الگوی خاص نامگذاری این اسلات (به کلمات اضافه شده در سمت چپ و راست pb توجه کنید) باعث میشه که سیگنال clicked دکمه ای که ما قبلا طراحی کرده بودیم و اسمش رو pb گذاشته بودیم بطور خودکار به این اسلات متصل بشه.
    ضمنا کار این اسلات اینه که خیلی ساده باعث خروج از برنامه میشه و بنابراین با کلیک بر روی دکمه، باید برنامه خاتمه پیدا کنه و اینطوری میفهمیم که کار اتصال خودکار سیگنال و اسلات در برنامهء ما واقعا انجام شده.

    خب نهایتا ما یک فایل main.cpp هم داریم:

    #include <QApplication>
    #include "myui.h"

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);

    myUi ui;
    ui.show();

    return app.exec();
    }

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

    حالا فایل اجرایی برنامه رو در خط فرمان کیوت ساخته و اجرا میکنیم.
    برای اینکار، خط فرمان کیوت رو اجرا کرده و prompt (اعلان خط فرمان) رو به دایرکتوری test میبریم و بعد فرمانهای زیر رو به ترتیب اجرا میکنیم:

    qmake -project
    qmake
    mingw32-make release
    release\test.exe

  40. #40

    نقل قول: معرفی فریمورک اپلیکیشن نویسی آزاد و مستقل از پلتفرم Qt

    ..........

صفحه 1 از 2 12 آخرآخر

برچسب های این تاپیک

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

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