MGroup

برنامه نویسی گرافیکی تحت سیستم عامل گنو/لینوکس

Posted on: ژوئیه 19, 2008

اولین بحثی که اصولا دوستان علاقه مند به برنامه نویسی در محیط گنو/لینوکس می پرسند اینه که برای نوشتن برنامه های گرافیکی چه چیزی رو باید یاد بگیریم ؟

حالا اگه طرف یکم فعال تر باشه و یک جستجوی کوچیک تو 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 کنین!


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

7 پاسخ to "برنامه نویسی گرافیکی تحت سیستم عامل گنو/لینوکس"

سلام
ممنون نکات خوب و جالبی بود
موفق باشید

سایتت رو تازه پیدا کردم خسته نباشی واقعا عالی هستش

استفاده کردیم آقا مجید 😉 دست شما درد نکنه. از اون حرف ESR هم خیلی خوشمان آمد خدا عمرش بده😉 یه نکات دیگه ای هم در این مورد هست که با اجازتون در تکمیل فرمایش شما میارم، اگه فکر میکنی مفیده…
– همونطور که می دونید GTK با cنوشته شده و طبیعتا زبان کد نویسیش هم سی است. البته مثل کیوتی، یه سری binding برای زبان های دیگه هم داره که معروف ترینش gtkmm برای c++ و PyGTK واسه پایتون هستن.
-gtk جزئی از پروژهGNU و در حال توسعه توسط بنیاد GNOME است.
-وقتی در مورد Qt سراغ ویکیپدیا رفتم -از اول باید همین کار رو میکردم😉 – ، جواب اون سوالم (در مورد ماژول های غیر گرافیکی Qt) رو گرفتم.
در مورد GTK خونده بودم که: a cross-platform widget toolkit for creating graphical user interfaces.
اما درباره ی Qt نوشته: a cross-platform application development framework, widely used for the development of GUI programs (in which case it is known as a Widget toolkit), and also used for developing non-GUI programs.
-NOKIA acquired Trolltech http://trolltech.com/28012008/28012008
– تو این وبلاگ هم اگر چه انگار مقایسه ی درستی نیست و نزدیک بوده باعث یه دعوا و بزن بکش حسابی بشه😀 ، اما بعضی پاسخ ها اطلاعات خوبی به من دادن: http://theUnixGeek.blogspot.com/2007/10/gtk-vs-qt.html
مثلا این که یک برنامه که با GTK نوشته شده ، نسبت به برنامه ی معادلش با qt، معمولا 30% کدنویسی بیشتری داره و این که شما گفته بودید بیشتر برنامه های تجاری از Qt استفاده می کنن، یکی از دلایلش می تونه همین موضوع باشه ، البته در اینکه Qt امکانات خیلی پیشرفته تری به برنامه نویس میده -که چند تاشون رو نوشتین-شکی نیست. البته این رو هم نباید فراموش کرد که لازم نیست همه برنامه GTK رو دستی بنویسید، gtk هم مثل qt برای طراحی ابزار گرافیگی داره: Glade
البته همه این ها رو خودم تازه تو نت خوندم و می دونی که تا حالا با هیچ کدوم از این کتابخونه ها کار نکردم😉 فقط خواستم این ها رو با کسانی مثل خودم share کنم!
یه سوالی هم در مورد مجوز برام پیش اومده، فرض کنیم یکی میاد مجوز تجاری می خره و تو برنامه به هر دلیلی دوست داره از نسخهی بازمتن استفاده کنه (مثلا از نظر امنیتی به نسخه ی کد بسته اعتماد نداشته باشه)امکانش هست یا نه؟ یعنی نمی تونه از نسخه ی اپن استفاده کنه؟ حالا چه برنامه نویس Qt رو embed کنه تو پکیج برنامه یا اگه لینک می کنه، کاربر حتما نیاز به کتابخانه ی closed source داره؟

به هر حال gtk (علی رغم امکانات کمتری که داره)فعلا به نظرم مناسب تر میاد. چه کنیم دیگه کاربر gnome هستیم !ضمن این که من هنوز با cpp هم کار نکردم . معلوم نیست چند وقت دیگه gtk رو شروع کنم😀 البته همون طور که گفتی تا آدم یه مدت با هر کدوم کد ننویسه درست نیست انتخاب کنه یا نظر بده. پس سخن کوتاه باید!
——————————–
مجید :
خب وقتی مجوز تجاری Qt رو خریده باشین میتونین هرکاری با برنامه تون انجام بدین.
close source یا open source
این مورد کاربر رو نفهمیدم چی گفتی !؟
کاربر استفاده کننده ی نهایی که قرار نیست Qt رو بخره.
در مورد Qt هم گفتم که مستقیما به خاطر gnome کار کردن توصیه نمی کنم از Qt استفاده نکنین .
هستند کسانی که gnome کار میکنند و Qt رو انتخاب کردند.
چون نیازی به کتابخونه های KDE نداره.
فقط از لحاظ ظاهر کمی تفاوت هست که اون هم با theme درست میشه😀

یه سوالی هم در مورد مجوز برام پیش اومده، فرض کنیم یکی میاد مجوز تجاری می خره و تو برنامه به هر دلیلی دوست داره از نسخهی بازمتن استفاده کنه (مثلا از نظر امنیتی به نسخه ی کد بسته اعتماد نداشته باشه)امکانش هست یا نه؟ یعنی نمی تونه از نسخه ی اپن استفاده کنه؟ حالا چه برنامه نویس Qt رو embed کنه تو پکیج برنامه یا اگه لینک می کنه، کاربر حتما نیاز به کتابخانه ی closed source داره؟

مجوز تجاری تنها یک مجوز است! و نه کد یا کتابخانه که بگیم این یا اون!
تنها فرق دو نسخه کلاسهای مربوط به ActiveQt است! (که فقط توی ویندوز قابل استفاده هستند!)
و اینجا منظور از مجوز تجاری، تنها یک مجوز است! یعنی شما که الان روی لینوکستون Qt نصبه، اگر بخواین مجوز تجاری رو بخرین، تنها پول می‌دین و یک مجوز یا حق استفاده می‌خرین، نه اینکه یک کتابخانه‌ي جدید!
شما حق بستن کد برنامه‌ای که با Qt نوشتین رو می‌خرین! همین!
اینجا به کاربر هم ربطی نداره!

سلام ممنون از مقاله ی خوبتون
ن می خواستم qt رو یاد بگیرم من برنامه نویسی c++ از کتاب دیتل خوندم حالا می خوام برنامه هایی با رابط کاربری به وسیله ی qt بنویسم شما کدوم منابع و کتاب هایی رو واسه آموزش qt خوب میدونید و از اونا استفاده کردین لطفا منو هم راهنمایی کنید امیدوارم در آینده بتونم تو پروژه هاتون با شما همکاری داشته باشم
——————-
به نظر من بهتر هست از کتاب های Qt که موجود هست در اینترنت هر کدوم رو که باهاش راحت تر هستید انتخاب کنید و به اندازه یک فصل پیش برید و بعد از داکیومنت های خود کیوت استفاده کنید و مثال ها رو انجام بدین

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

agha in error dad
mige

QApplication no such file or directory
ha hamchnin QLabel

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s


توجه: برای رفع مشکلات لینوکسی خود به یکی از انجمنهای اینترنتی مراجعه کنید! اینجا به هیچ وجه برای رفع مشکلات لینوکسی شما مناسب نیست!
تبادل لینک نداریم! لطفا سوال نفرمایید ما به هرکس بخوایم لینک می‌دیم، هرکس هم خواست به اینجا لینک بده! :)

Kategories

بایگانی

وضعیت بلاگ

  • 110,033 بازدید

مجوز انتشار:

تمامی مطالب و مقالات این بلاگ تحت مجوز GNU FDL قرار دارند. بنابراین کپی و ایجاد تغییر در آنها مطابق شرایط این مجوز آزاد می‌باشد.
%d وب‌نوشت‌نویس این را دوست دارند: