# Native Code > برنامه نویسی با C > برنامه نویسی در محیط QT و هم خانواده هایش >  چرا باید از qt استفاده کنیم

## beginner_1395

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

البته این رو هم بگم خودم خیلی کیوت رو دوس دارم
چون مدتیه رفتم سمت ubuntu و برای لینوکس هم بهتر از کیوت پیدا نکردم

بعد از این که کلی صحبت شنیدم راجع به اینکه مایا و چند نرم افزار بزرگ دیگه که با کیوت نوشته شده

اما بعد 

توی یه تاپیک خوندم که مایا رو با سی پلاس پلاس نوشتن و فقط برای gui از کیوت اشتفاده شده
و بعد از یه سری جستجو های دیگه فهمیدم که مکس هم وضعیت مشابه داره 
یعنی هسته اصلی 3d max رو با سی پلاس پلاس نوشتن و برای رابط کاربری از دات نت استفاده شده

خب حالا چند سوال دارم

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

با این توضیحات اولا انتخاب بین کیوت و سی ++ هست 
اگه قراره و لازمه هسته نرم افزار رو با سی ++ استاندارد نوشت 
و برای ui هم میشه از گزینه های دیگه مثل پایتون و یا دات نت استفاده کرد
پس جای کیوت کجاست

کتابخانه های دیگه هم هستن برای سی ++ که میشه برنامه برای لینوکس و مک و ویندوز استفاده بشه
و در هر حال توی برنامه های بزرگ مواردی پیش میاد که مثلا کدی در لینوکس نوشته بشه که در مک قابل استفاده نباشه

اصلا برای برنامه ای که ویندوزی هستش چرا از .net استفاده نکنیم و بیاییم سمت کیوت و سی پلاس پلاس

----------


## pswin.pooya

> اگه قراره و لازمه هسته نرم افزار رو با سی ++ استاندارد نوشت 
> و برای ui هم میشه از گزینه های دیگه مثل پایتون و یا دات نت استفاده کرد
> پس جای کیوت کجاست


شما بستگی به کاربردتون می تونید هسته رو حتی با نرم افزارهای دیگه بنویسید و ui رو با C++‎ و یا برعکس. اما قبل از اون باید دانش کافی اتصال این دو به هم رو داشته باشید.




> و در هر حال توی برنامه های بزرگ مواردی پیش میاد که مثلا کدی در لینوکس نوشته بشه که در مک قابل استفاده نباشه


توی لینوکی و مک که مبتنی بر یونیکس هستن همچین اختلافهایی کم هست اما جریان این دو با ویندوز فرق می کنه و اینجاست که فریم ورکهایی مثل کیوت به داد شما می رسند.




> اصلا برای برنامه ای که ویندوزی هستش چرا از .net استفاده نکنیم و بیاییم سمت کیوت و سی پلاس پلاس


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

من بودم بین گزینه های موجود به زبانهایی دیگه مثل C++‎ و جاوا و حتی پایتون فکر می کردم تا زبانهای مبتنی بر دات نت مثل سی شارپ و یا حتی C++‎ Managed. بحث فنی اینکه چرا باید از این زبانها استفاده کنیم (بجای سی شارپ) خیلی وقت گیر و پیچیده هست و توی یه تاپیک جا نمی شه ولی بطور خلاصه می شه به موارد زیر اشاره کرد:


*سبک برنامه نویسی:* دات نت فقط محدود به سبک خاصی به اسم شی گرایی هست در حالی که برخی از زبانها مثل C++‎ از انواع مدلهای دیگه مثل ساختاریافته، Aspect oriented و Data oriented پشتیبانی می کنند.ا*بعاد برنامه نویسی*: تقریبا شما هیچ برنامه بزرگی رو پیدا نمی کنید که با دات نت نوشته شده باشه (در سطح جهانی) و می شه گفت 90 درصد برنامه های بزرگ بسته به نوع اونها یا با C++‎ و یا جاوا نوشته می شن. دلیل این جریان خیلی پیچیده هست و برای درک درست اون باید مطالعات خیلی خیلی زیادی داشت. ولی خب مربوط به مدلهای برنامه نویسی هست که برای هر برنامه استفاده می شه.*سرعت*: سرعت یه پارامتر خیلی مهم در اکثر برنامه هست. هرچند که در برنامه های مبتنی بر پایگاه داده سرعت UI و ... کمرنگ تر هست. سرعت واکشی داده از پایگاه داده و یا تحلیل درخواست، تراکنشها و ... معمولا اینقدر کم هست که می تونه مشکلات سرعت UI رو بپوشونه یا کمرنگ کنه. (اما خب من برنامه ایرانی دیدم که فرمش توی چند ثانیه ظاهر می شه و یا گزارش رو توی 20 دقیقه آماده می کنه - دیگه این شکلی هم نباید باشه).*کتابخونه ها*: یکی از مزیتهای بارز C++‎ کتابخونه های اون هستند که تمومی ندارن. این زبان برای هرچیزی کتابخونه های معروف داره حتی برای ساخت برنامه های توزیع شده و ... (که دات نت عملا توی تعطیلات هست و حتی مدلهایی هم که براش وجود داره درست نیستن). و یا جاوا فریم ورکهای نسبتا کاملی داره.




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

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

من خودم مشکلی با مایکروسافت ندارم منتها این موارد معمولا برای برنامه نویسهای تا حداکثر سطح متوسط طراحی شده و برای کاربردهای حرفه ای تر نمی شه ازشون استفاده کرد. اولش به نظر می رسه همه چیز رو فراهم کرده و کارها پیش می ره. حتی ممکنه برنامه هم باهاش بیرون بدید که برنامه خوبی باشه. اما وقتی با یکی از مسائل زیر برخورد کردید کم میارید:



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

البته اکثر اینها با اتخاذ مدلهای درست برنامه نویسی و دیزاین پترن های خوب (نه مواردی مثل MVC و سه لایه و یا موارد رایج ایرانی) می شه حلشون کرد. متاسفانه برخی از این دیزاین پترنهای خوب رو هم نمی شه کامل داخل سی شارپ پیاده سازی کرد.

*کلام آخر:*

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

 تنها چیزی که باعث می شه شما به نتیجه درست برسید چندین سال تجربه و مطالعه خیلی خیلی زیاد و مداوم هست. من شخصا بعد از اینهمه مطالعه این ماه دارم دومین کتابم رو تموم می کنم و سراغ سومی میرم.

----------


## negative60

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



زمانی‌ این حرف درست محسوب می‌شه که هدف از یادگیری زبان برنامه نویسی نوشتن برنامه‌های دیتا بیسی تحت ویندوز باشه و طرف نخواد زمان زیادی رو برای یادگیری بذاره که در این صورت برای این افراد دات نت گزینه مناسبی هست, اما برای کسی‌ که ++c بلد باشه دور از عقل که این پروژه رو با دات نت کار کنه وقتی‌ خروجی‌ ++c می‌تونه کراس پلتفرم باشه دلیلی‌ نداره برنامه نویس دات نت رو انتخاب کنه و خودش رو به ویندوز محدود کنه
این موضوع هم که برنامه‌های نوشته شده با ++c زمان بیشتری رو میگیره کاملا به تبحر برنامه نویس بستگی داره





> توی یه تاپیک خوندم که مایا رو با سی پلاس پلاس نوشتن و فقط برای gui از کیوت اشتفاده شده
> و بعد از یه سری جستجو های دیگه فهمیدم که مکس هم وضعیت مشابه داره 
> یعنی هسته اصلی 3d max رو با سی پلاس پلاس نوشتن و برای رابط کاربری از دات نت استفاده شده



این کاملا منطقی‌ و درست هست و باید هم اینطور باشه همیشه لازم نیست همه قسمت‌های برنامه توسط کلاس‌های کیوت نوشته بشن نمی‌شه از کیوت انتظار داشت تو همه زمینه ها نیاز‌های برنامه نویس رو تامین کنه برای هر کاری باید از کتابخونه خودش استفاده کنید





> با این توضیحات اولا انتخاب بین کیوت و سی ++ هست





بارها تو این انجمن گفته شده که Qt یک زبان نیست که شما اون رو از ++c جدا می‌دونید Qt فقط مجموعه ایی از کلاس‌ها و کتاب خونه‌های آماده برای رابط کاربری هست و برای اینکه بتونید با کیوت کار کنید اول باید ++c یاد بگیرید







> اگه قراره و لازمه هسته نرم افزار رو با سی ++ استاندارد نوشت 
> و برای ui هم میشه از گزینه های دیگه مثل پایتون و یا دات نت استفاده کرد
> پس جای کیوت کجاست





وقتی‌ همه این کارها رو می‌شه با ++c انجام داد چه دلیلی‌ داره از دات نت یا پایتون برای رابط کاربری استفاده کرد؟ از این گذشته اگر ui با پایتون یا دات ننت ساخته بشه در این صورت ui از هسته کاملا جدا می‌شه و امکان اینکه کسه دیگه از هسته استفاده کنه هم هست

----------


## Delphi XE2

> کلا توی برنامه نویسی باید آخرین گزینه تون دات نت باشه


من نمیگم qt خوبه یا بده
اما کلا تو تالارهایی مثل اینجا یا جاوا رسم شده
برای اینکه بگن ما خیلی خوبیم دات نت رو میکوبن
خداییش من دارم از WPF استفاده میکنم چیزی هم از qml شما کم نداره
تازه ابزارهایی مثل Blend کار روهم خیلی ساده کرده
خلاصش این که نکنید این کار رو خب فکر میکنید کیوت تون خوبه نقاط قوتش رو بگید
دیگه با ما چیکار دارین

----------


## ali_72

> من نمیگم qt خوبه یا بده
> اما کلا تو تالارهایی مثل اینجا یا جاوا رسم شده
> برای اینکه بگن ما خیلی خوبیم دات نت رو میکوبن
> خداییش من دارم از WPF استفاده میکنم چیزی هم از qml شما کم نداره
> تازه ابزارهایی مثل Blend کار روهم خیلی ساده کرده
> خلاصش این که نکنید این کار رو خب فکر میکنید کیوت تون خوبه نقاط قوتش رو بگید
> دیگه با ما چیکار دارین


با توجه ب نوع کاربرد باید زبان برنامه نویسی انتخاب کرد. من .NET کارم. اما در مورد یه پروژه ارتباط با سخت افزار کتابخونه های خوب Qt باعث شد تا برنامه خیلی قویتر شه. و ارتباط با سخت افزار نمیدونم چرا ولی باورنکردنی سریغ شد. و بسیار زیبا و دلنشین من apk برنامه برنامه هم گرفتم و کاربر چ ذوقی کرد وقتی برنامه رو تو تبلت دید  :لبخند گشاده!:  من هنوز .net دوست دارم ولی هر چیز جای خودش 
هنوز ی سری برنامه با دات نت مینویسم
وب کار ک هستم و عشق م asp.net هست
مطمینن نظر همهخ دوستان محترم و برای این هست ک رغبت بیشتری برای یادگیری داشته باشیم. همین طور من ک از تاپیک های استاد اسدزاده در همین انجمن شروع ب یادگیری کردم و ب نتیجه دلخواه م رسیدم  :قلب:

----------


## pswin.pooya

> خداییش من دارم از WPF استفاده میکنم چیزی هم از qml شما کم نداره


مثل WPF ، کیو ام ال هم یک کتابخونه هست و انتخاب کتابخونه به عهده شماست که چجوری باشه. شما حتی می تونید کتابخونه خودتون رو بنویسید که از هر دوی اینها هم جلو باشه مثلا کتابخونه دوستمون سجاد (seganx) بهتر از هر دوی اینها می دونم (حداقل خروجیش بهتره و سرعت خوبی هم داره)

منتها ویژگی های دیگه هم هستن که باید بهشون دقت کرد مثلا qml به صورت ذاتی reactive هست و می شه از جاوا اسکریپت توش استفاده کرد. اما تا اونجا که می دونم اینکارها با کد سی شارپ و الحاقی reactive توی دات نت انجام می گیره.





> اما کلا تو تالارهایی مثل اینجا یا جاوا رسم شده
> برای اینکه بگن ما خیلی خوبیم دات نت رو میکوبن


بعد از تجربه C++‎ شما معنای کامل آزادی برنامه نویس رو متوجه می شید و اینکه با کامپیوتر می شه چه کارهایی کرد. و بعد از تجربه Java EE شما متوجه می شید که سی شارپ بیشتر یه تقلید کورکورانه از جاوا بوده. واقعا حیفه که جایی که می شه از C++‎ و یا Java EE استفاده کرد سراغ گزینه هایی مثل C#‎ رفت. (به نظر من نهایت آماتور بودن رو نشون می ده)

----------


## ali_72

> بعد از تجربه C++‎‎ شما معنای کامل آزادی برنامه نویس رو متوجه می شید و اینکه با کامپیوتر می شه چه کارهایی کرد.


کاملادرسته

 :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق: 
 :قلب:  :قلب:  :قلب:  :قلب:

----------


## beginner_1395

> بارها تو این انجمن گفته شده که Qt یک زبان نیست که شما اون رو از ++c جدا می‌دونید Qt فقط مجموعه ایی از کلاس‌ها و کتاب خونه‌های آماده برای رابط کاربری هست و برای اینکه بتونید با کیوت کار کنید اول باید ++c یاد بگیرید


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

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

----------


## negative60

> خوب منم میدونم که کیوت زبان نیس و مجموعه ای از کتاب خونه هاس مثلا مثل mfc که کتابخونه مایکروسافته دیگه
> تا اینجا درسته یا نه
> خب من وقتی از سی ++ استاندارد استفاده کنم
> یعنی کاری که این کتابخونه ها انجام میدن خودم انجام بدم 
> خب دیگه از کیوت استفاده نکردم
> سوال اصلیم هم توی این تاپیک که متاسفانه پاسخ نگرفته همین بود
> مثلا چرا کسایی که فتوشاپ رو نوشته اند gui رو هم خودشون مینویسن و از کتابخونه هایی مثل کیوت یا حتی دات نت برای gui استفاده نکردن
> از طرف دیگه اگه نباید از این کتابخونه ها استفاده کنیم پس چرا مکس و مایا استفاده کردن
> خلاصه نمیدونم این بار منظورم خوب رسوندم یا نه


کتابخونه‌ها برای آسونتر و ساده تر کردن برنامه نویسی و سریعتر نوشتن ساخته شدن بله شما میتونید با توابع بومی سیستم عامل هم رابط کاربری بسازید اما خیلی‌ خیلی‌ باید وقت و انرژی صرف این کار کنید این مساله فقط در مورد کیوت و رابط کاربری نیست تقریبا برای هر کاری در ++c یک کتاب خونه وجود داره (رمزنگاری، پردازش تصویر، شبکه، رابط کاربر و...) مثال شما میخواید یک الگوریتم رمزنگاری رو پیاده سازی کنید اول اینکه باید علمش رو داشته باشید و در مورد اون الگورینتم به صورت دقیقی‌ مطالعه کنید بعد باید اون الگوریتم رو با پرفورمنس بالایی بنویسید و اگر موفق بشید و اگر باگی وجود نداشته باشه میتونید ازش استفاده کنید خوب همین مساله زمان خیلی‌ خیلی‌ زیادی رو از شما میگیره! وقتی‌ کتاب خونه‌های زیادی برای همین کار قبلان ساخته شده اند و بعد از سالها امتحان خودشون رو پس داده‌اند دلیلی‌ نداره از صفر شروع کنید به نوشتن به جای اینکه وقت و انرژی تون رو صرف این کارها کنید میتونید همین زمان رو صرف ساختن پروژه‌ها و محقق کردن ایده‌هاتون کنید
به نظر من زمانی‌ باید از صفر شروع کنید که یا بتونید همون کار کتابخونه رو ساده تر و با کارآیی بیشتر و بهتر انجام بدید یا اینکه اون کتابخونه نیازهای شما رو تامین نکنه, یا دلایل منطقی‌ دیگه که می‌تونه وجود داشته باشه.
امیدوارم جوابی‌ که دنبالش بودی رو تونسته باشم بدم

----------

