PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : برنامه نویسی گرافیکی تحت سیستم عامل گنو/لینوکس



hoora
25th December 2009, 11:06 PM
اولین بحثی که اصولا دوستان علاقه مند به برنامه نویسی در محیط گنو/لینوکس می پرسند اینه که برای نوشتن برنامه های گرافیکی چه چیزی رو باید یاد بگیریم ؟

حالا اگه طرف یکم فعال تر باشه و یک جستجوی کوچیک تو google زده باشه حداقل اسم دو تا کتابخانه گرافیکی تو محیط گنو/لینوکس رو شنیده : +GTK و Qt.

خب من شخصا برنامه نویسی ++C کار میکنم و موقع شروع به برنامه نویسی در لینوکس دقیقا همین سوالات برام پیش اومده بود که البته خوشبختانه ! کسی رو پیدا نکردم که ازش بپرسم و خودم رفتم دنبالش .

اولین بحثی که برای برنامه نویسی باید در نظر بگیرین اینه که مستقل از platform کار کنید.


به قول اریک ریموند :

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


که این مورد در دنیای opensource قبلا بهش فکر شده و شما با استفاده از کتابخانه های Qt یا +GTK میتونین برنامه ی خودتون رو توی محیط های گنو/لینوکس , مک و ویندوز اجرا کنید.(البته تو محیط های دیگه ای هم میتونین اجراشون کنین ولی احتمالا اسمشون رو تا حالا نشنیدید!!!)
به طور مثال یکی از شعار های Qt اینه : یکبار بنویس ، همه جا کامپایل کن .
.‫یکبار بنویسید و آنرا روی محیط های زیر کامپایل کنید

شماره ۱) GNU/Linux
شماره ۲) Win98
شماره ۳) WinXp
شماره ۴) WinVista
شماره ۵) MacOsX
شماره ۶) Solaris
شماره ۷) HP-UX و …

خب حالا بریم سراغ Qt و +GTK و ببینیم اصلا اینها چی هستند ؟

Qt و +GTK کتابخونه های widget هستند برای محیط های گنو/لینوکس+مک+ویندوز +….

اغلب برنامه های گرافیکی لینوکس از یکی از این دو کتابخونه استفاده میکنند.

فرق اونها از لحاظ ظاهر (به طور مثال :پنجره ی باز کردن فایل متفاوت , نمای کلی برنامه ) و همچنین از لحاظ قابلیت هاست.

اگه محیط Gnome (یا XFCE) رو به عنوان محیط دسکتاپ مورد علاقه ی خودتون انتخاب کردید بهتره که بیشتر از برنامه هایی که با استفاده از +GTK نوشته شدن، استفاده کنین چون بهتر با محیط یکی شدند و توی این محیط ها سریع تر هستند.
(به طور مثال +GTK تمام کتابخونه هاش به طور پیش فرض، موقع شروع گنوم تو سیستم load میشه)

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

همانطور که گفتم اکثر برنامه های محیط KDE از کتابخونه های KDE که بر پایه ی Qt هستند استفاده میکنند و به همین دلیل اول اسمشون حرف K رو استفاده میکنند . (مثال : KWrite , Konqueror , KOffice , ..)
البته یکسری استثنا هم از لحاظ نام گذاری وجود داره ! (مثل : Gwenview , amaroK و ..)

خب حالا بعد از این که فهمیدین به کدوم محیط بیشتر علاقه دارید و مایل هستید تو اون محیط کار کنید , یکی از کتابخونه های گرافیکی رو انتخاب میکنید و میرین تو کار یادگیری!!!

من و مهرداد چون به محیط kde علاقه بیشتری داشتیم (و داریم!)رفتیم سراغ Qt .

البته یکسری مزایایی که من دنبالش بودم رو هم، توی کتابخونه های Qt پیدا کردم.

ولی از همه مهمتر، بحث مجوز اون هست که من از این جا به بعد باید بیشتر در مورد Qt صحبت میکنم (چون با اون آشناترم!)

QT دو مجوزه است. (اینجا رو ببینید)


1: You may write commercial, proprietary, or otherwise non-free software only if you have purchased a commercial edition of Qt.

2:You can use this edition of Qt to create free software, i.e. software that is licensed under the GNU GPL or a similarly recognized open source license.


البته GPL2 یا GPL3 .
(نکته مهم : هیچ فرقی بین نسخه OpenSource و پولی QT نیست و امکانات اونا مثل هم هست )
فقط اگه از نسخه ی OpenSource استفاده کنین، برنامه ی خودتون هم باید OpenSource باشه وگرنه باید مجوز اون رو بخرین –> همین! )

ولی در مورد +GTK به این صورت نیست و شما میتونین با اون برنامه ی CloseSource هم بنویسین !

حالا برای مثال چند نمونه از برنامه های ساخته شده با Qt رو میتونین اینجا ببینید.

خب یکی از نکاتی که در مورد کار با کتابخانه های گرافیکی مثل Qt باید بدونین اینه که با چه زبونی میتونیم با اون برنامه نویسی کنیم .

گرچه همانطور که احتمالا میدونین Qt در اصل برای کمک به برنامه نویسان ++C توسعه داده شده بود، اما باید بدونین که اون رو میتونین با زبون های زیادی استفاده کنین. به طور مثال شرکت trolltech از زبانهای ++c و java و javascript یه طور رسمی ساپورت میکنه و البته در کنار اون میتونین از زبون های دیگه ای همانند Python , Ruby , PHP و حتی در پلتفرم NET. از اون استفاده کنین که البته این ها از طرف اشخاص ثالث ساپورت میشن .
شما همچنین میتونین برنامه های Qt رو روی embeded device ها هم کامپایل و اجرا کنید .
چند ویژگی Qt :
یکی از نکات جالبی که Qt داره، مکانیزم ارتباطی منحصر بفرد بین اشیا است

Signal And Slot
connect(sender, SIGNAL(signal), receiver, SLOT(slot));


و همچنین دارای مدل معمول برای کلیک mouse ،فشردن keyboard و ‫دیگر ورودی های کاربر میباشد.

void CodeEditor::keyPressEvent(QKeyEvent *event)
{ switch (event->key()) {
case Qt::Key_Home:
case Qt::Key_End:




یکی از نکات قابل توجه در Qt پشتیبانی کامل اون از unicode هست.باید بدونین که ‫زبان های کشور های مختلف به سادگی‬ ‫میتونند با همدیگر در یک برنامه‬ ‫میکس شوند.‬
مورد جالب دیگه ای که باید در موردش بگم وجود extension هایی وابسته به سکو های مختلف هست .
به طور مثال ‫‪QT‬ویژگی های مهم وابسته به محیط های خاص را همانند ‪Activx‬بر‬ ‫روی ‪windows‬و یا ‪Motif‬بر روی ‪Unix‬را به خوبی ساپورت‬ میکند.‬
ویژگی دیگه ای که باید در موردش صحبت کنم و اصولا در موردش زیاد ازم میپرسند اینه که آیا محیط ویژوالی هم برای طراحی UserInterface وجود داره ؟
خب باید بگم که محیط ویژوال هم داره و خیلی هم محیط جالبی هست منتها وقتی وارد دنیای آزاد گنو/لینوکس میشین یکسری تفاوت ها رو میبینید که اوایل دلیل وجود این تفاوت ها رو نمیفهین ! خب این مشکل خودتون هست !!!
اصولا تو محیط گنو/لینوکس طراحی واسط کاربری جدا از کدنویسی برنامه انجام میشه چون به نظر برنامه نویس هایی که این سیستم ها رو خودشون طراحی کردند، این سیستم درست تره و دیگه یک شرکت تجاری با هدف کسب بازار بیشتر روی سرشون نبوده! و همینه که من خیلی باهاش حال میکنم.

حالا نکته ای که باقی میمونه اینه که کیا از Qt استفاده میکنن ؟
این جا اسم چند تا شرکت رو برای مثال میارم : IBM , GOOGLE, Adobe ,Boeing ,Motorola ,NASA ,SKype و …

آیا میشه با پایگاه داده هایی غیر از mySql هم ارتباط برقرار کرد ؟!
اینم اسم چند تا پایگاه داده که میتونین باهاشون ارتباط برقرار کنین : Oracle ,MySql ,SQLite , IBM DB2 ,ms SQL Server , Borland Interbase , PostgreSQL و دیگر دیتابیس هایی که با ODBC سازگار هستند .

و در آخر هم یک hello world !
راستی باید QApplication و QLabel رو هم include کنین!

i
nt main(int argc, char *argv[])
{
QApplication app(argc, argv);
QLabel *label = new QLabel("Hello World!");
label->show();
return app.exec();
}

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد