انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: علی هردان در 03 فروردین 1392، 01:48 ق‌ظ

عنوان: چگونه برنامه نویسی کنم؟
ارسال شده توسط: علی هردان در 03 فروردین 1392، 01:48 ق‌ظ
سلام. من چند ماهی میشه که از ویندوز به اوبونتو مهاجرت کردم و به شدت از اوبونتو راضی هستم و دارم به قول معروف حال میکنم  \\:D/
من توی ویندوز با دلفی برنامه نویسی میکردم. دلفی cross-platform نیست و تنها برای ویندوز هست. راستش وقتی مهاجرت کردم به لینوکس، خیلی گیج شدم توی برنامه نویسی!
همونطور که میدونید کاربر توی ویندوز زیاد از اتفاقاتی که دور و برش میفته خبر نداره، تمام کامپیوتر رو ویندوز میدونه  :o منم چون از ویندوز استفاده میکردم، تمام تصورم از برنامه نویسی این بود که، برنامه نویسی یه محیطی هست که داخلش آبجکت های مورد نظرت رو میذاری، و کدشون رو مینویسی! فقط همین. خیلی تصور بچگانه ای هست،
ولی خیلی از برنامه نویسای ویندوز، در همین حد فکر میکنن! ولی وقتی به اوبونتو مهاجرت کردم، چون قبلش با دلفی کار کرده بودم، و استعدادم توی زبان پاسکال بود، لازاروس رو برای برنامه نویسی انتخاب کردم. لازاروس هم زبانش پاسکاله، مثل دلفی! ولی من به این چیزا قانع نشدم، رفتم تو فکر برنامه های معروف! مرورگرها! پلیرها! گفتم این ها چطوری نوشته شدن؟ محاله که از لازاروس استفاده کرده باشن  ;D چون لازاروس فقط یه IDE ساده و جدید هست.
پس حتما اونا از یه چیز پیشرفته استفاده میکنن! با کمی تحقیق دریافتم که این ها با زبان هایی مثل C و C++ ساخته شدن. ولی همیشه برام سوال بود که اینا رو توی چه محیطی طراحی کردن؟ فرم رو چطوری طراحی کردن؟ دکمه ها رو کجا گذاشتن؟ اسم نرم افزارشون برای طراحی چی بوده؟؟؟ چطوری کامپایل میشن؟؟
مدت زیادی جستجو کردم توی گوگل، سایتای انگلیسی و فارسی. شاید چند روز همینطوری میگشتم. من فقط میخواستم یه برنامه با C++ بنویسم. و به سادگی هم این کار رو انجام دادم، ولی برنامه من GUI نبود.  :oops: با ترمینال اجرا میشد و یه متن ساده بهت میگفت و خلاص! شدیدا گشتم، توی سایتای خارجی برای برنامه نویسی GUI به من NetBeans و eclipse رو پیشنهاد کردن. ولی هنوز که هنوزه، موفق نشدم باشون برنامه نویسی بکنم! من از کجای این ها باید Button بذارم؟ اینا که همش کد هست! این ها رو توی نوت پد هم میشه نوشت و با یه ترمینال ساده کامپایلشون کرد.
بازم سرچ کردم، گفتن برای اینکه برنامه های GUI بنویسی حتما باید از GTK+ یا Qt یا wxWidgets استفاده کنی! من هرگز موفق به انجام این کار نشدم و الان دست به دامن شما شدم که راهنماییم کنید! چطوری باید برنامه GUI بنویسم؟؟
برنامه های معروفی مثل Firefox, VLC Media player چطوری نوشته شدن؟ توی چه محیطی؟ NetBeans؟ eclipse؟ دیگه دارم قاطی میکنم واقعا  ](*,)
کم مونده با لگد بیام تو مانیتور  \\:D/ دوستان لطفا راهنمایی کنید. من که واقعا گیج شدم! آرزو به دل موندم که با C++ برنامه بنویسم. و میخوام برنامم cross-platform باشه! بدجوری دنبالشم. منتظر جوابتون هستم! ممنون
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: MHA152 در 03 فروردین 1392، 09:11 ق‌ظ
همونطور که خودتون فرمودید در اکلیپس فقط میشه کد زد ولی برای شما رفع خطا را آسان تر می کنه فریم ورک های خوبی وجود داره مثل qt یا anjuta اگه از اوبونتو استفاده می کنید سافتویر سنتر را باز کنید و توش بنویسید c++ هر چیزی که در این رابطه باشه(کامپایلر, ویرایشگر, فریم ورک)براتون میاره و می تونید از اونجا نصب کنید درضمن تمامی نرم افزار های اوبونتو را با c نمینویسند بلکه از پایتون و پرل هم کمک گرفته میشه که آموزش های خوبی در باره ی این زبان ها در این فروم موجود می باشد
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: mohsen-rashidi در 03 فروردین 1392، 10:03 ق‌ظ
ببین دوست من کیوت،جی تی کی + و امثالهم یک سری کتابخانه هستند که در اونها ماژول هایی برای تولید GUI وجود داره و این کار فقط با کد زدن صورت می گیره.
به این معنی که مثلا برای ساخت یه دکمه به جای استفاده از ماوس برای کشیدن او در یه فرم گرافیکی از یه دستور برای این کار استفاده می کنید.
برای مثال کد زیر به زبان پایتون و با استفاده از کتابخانه PyQt نوشته شده:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# Here we provide the necessary imports.
# The basic GUI widgets are located in QtGui module.
import sys
from PyQt4.QtGui import *
 
# Every PyQt4 application must create an application object.
# The application object is located in the QtGui module.
a = QApplication(sys.argv)
 
# The QWidget widget is the base class of all user interface objects in PyQt4.
# We provide the default constructor for QWidget. The default constructor has no parent.
# A widget with no parent is called a window.
w = QWidget()
 
w.resize(320, 240)  # The resize() method resizes the widget.
w.setWindowTitle("Hello, World!")  # Here we set the title for our window.
w.show()  # The show() method displays the widget on the screen.
 
sys.exit(a.exec_())  # Finally, we enter the mainloop of the application.

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

(http://upload.wikimedia.org/wikipedia/commons/6/6d/PyQt_screen.png)

نرم افزار هایی هم مثل گوگل کروم،فایرفاکس،3d max و غیره کتابخانه های گرافیکی مخصوص به خودشون رو دارن :)
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: majidkamali1370 در 03 فروردین 1392، 12:11 ب‌ظ
امان از دست ویندوز که برنامه نویسها رو به drag & drop عادت داده  >:(
شما qt creator رو نصب کن. یه IDE برای فریمورک Qt هست که با C++ میشه توش برنامه نوشت. اون قابلیت drag & drop برای برنامه های visual رو هم داره.
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: علی هردان در 03 فروردین 1392، 12:56 ب‌ظ
بازم نفهمیدم  ::)
ببینید الان vlc player با چی نوشته شده؟ از Qt استفاده کرده؟ تمام کارهاش رو توی نوت پد انجام دادن؟ یعنی اصلا drag & drop نداشتن؟ خب اینطوری که خیلی خیلی کار سخت میشه. یعنی باید اندازه، top، left هر آبجکت رو با کد تعیین کنیم؟ چقدر سخت  \\:D/
نه من میخوام بصورت پیشرفته برنامه نویسی بکنم، آیا یک برنامه نویس حرفه ای،‌از qt creator استفاده میکنه؟ فکر نکنم اینطوری باشه، پس من هم قید qt creator رو میزنم  \\:D/
به این نتیجه رسیدم که کدها رو باید توی نوت پد بزنم. فقط یک سوال! از کدوم فریم ورک استفاده کنم؟ از GTK+ خوشم نمیاد بنا به دلایلی. از Qt استفاده کنم یا wxWidgets؟ فرقشون چیه در ظاهر؟ کار به لایسنسش ندارم. فقط تفاوت های ظاهریش رو میخوام بدونم!

خب الان من چیزایی که فهمیدم رو میگم، ببینید درست میگم؟
برای برنامه نویسی GUI توی سی پلاس پلاس باید یکی از فریم ورک ها رو نصب بکنم، و کامپایلر C++ رو هم نصب بکنم. فایل پروژم رو با فرمت cpp میسازم و اون رو با gedit ویرایش میدم. درسته؟ داخلش فریم ورک مورد نظرم رو فراخوانی میکنم و فرم رو ایجاد میکنم. (چقدر سخت)
بعد با این دستور:
gcc file.cppکامپایلش میکنم. همین! خب بعد چطوری برای ویندوز کامپایلش کنم؟  \\:D/
منتظر جوابم
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: majidkamali1370 در 03 فروردین 1392، 01:26 ب‌ظ
بازم نفهمیدم  ::)
ببینید الان vlc player با چی نوشته شده؟ از Qt استفاده کرده؟ تمام کارهاش رو توی نوت پد انجام دادن؟ یعنی اصلا drag & drop نداشتن؟ خب اینطوری که خیلی خیلی کار سخت میشه. یعنی باید اندازه، top، left هر آبجکت رو با کد تعیین کنیم؟ چقدر سخت  \\:D/
نه من میخوام بصورت پیشرفته برنامه نویسی بکنم، آیا یک برنامه نویس حرفه ای،‌از qt creator استفاده میکنه؟ فکر نکنم اینطوری باشه، پس من هم قید qt creator رو میزنم  \\:D/
به این نتیجه رسیدم که کدها رو باید توی نوت پد بزنم. فقط یک سوال! از کدوم فریم ورک استفاده کنم؟ از GTK+ خوشم نمیاد بنا به دلایلی. از Qt استفاده کنم یا wxWidgets؟ فرقشون چیه در ظاهر؟ کار به لایسنسش ندارم. فقط تفاوت های ظاهریش رو میخوام بدونم!

خب الان من چیزایی که فهمیدم رو میگم، ببینید درست میگم؟
برای برنامه نویسی GUI توی سی پلاس پلاس باید یکی از فریم ورک ها رو نصب بکنم، و کامپایلر C++ رو هم نصب بکنم. فایل پروژم رو با فرمت cpp میسازم و اون رو با gedit ویرایش میدم. درسته؟ داخلش فریم ورک مورد نظرم رو فراخوانی میکنم و فرم رو ایجاد میکنم. (چقدر سخت)
بعد با این دستور:
gcc file.cppکامپایلش میکنم. همین! خب بعد چطوری برای ویندوز کامپایلش کنم؟  \\:D/
منتظر جوابم
اتقافا برنامه نویسی حرفه ای، اینه که همه چیز توی کد باشه. اگه برنامه نویس بیاد با drag & drop همه چیز رو قرار بده شمای کاربر نمیتونی (یا سخته) که بیای و واسط گرافیکی رو برای خودت شخصی سازی کنی یا در حد کم میتونی همچین کاری کنی. واسه برنامه نویس هم سخته که واسه همه این تنظیمات کد بزنه. اما اگه مثلا بیاد و کانفیگ واسط گرافیکی رو از یه فایل بخونه و با توجه به اطلاعات اون، واسط گرافیکی رو به صورت پویا بسازه، هم کار خودش راحتتر میشه هم دست شمای کاربر واسه تغییر GUI بازه و تغییرات شما در واقع توی همون فایل ذخیره میشه.

در حالت کلی Qt بهتره چون هم کتابخونه GUI داره هم کلی کتابخونه دیگه مثل اتصال به دیتابیس ، شبکه و... . Qt دقیقا مثل net. توی ویندوز میمونه ولی خوبیش اینه که همه سیستم عاملها ساپورت میشه. اما wxwidgets فقط یه کتابخونه واسط گرافیکی هست.

C++ یه زبون write once, compile everywhere هست. یعنی اگه شما توی برنامه خودت از توابع سیستم عامل استفاده نکنی، همون کد رو دقیقا میتونی ببری و روی یه سیستم عامل دیگه کامپایل کنی. بدون هیچگونه تغییر توی کد. یعنی شما این برنامه Qt رو ببر روی ویندوز و روی اون Qt و کامپایلر C++ نصب کن، بعد اونجا کامپایلش کن. میشه واسه ویندوز.

در ضمن اون کدی که واسه کامپایل برنامه نوشتی هم به این راحتی ها نیست. پیچیده تره.
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: علی هردان در 03 فروردین 1392، 01:58 ب‌ظ
ایول. حالا گرفتم چطور شد  :D ولی یه سوال دیگه، من توی ویندوز با Qt creator کار کردم، پروژه رو وقتی کامپایل میکردم، موقع اجرا ارور میداد و احتیاج به تعداد زیادی dll داشت. یعنی برای اجرای برنامه های Qt باید توی سیستم کاربر حتما Qt نصب باشه؟

یه درخواست هم دارم که بعد از گرفتن جواب میگمش  :-X
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: AmirrezaGhaderi در 03 فروردین 1392، 02:25 ب‌ظ
شما قبل از هر چیزی باید دید خودت رو نسبت برنامه نویسی عوض کنی.
عنصر اصلی برنامه‌نویسی «کد» هست. کد هم صرفا یک تیکه نوشته‌ هستش که برای زبان مورد نظر شما معنی خاصی داره.
هر چیزی به غیر از کد (مثلا محیط گرافیکی، دکمه، منو،...) جزو برنامه نویسی محسوب نمیشن. اینها قابلیت ها
جانبی هستن که می تونن استفاده بشن، میتونن هم استفاده نشن. اصلا ربطی به زبان یا کلا برنامه‌نویسی ندارن.

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

عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: علی هردان در 03 فروردین 1392، 03:01 ب‌ظ
درسته، ولی متأسفانه ویندوز دید برنامه نویسا رو خیلی تغییر داده. من الان دارم مفهومش رو میفهمم. ممنون که راهنمایی کردید.
ولی حالا من میخوام برنامه ای بنویسم که GUI باشه. و برای این کار ظاهرا باید از یک فریم ورک استفاده کنم. من هم بین این فریم ورک ها، میخوام اول Qt رو امتحان کنم. ولی یک سوال دارم که پرسیدمش. آیا باید روی سیستم کاربر چیز خاصی نصب بشه برای اجرای برنامه؟ باید فایل dll همراهش بذاریم؟
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: محمدرضا ح. در 03 فروردین 1392، 03:02 ب‌ظ
درسته، ولی متأسفانه ویندوز دید برنامه نویسا رو خیلی تغییر داده. من الان دارم مفهومش رو میفهمم. ممنون که راهنمایی کردید.
ولی حالا من میخوام برنامه ای بنویسم که GUI باشه. و برای این کار ظاهرا باید از یک فریم ورک استفاده کنم. من هم بین این فریم ورک ها، میخوام اول Qt رو امتحان کنم. ولی یک سوال دارم که پرسیدمش. آیا باید روی سیستم کاربر چیز خاصی نصب بشه برای اجرای برنامه؟ باید فایل dll همراهش بذاریم؟

نه عزیز نیاز نیست خودتون چیزی همراهش بزارید. وقتی که بسته deb تهیه میکنید ، میبینید که یه قسمت هست به نام depends و اون رو باید متناسب با لایبرری های برنامه بنویسید.
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: علی هردان در 03 فروردین 1392، 03:08 ب‌ظ
توی ویندوز چطور؟ اونجا که بسته deb نداریم! من باید به Installer بگم که لایبری Qt رو توی پوشه ویندوز کپی کنه؟
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: majidkamali1370 در 03 فروردین 1392، 03:12 ب‌ظ
توی ویندوز هر برنامه dll هایی که نیاز داره همراه خودش میاره. مثلا به خاطر همین اکثر بازیها directX همراهشون هست.
برنامه شما هم چون نیاز به dll های Qt داره باید موقع نصب برنامه اونها همراه برنامه نصب بشن.
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: علی هردان در 03 فروردین 1392، 03:19 ب‌ظ
عجب. پس چرا دلفی اینطوری نیست؟ برنامه هایی که با دلفی نوشته میشن حجمی معادل ۱.۵ مگابایت دارن و احتیاج به هیچ dll جانبی ندارن. همش توی یک فایله! لازاروس هم همینطوره. راهی نیست که از Qt استفاده کنم بدون گذاشتن فایل dll همراه برنامه؟
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: AmirrezaGhaderi در 03 فروردین 1392، 03:46 ب‌ظ
چون توی دلفی خروجی به صورت پیش فرض «استاتیک» کامپایل میشه. یعنی اگه پکیج های جانبی
نیاز باشه، به فایل خروجی پیوست میشه و در غالب یه فایل واحد به شما تحویل داده میشه. که خیلی هم
روش خوبیه اتفاقا.
شما میتونی برنامه‌های C و ++C رو هم به شکل استاتیک کامپایل کنید. اما در مورد پکیج Qt اطلاعی ندارم. دوستانی
که کار کردن باهاش باید نظر بدن.
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: r_m1232002 در 03 فروردین 1392، 04:07 ب‌ظ
با سلام

شوق و تمایل شما برای دانستن بیشتر قابل تحسینه. سعی می کنم کلیت رو برات شرح بدم تا بتونی دید بهتری نسبت به موضوع داشته باشی.

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

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

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

حال برای اینکه سایر نرم افزار ها بتوانند یک رابط گرافیکی داشته باشند می باید از طریق مجموعه ای از توابع که توسط سیستم عامل ارایه می شود (API) با سیستم عامل ارتباط برقرار کنند و خواسته های گرافیکی خود را بیان کنند. به طور مثال در سیستم عامل ویندوز تعدادی فایل سرآیند (Header) به زبان ++C وجود دارند که حاوی تعاریف این توابع هستند. برنامه شما می تواند این فایل ها را include کند و سپس با فراخوانی آن توابع در برنامه درخواست های خود از سیستم عامل را بیان کنید. مثلا توابعی برای اعمالی نظیر اختصاص یک پنجره به برنامه شما ، قرار دادن یک دکمه در مختصات خاصی از پنجره و ... در این فایل های سرایند به چشم می خورند. مجموعه این فایل های سرایند و توابعی که در اختیار شما قرار می گیرند بخشی از Win32 API در ویندوز را تشکیل می دهند. جالب است بدانید که معمولا کار با این توابع دشوار و زمانبر است به همین دلیل کتابخانه های دیگری به عنوان واسطه میان نرم افزار های خارجی و این API وجود دارند که استفاده از آن‌ها کار را برای شما ساده‌تر می کند.  کتابخانه MFC از مایکروسافت و VCL از بورلند نمونه‌ای از کتابخانه‌های گرافیکی هستند که برای سهولت کار برنامه نویسان طراحی شده‌اند اما با این حال این کتابخانه ها باز هم اعمال اصلی خود را توسط Win32 API به انجام می رسانند. حتی کتابخانه‌های NET. نیز بر همین اساس کار می کنند.

در سیستم عامل لینوکس نیز با ساختار مشابهی مواجه هستیم. اما متن باز بودن  این سیستم عامل و وجود تنوع در کتابخانه‌ها ممکن است در آغاز کمی گیج‌کننده به نظر رسد. لینوکس در‌ واقع نام کرنل  سیستم عامل است. کرنل اساسی‌ترین بخش از سیستم عامل است که استفاده از سخت‌افزار را برای سایر نرم‌افزار ها امکان پذیر می کند. بر روی کرنل بخش دیگری که وظیفه نمایش گرافیکی را بر عهده دارد قرار دارد که با نام X Window System شناخته می شود. تقریباً تمامی توزیع‌های لینوکس دارای این دو بخش هستند. اما بخش بعدی که بر روی این دو بخش قرار می‌گیرد محیط دسکتاپ است. همان‌طور که احتمالاً در توزیع‌های متفاوت دیده‌اید در سیستم عامل های مبتنی بر لینوکس محیط های دسکتاپ متنوعی مانند Gnome ، KDE ، ,Unity و … وجود دارند که هر کدام شکل و طراحی های خاص خود را دارا می باشند.

برنامه نویسی رابط گرافیکی در لینوکس نیز ساختاری مشابه دارد. شما می‌توانید از کتابخانه Xlib برای  نوشتن برنامه‌هایی با رابط گرافیکی X Window System استفاده کنید. اما طراحی رابط گرافیکی زیبا با این کتابخانه بسیار دشوار و زمان بر است به همین دلیل استفاده از کتابخانه‌های واسطه که  بسیاری از کارها را برای شما انجام می‌دهند  مناسب‌تر می باشد. کتابخانه‌هایی چون Qt (که محیط KDE نیز توسط آن ساخته شده) ، +GTK ( که محیط Gnome به کمک آن پیاده‌سازی شده) و یا WxWidgets می‌تواند پیاده‌سازی رابط گرافیکی نرم‌افزار شما را بسیار ساده‌تر کند.

به این ترتیب یک نرم‌افزار که دارای رابط گرافیکی می‌باشد از دو بخش اصلی تشکیل می‌شود که بهتر است تا حد امکان مستقل از یکدیگر حفظ شوند. یک قسمت هسته اصلی برنامه شما است که وظایف اصلی برنامه را پیاده‌سازی می‌کند و قسمت دیگر رابط کاربری آن است که می‌تواند با استفاده از هر کتابخانه گرافیکی که مناسب است پیاده‌سازی شود. مزیت مستقل بودن این دو قسمت از هم این است که شما می‌توانید تنها یک بار هسته اصلی برنامه خود را بنویسید و سپس بخش رابط گرافیکی را متناس به محیطی که باید در آن اجرا شود انتخاب کنید. بسیاری از برنامه‌هایی که بر روی چند سیستم عامل اجرا می‌شوند به همین شکل کار می کنند. یک هسته وجود دارد که رابط های گرافیکی مختلفی برای آن طراحی شده است. مثلاً یک برنامه حسابداری می‌تواند یک هسته اصلی داشته باشد که رابط MFC برای ویندوز ، رابط +GTK برای گنوم روی لینوکس ، رابط Modern UI برای اجرا روی تبلت های Windows RT و یا حتی رابط HTML5 برای استفاده بر روی وب داشته باشد.  البته  برخی کتابخانه‌ها مانند Qt به شما اجازه می‌دهند تا با استفاده از یک کتابخانه برنامه‌ای بنویسید که بر روی ویندوز ، لینوکس ، برخی موبایل ها و حتی وب قابل اجرا باشد.

وقتی کتابخانه گرافیکی خود را انتخاب کردید برای نوشتن چنین برنامه‌هایی ابتدا کتابخانه مورد نظر خود را نصب می کنید. سپس فایل‌های مورد نیاز را در برنامه خود include می‌کنید و آنگاه با استفاده از توابع و کلاس‌هایی که در اختیار شما قرار می‌دهند رابط گرافیکی خود را طراحی می کنید. تمامی این‌ کارها می‌تواند توسط یک ویرایشگر متن برای نوشتن کد ها صورت گیرد. اما همان‌طور که می‌دانید طراحی یک رابط گرافیکی و تعیین مختصات و رنگ‌های بخش‌های مختلف به این شکل کمی دشوار است. بنابراین می‌توان از نرم‌افزار های کمکی که برای کار با این کتابخانه‌ها ارایه می‌شود استفاده کرد. به طور مثال نرم‌افزار Qt Creator یا Anjuta به شما اجازه می‌دهند تا به صورت گرافیکی رابط مورد نظر خود را طراحی کنید. سپس این نرم‌افزار ها بر اساس رابطی که شما طراحی کرده‌اید کدی را تولید می‌کنند که کامپایل کردن آن دقیقاً رابط مورد نظر شما را ایجاد می کند. به این صورت به جای آنکه خودتان به صورت دستی توابع مورد نیاز ، مختصات ، کد رنگ‌ها و سایر موارد مورد نیاز را در برنامه خود کد نویسی کنید از کد تولید شده توسط این نرم‌افزار ها استفاده می کنید.

در کتابخانه Qt حتی می‌توان به جای نوشتن کدهای ++C برای طراحی رابط کاربری از زبان QML استفاده کرد که بسیار ساده‌تر نیز می باشد. به این ترتیب پیشنهاد شخصی من به شما این است که با استفاده از کتابخانه Qt و IDE Qt Creator رابط گرافیکی برنامه‌های خود را پیاده‌سازی کنید و در طول توسعه برنامه خود همواره سعی کنید هسته اصلی برنامه شما هیچگونه وابستگی به رابط کاربری نداشته باشد.

امیدوارم توضیحات فوق مفید واقع گردد. در صورت داشتن هرگونه سؤال خوشحال خواهم شد در صورت توان پاسخ دهم.
موفق باشید.
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: سید مسعود امامیان در 03 فروردین 1392، 04:08 ب‌ظ
خوب ِ سوال اینجا مطرح بشه که در Qt چطوری dllهای پروژه رو همراه پروژه بیاریم ؟!
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: سید مسعود امامیان در 03 فروردین 1392، 04:18 ب‌ظ
سوال بعدی :
نقل‌قول
تنها یک بار هسته اصلی برنامه خود را بنویسید و سپس بخش رابط گرافیکی را متناس به محیطی که باید در آن اجرا شود انتخاب کنید.

نقل‌قول
مثلاً یک برنامه حسابداری می‌تواند یک هسته اصلی داشته باشد که رابط MFC برای ویندوز ، رابط +GTK برای گنوم روی لینوکس ، رابط Modern UI برای اجرا روی تبلت های Windows RT و یا حتی رابط HTML5 برای استفاده بر روی وب داشته باشد.

این کار چگونه امکان پذیر هست ؟ ممنون می شوم کمی این قسمت رو بازتر کنید یا اگر امکان دارد لینکی برای مطالعه بیشتر ارائه دهید .
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: r_m1232002 در 03 فروردین 1392، 04:23 ب‌ظ
خوب ِ سوال اینجا مطرح بشه که در Qt چطوری dllهای پروژه رو همراه پروژه بیاریم ؟!

هنگام نوشتن برنامه های Qt ماژول هایی وجود دارند که هرکدام امکانات خاصی را در اختیار شما قرار می دهند. هنگامی که برنامه شما پس از کامپایل به شکل یک فایل exe آماده شد کافی است درست در همان محل فایل اصلی، DLL های ماژول های استفاده شده در برنامه تان را نیز قرار دهید. به این ترتیب می توانید برنامه خود را به صورت یک فایل exe  و چند DLL برای اجرا در کامپیوتر های دیگر ارایه دهید. به طور مثال QtGUI4.dll  اغلب در کنار تمام برنامه های میتنی بر Qt4  منتشر می شود.

اگر هم اصرار دارید که به شکل استاتیک Qt را لینک کنید به مستندات زیر رجوع کنید:
http://qt-project.org/doc/qt-5.0/qtdoc/deployment-windows.html (http://qt-project.org/doc/qt-5.0/qtdoc/deployment-windows.html)
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: علی هردان در 03 فروردین 1392، 04:35 ب‌ظ
سلام. خیلی ممنون از پاسخ خوب و کاملتون. اصلا انتظار چنین پاسخی رو نداشتم.  :oops: واقعا خوب و کامل بود و قطعا کسانی که بعدا به این تاپیک میان استفاده خواهند کرد. من هم کلی استفاده بردم. تصمیم خودم رو گرفتم، میخوام برای طراحی برنامه GUI از فریم ورک Qt بهره ببرم. ولی یک سوال دیگه هم دارم. توی لینکی که شما دادید، آموزش لینک کردن Qt به صورت استاتیک در ویندوز بود. در اوبونتو هم چنین چیزی ممکنه یا حتما باید پکیج های Qt همراه برنامه نصب بشن؟
ممنون
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: MHA152 در 03 فروردین 1392، 04:38 ب‌ظ
خیلی توضیحات خوبی بود دیدم را کامل درست کردید آخرین نسخه ی qt creator چند است الآن؟ درضمن با نصب کردن آن آیا کتابانه های qt خودکار نصب می شوند؟qt designer با qt creator چه فرقی داره؟
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: r_m1232002 در 03 فروردین 1392، 04:45 ب‌ظ
سلام. خیلی ممنون از پاسخ خوب و کاملتون. اصلا انتظار چنین پاسخی رو نداشتم.  :oops: واقعا خوب و کامل بود و قطعا کسانی که بعدا به این تاپیک میان استفاده خواهند کرد. من هم کلی استفاده بردم. تصمیم خودم رو گرفتم، میخوام برای طراحی برنامه GUI از فریم ورک Qt بهره ببرم. ولی یک سوال دیگه هم دارم. توی لینکی که شما دادید، آموزش لینک کردن Qt به صورت استاتیک در ویندوز بود. در اوبونتو هم چنین چیزی ممکنه یا حتما باید پکیج های Qt همراه برنامه نصب بشن؟
ممنون

امکان لینک استاتیک در لینوکس هم وجود دارد. به این مطلب مراجعه کنید:
http://qt-project.org/forums/viewthread/5080

اما توجه داشته باشید لینک استاتیک کتابخانه ها در اغلب موارد اصلا کار درستی نمی باشد. با توجه به مزایای بسیار لینک داینامیک ، لینک استاتیک فقط در شرایط خاص توصیه می گردد.
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: r_m1232002 در 03 فروردین 1392، 04:51 ب‌ظ
خیلی توضیحات خوبی بود دیدم را کامل درست کردید آخرین نسخه ی qt creator چند است الآن؟ درضمن با نصب کردن آن آیا کتابانه های qt خودکار نصب می شوند؟qt designer با qt creator چه فرقی داره؟

آخرین نسخه Qt Creator  و کتابخانه Qt از آدرس http://qt-project.org/downloads (http://qt-project.org/downloads) قابل دسترس هستند. این دو نرم افزار مستقل هستند اما معمولا در یک بسته نیز ارایه می شوند.

Qt Designer در گذشته تنها برای طراحی رابط کاربری مورد استفاده قرار می گرفته است. در حال حاضر Qt Creator  که یک IDE کامل است برای استفاده توصیه می گردد.
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: سید مسعود امامیان در 03 فروردین 1392، 05:03 ب‌ظ
تشکر بابت اطلاعات خوبتون. امیدوارم به دفعات زیاد به این انجمن سر بزنید .

Creator بعد از Designer به وجود اومد و از اونجایی که Qt Creator یک برنامه پلاگین محور هست , می توانید Designer  رو به عنوان یک پلاگین برای Creator فرض کنید .
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: r_m1232002 در 03 فروردین 1392، 05:07 ب‌ظ
سوال بعدی :
نقل‌قول
تنها یک بار هسته اصلی برنامه خود را بنویسید و سپس بخش رابط گرافیکی را متناس به محیطی که باید در آن اجرا شود انتخاب کنید.

نقل‌قول
مثلاً یک برنامه حسابداری می‌تواند یک هسته اصلی داشته باشد که رابط MFC برای ویندوز ، رابط +GTK برای گنوم روی لینوکس ، رابط Modern UI برای اجرا روی تبلت های Windows RT و یا حتی رابط HTML5 برای استفاده بر روی وب داشته باشد.

این کار چگونه امکان پذیر هست ؟ ممنون می شوم کمی این قسمت رو بازتر کنید یا اگر امکان دارد لینکی برای مطالعه بیشتر ارائه دهید .

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

به طور مثال فرض کنید هسته اصلی برنامه نیاز دارد تا یک عدد را از کاربر دریافت کند. هسته اصلی تابع GetXNumber را از بخش واسطه فراخوانی می کند. حال بخش واسطه متناسب با رابطی که با آن در ارتباط است تابع مناسب را صدا می زند. مثلا می تواند محتویات یک TextBox را از MFC  یا Qt بخواهد. می تواند مقدار یک فیلد را از یک صفحه HTML بخواند ، دستور cin را برای دریافت عدد از ترمینال اجرا کند و یا حتی یک دستور RPC برای یک کامپیوتر دیگر در شبکه ارسال کند و عدد را از آنجا دریافت کند. به این ترتیب می بینید هسته اصلی برنامه با هر رابطی که کار کند برایش تفاوتی ندارد.

اما برای پیاده سازی چنین کدی می توان در ساده ترین حالت کد هسته را کپی کرد و با رابط های مختلف، نرم افزار های متناسب برای پلتفرم های متفاوت ایجاد کرد. می توان تنها یک نسخه از برنامه برای پلتفرمهای مختلف ایجاد کرد اما با استفاده از دستورات Preprocessor  در هنگام کامپایل تنها رابط مناسب را کامپایل کرد. و به شکل حرفه ای تر می توان با استفاده از ابزارهایی چون Make ، هنگام کامپایل برنامه تنها بخش های مناسب پلتفرم هدف را کامپایل نمود.
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: MHA152 در 03 فروردین 1392، 05:23 ب‌ظ
فکر کنم دوباره قاطی کردم این چیزیه که من فهمیدم اگه اشتباه است بهم بگید:
qt creator یک نرم افزار است که از کتابخوانه های qt استفاده می کنه وبه شما کمک می کنه تا بتوانید راحت تر یک محیط گرافیکی برای برنامه ی خود بسازید
پس این نرم افزار از چه زبانی استفاده می کنه(پیشفرض از سی)ولی من می خوام با پایتون کد بزنم باید چی کار کنم
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: سید مسعود امامیان در 03 فروردین 1392، 05:24 ب‌ظ
تشکر. اگر قرار بر این باشد در صورت نیاز که با Make کار کنم باAutomake کار می کنم .
http://www.gnu.org/software/automake
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: r_m1232002 در 03 فروردین 1392، 05:40 ب‌ظ
فکر کنم دوباره قاطی کردم این چیزیه که من فهمیدم اگه اشتباه است بهم بگید:
qt creator یک نرم افزار است که از کتابخوانه های qt استفاده می کنه وبه شما کمک می کنه تا بتوانید راحت تر یک محیط گرافیکی برای برنامه ی خود بسازید
پس این نرم افزار از چه زبانی استفاده می کنه(پیشفرض از سی)ولی من می خوام با پایتون کد بزنم باید چی کار کنم

QtCreator  برای سهولت استفاده برنامه نویسان زبان ++C از کتابخانه Qt طراحی شده و از زبان Python پشتیبانی نمی کنه. اگر شما قصد دارید تا با استفاده از زبان پایتون از کتابخانه Qt استفاده کنید باید به کتابخانه های PyQt و یا PySide مراجعه کنید. فکر کنم PyQt نرم افزارهای کمکی برای طراحی رابط گرافیکی داشته باشه.
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: AmirrezaGhaderi در 03 فروردین 1392، 07:04 ب‌ظ


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


اتفاقا کاملا بر عکس، لینک استاتیک شیوه‌ی مناسب تری هست.
اینکه توی لینوکس بیشتر به صورت دینامیک لینک میکنن دلایل دیگه ایی داره که خارج از این بحث هست
و میشه یه تاپیک جداگانه براش داشت.
عنوان: پاسخ : چگونه برنامه نویسی کنم؟
ارسال شده توسط: r_m1232002 در 03 فروردین 1392، 07:41 ب‌ظ


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


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

علاقه مند هستم با توضیح دیدگاه خود ، اشتباه احتمالی من را تصحیح کنید:
http://forum.ubuntu.ir/index.php/topic,60232.0.html (http://forum.ubuntu.ir/index.php/topic,60232.0.html)