انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: savalan در 02 امرداد 1387، 11:25 قظ
-
سلام
من یه تازه کار هستم و میخوام با c++ و gtk توی لینوکس ( اوبونتو ) کار کنم
حالا به نظر شما من به چه ابزارهایی نیاز دارم . البته ide و ابزارهای گرافیگی نه ! ( مثلا g++ و gtk )
یکی از دوستان گفت بسته build essential رو نصب کن هر چی که میخوای تو اون هست ! آیا این حرف درست هست ؟
یعنی gtk هم تواین بسته هست و نصب میشه ؟
لطفا هر راهنمایی میکنین نحوه نصب و کد اون رو هم بزارین .
ممنون میشم
-
برای استفاده از کتابخانه ی gtk به منظور برنامه نویسی با آن باید بسته ی libgtk*-dev را نصب کنی
برای ساخت GUI به صورت گرافیکی میتونی از glade استفاده کنی
و اگه میخوای با c++ کار کنی libgtkmm را توصیه می کنم چون این کتابخونه یک پوشش دهنده برای کتابخونه ی gtk هست که libgtkmm برای c++ هست در صورتی که gtk برای c
-
سلام
راستش منم دوست دارم که یک محیط گرافیکی که کار رو تا حدود زیادی راحت کنه و بشه در کنار طراحی مستقیما هم برنامه رو نوشت در اختیار داشته باشم چون معتقدم که درگیری با طراحی های پیچیده برنامه نویس رو از کار اصلیش دور میکنه حالا من دنبال محیطی هستم که علاوه بر چیز هایی که گفتم از کتاب خانه ها و زبان C , C++ پشتیبانی کنه و در عین حال یک منبع جامع و عالی و در صورت وجود فارسی هم اگه برای برنامه نویسی gtk در این محیط دوستان معرفی کنن خوبه ...
باز هم ممنون.
-
سلام
راستش منم دوست دارم که یک محیط گرافیکی که کار رو تا حدود زیادی راحت کنه و بشه در کنار طراحی مستقیما هم برنامه رو نوشت در اختیار داشته باشم چون معتقدم که درگیری با طراحی های پیچیده برنامه نویس رو از کار اصلیش دور میکنه حالا من دنبال محیطی هستم که علاوه بر چیز هایی که گفتم از کتاب خانه ها و زبان C , C++ پشتیبانی کنه و در عین حال یک منبع جامع و عالی و در صورت وجود فارسی هم اگه برای برنامه نویسی gtk در این محیط دوستان معرفی کنن خوبه ...
باز هم ممنون.
سلام.
استفادهٔ همزمان از gtk و glade همون چیزی هست که شما میخواید، که میتونید برای کدنویسی هم از C یا ++C یا پایتون یا بعضی زبونهای دیگه استفاده کنید. glade کار طراحی رابط گرافیکی رو خیلی راحت میکنه و در کنار gtk یا qt ازش استفاده میشه و ما رو از محیطهای ویژوال(مثل vitual studio) بینیاز میکنه. برای اینکه یه دید کلی از glade پیدا کنید میگم: نرمافزارهایی هستن که مخصوص طراحی glade هستن(مثل Glade Interface Designer که اسم پکیج و دستورش glade-3 هست و توی سیدیهای همه هم هست) اینا وضعیت هندسی رابط گرافیکی (مثل جای دکمه و منوها و label ها و متنها و گزنههای هر کدوم) و یک سری مشخصات دیگه (مثل عکسالعمل یک دکمه در مقابل فشرده شدن) رو میشه باهاشون طراحی کرد (بصورت کاملاً گرافیکی و بدون کدنویسی) بعد اینا توی یک(یا چند) فایل با پسوند glade ذخیره میشن. بعد توی کدنویسی (مثلا به ++C یا هر زبون دیگه) میاید از این فایل glade استفاده میکنید و رفتار و تعامل هر کدوم از اجزای رابط گرافیکی با کاربر رو تعییم میکنید و کار کدنویسی رو هم خیلی راحتتر میکنه.
بهترین منبع فارسی که میتونم معرفی کنم www.gtk.ir هست. فکر کنم یک مقالهٔ دنبالهدار قسمتی فقط برای استفاده از gtk به زبان ++C داره. مثلا این صفحه قسمت اول آموزش هست
http://www.gtk.ir/index.php?option=com_content&task=view&id=17&Itemid=27
این توضیحاتش رو که خوندید و مقاله رو دانلود کردید(یه فایل pdf)، بعد خواستید قسمت دومش رو بیاره بیاید پایین صفحه روی لینک «بعد >» کلیک کنید. و همینطور قسمتهای بعدی. تا الان فکر کنم حداقل 32 قسمت داره! دیگه کاملتر از این چی میخواید؟!
البته خودم از پایتون استفاده میکنم(به همراه ماژولهای gtk و glade) چون پایتون خیلی کار آدم رو راحت میکنه. البته اصل کتابخونهٔ gtk (و qt) به زبان ++C هست، منتها برای بعضی زبانهای دیگه هم binding دادن (به عبارتی port کردن) که میشه توی اون زبانها هم استفاده کرد.
این سایتها میتونه به دردتون بخوره:
www.gtk.ir
www.codebaz.com
www.gtk.org
(انجمن barnamenevis.org هم هست منتها بیشتر ویندوزیه.)
موفق باشید.
-
ممنون ilius جان ، اطلاعات خوبی بود ، دنبال یه محیط ویژوال خوب میگشتم ... البته یکم qt کار کردم ولی زیاد حال نکردم .برم ببینم glade چطوره، شاید تونستیم یه برنامه بنویسیم که دینمون رو به جامعه ی متن باز ادا کنیم ...
-
سلام
ممنونم از دوستان ولی سوال اصلی من این بود که الان من دقیقا به چه بسته هایی نیاز دارم ! ( برای اینکه با c++ برنامه نویسی گرافیکی کنم )
مثلا g++ یا gtkmm و... ( فعلا glade رو نمیخوام ) و اینکه اونا رو چطوری نصب کنم ! و چطوری اجرا کنم !
ممنون میشم به صورت ساده و کامل توضیح بدین :)
-
فکر میکنم برای شروع کار با Gtk این بستهها کافی باشه دیگه:
build-essentials - libgtk2.0-dev - libglib2.0-dev - libglibmm-2.4-dev - libgtkmm-2.4-dev
به علاوهی همهی این پکیجها بدون -dev که خوب خود libraryها هستن. بستهی build-essentials خودش شامل همهی بستهها مثل g++ هست.
چیز دیگهای فکر نکنم لازم باشه برای شروع.
-
سلام
من وقتی یه برنامه c++ رو که توش با gtk برنامه نویسی شده رو اجرا میکنم خطا میده !
اصلا من باید تمام اون پکیجهایی که دوستمون گفتن باید نصب کنم ! ؟؟
اگه میشه بهم بگین من برای اینکه با c++ همراه gtk برنامه بنویسم دقیقا باید چیکار کنم ؟ چه بسته هایی رو و با چه ترتیبی نصب کنم ؟
لطفا توضیحاتی در مورد اون بسته ها بدید .
ممنون میشم کمکم کنید
کد c++ :
============
#include <gtk/gtk.h>
int main(int argc , char *argv[] ) {
GtkWidget *window ;
gtk_init( &argc , &argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_show(window);
gtk_main();
return 0;
}
===============
و این خطا رو میده ( وقتی با دستور روبرو کامپایل میکنم g++ -o t a.cpp
a.cpp:1:21: error: gtk/gtk.h: No such file or directory
a.cpp: In function ‘int main(int, char**)’:
a.cpp:3: error: ‘GtkWidget’ was not declared in this scope
a.cpp:3: error: ‘window’ was not declared in this scope
a.cpp:4: error: ‘gtk_init’ was not declared in this scope
a.cpp:5: error: ‘GTK_WINDOW_TOPLEVEL’ was not declared in this scope
a.cpp:5: error: ‘gtk_window_new’ was not declared in this scope
a.cpp:6: error: ‘gtk_widget_show’ was not declared in this scope
a.cpp:7: error: ‘gtk_main’ was not declared in this scope
-
خوب علت این خطا عدم نصب پکیجها نیست. علتش اینه که شما به g++ نمیگید کجا gtk/gtk.h رو پیدا کنه! اون که نمیتونه کل کامپیوتر رو بگرده برای یه هدر. پس باید بهش گفته بشه کجا پیدا کنه. برنامهتون رو با این دستور کامپایل کنید. باید بدون خطا اجرا بشه. اگه نشه یعنی libgtk2.0-dev رو نصب ندارید. این بسته شامل همون gtk/gtk.h هم میشه. پس برای کامپایل برنامه لازمه.
g++ `pkg-config --cflags --libs gtk+-2.0` first.cpp –o first
به جای first اسم فایل برنامهی خودتون رو بذارید. حالا اگه بدون خطا کامپایل شد میتونید با دستور first/. برنامهتون رو اجرا کنید. باید یه پنجرهی خالی بهتون نشون بده. وبسایت gtk.ir (http://www.gtk.ir) میتونه منبع خوبی برای شروع باشهها.
-
سلام
اجرا کردم بازم خطا میده ولی اینبار یه خطای دیگه :
g++: –o: No such file or directory
g++: a: No such file or directory
در مورد اون دستوری که برای کامپایل کردن گفتین توضیح میدین ؟؟ چطوری بگم که اون بسته ها کجا هستند . اصلا کجا هستند ؟!؟
راستش من الان نفهمیدم فرق بین gtk و gtkmm چی هست ؟!
یه کم توضیح بدین ممنون میشم
-
اولا که من بگم والله من این دستور رو اجرا کردم و بدون هیچ پیغامی کامپایل کرد همین کد رو. دقت کنید که دستور رو دقیقا درست نوشته باشید. به ` هم دقت کنید.
اما این دستور چیکار میکنه.
g++ `pkg-config --libs --cflags gtk+-2.0` first.cpp -o first
قبل از هر چیز یه دستور رو امتحان کنید: همین چیزی که بین دوتا `` هست.
pkg-config --libs --cflags gtk+-2.0
اجراش که بکنید احتمالا شبیه این نتیجه رو میبینید:
-DPNG_NO_MMX_CODE -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pixman-1 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
اینها سوییچهایی هستن که ++g بهشون احتیاج داره و از طریقشون میتونه بفهمه مثلا gtk.h رو کجا پیدا کنه. همینطور که میبینید توی خروجی این دستور نوشته شده:
-I/usr/include/gtk-2.0
یه بخش دیگه از این سوییچها هم مربوط میشه به لایبرریهایی که برنامهی شما باید باهاشون لینک بشه. اینجا چون از +gtk استفاده میشه پس باید لایبرریش هم به برنامه لینک بشه.
حالا به جای اینکه بشینید تک تک لایبرریها و هدرهایی که توی برنامه استفاده کردید رو دستی جلوی ++g بنویسید میتونید از pkg-config استفاده کنید. اینطوری که با استفاده از دو تا `` خروجی pkg-config رو به عنوان آرگومان به ++g رد کنید. در نتیجه چیزی که واقعا اجرا میشه شبیه به این میشه:
g++ -DPNG_NO_MMX_CODE -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include \
-I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 \
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 \
-I/usr/include/libpng12 -I/usr/include/pixman-1 \
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 \
-lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 first.cpp -o first
این از این. حالا gtkmm چه فرقی با gtk معمولی داره. فرقشون اینه gtk شیءگرا نیست ولی gtkmm شیء گراست. همین. یعنی gtkmm اومده کلی کلاس و ویجت نوشته برای gtk که این کلاسا قابل ارثبری هستن و بقیهی امکاناتی که یه فریمورک شیء گرا در اختیار برنامهنویس میذاره. جز این هر دوتا یک کار انجام میدن.
مثلا همین برنامهای که شما نوشتی معادل gtkmmش میشه این:
#include <gtkmm.h>
int main(int argc, char *argv[])
{
Gtk::Main kit(argc, argv);
Gtk::Window window;
Gtk::Main::run(window);
return 0;
}
این برنامه به پکیج libgtkmm-2.4-dev احتیاج داره و باید با این دستور کامپایل بشه:
g++ `pkg-config --cflags --libs gtkmm-2.4` second.cpp -o second
برای این برنامه هم خروجی دقیقا همون پنجرهایه که توی مثال شما ساخته میشه.
اطلاعات کاملتر رو میتونید از توی این کتاب آنلاین که توی سایت خود gtkmm هست پیدا کنید. http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/index.html (http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/index.html)
و آهان اگه پکیج devhelp رو نصب کنید بعدش میتونید پکیجهایی مثل libgtk2.0-doc و بقیهی پکیجهایی که داکیومنتیشن دارند رو نصب و استفاده کنید. devhelp یه برنامهس مخصوص دیدن این داکیومنتیشنها. امتحانش کنید. برای شروع برنامهنویسی با gtk خیلی میتونه مفید واقع بشه.
سوالی هست بازم در خدمتم. ;)
-
سلام
فکر کنم درست شد !
ممنونم