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

## hamed.t

سلام
 میخواستم بدونم برای من که چند سالی با دلفی کار کردم و حالا به محدودیتهایی از دلفی پی بردم ، آیا بهتر ه که زبان برنامه نویسی qt را برای ادامه کار هام بر گزینم و آیا جوابگوی نیاز
 های من هست ؟
 یه کم بیشتر توضیح میدم 
 حدود 6 ساله که دارم با دلفی برنامه های مختلف مینویسم مثلا-سوکت پروگرامینک-3D charting-بانک اطلاعاتی و غیره و تو اینجور برنامه ها هم مشکلی نداشتم اما از چند وقت پیش تو یه شرکت کوچیک که کارشون انجام سفارش های دستگاهای الکترونیکی ،مشغول به کار شدم، مشکل هم از همونجا شروع شد ، مثلا یه چنتایی برنامه برای ارتباط بین دستگاه و کامپیوتر نوشتم (همون اینترفیس خودمون) که مجبور شدم با سخت افزار کامپیوتر و سخت افزارهای دیگه بیشتر کار کنم ، مثلا پورت سریال یا پورت موازی حتی usb ، اینجا بودکه خیلی به مشکل برخوردم و فهمیدم که با دلفی نمیشه زیاد برنامه های نزدیک به سخت افزار نوشت و تو اینجور کارا مثلا برای usb یه سری dll که با زبون های دیگه (C/C++‎‎) نوشته شده براش هست که در آخر 
کار زیاد خوب از آب در نمیاد (تازه همیشه هم اینطور نیست) .

 خلاصه فهمیدم که باید یه زبون قویتر (سطح پایینتر ) یاد بگیرم حالا بین qt - phython - vcموندم ، اصلا نمیدون تو کدومشون میتونم هم مثل دلفی همه جور برنامه ای بنویسم هم بیشتر از دلفی به سخت افزار نزدیک باشه . 

البته من دلفی را زیر سوال نمیبرم ، مطمعنا همه این برنامه ها حتی سنگینتر از این رو میشه با دلفی پیاده سازی کرد ولی فکر کردم شاید زیاد برای این کارا بهینه نشده و بتونم
از یه زبون دیگه استفاده کنم که تو این کارا قویتر باشه ، مثلا خودم برا برنامه نویس میکروکنترلر از C /C++‎‎ استفاده میکنم حالا نمیدونم برای کامپیوتر هم از همون سی استفاده کنم یا بهتره تو فکر یه زبون جدیدتر مثل Qt یا phython باشم که هم یادگیریش سریعتر باشه هم اگه لازم شد روی سیستمهای مختلف قابل اجرا باشه ؟!!

----------


## saleh.hi.62

اگه من بخوام راهنمأیتون کنم .... خوب اینه که برای اون کاری که شما میخواید...برای برنامه نویسی سطح پایین همه میدونن که هیچ زبونی مس c یا C++‎‎‎ نیست....خوب حالا اگه شما QT رو هم انتخاب کنی‌ میتونی‌ از کتابخونه‌های خیلی‌ خیلی‌ قوی اونم استفاده کنی‌ و یک IDE خیلی‌ خوب که در کلّ می‌تونم بگم شما چیزی کم نداری... python  هم زبون خیلی‌ خوبی‌ ولی‌ اگه قصد شما برنامه نویسی سطح پأیین C++‎‎‎ می‌تونه گزینه بهتری باشه.


اگه توی سایت www.qt.nokia.com یه نگاه کنین توی قسمت who use QT? میتونین ببینین که اکثر کمپانی هایی که مشتری همیشگی‌ QT هستن کارهائ انجام میدن که ارتباط نزدیک با سخت افزار داره.



> آیا بهتر ه که زبان برنامه نویسی qt را برای ادامه کار هام بر گزینم و آیا جوابگوی نیاز


QT یک زبان نیست یک Framwork هست که بأیند هایی برای زبان‌های متعددی داره و زبان پیش‌فرض C++‎‎ هستش.


امیدوارم که تونسته باشم کمکی‌ بکنم.

----------


## hamed.t

ممنون که به سوالاتم جواب دادیم





> QT یک زبان نیست یک Framwork هست که بأیند هایی برای زبان‌های متعددی داره و زبان پیش‌فرض C++‎‎‎ هستش.


میشه در این مورد بیشتر توضیح بدید اصلا Framwork چی هست ؟





> امیدوارم که تونسته باشم کمکی‌ بکنم.


حتما.

----------


## saleh.hi.62

منظر از framework اینه که یه سری افراد اومدن و یک سری توابع و کلاس‌های متفاوت برای کار‌های مختلف مثل ارتباط با database ایجاد رابطه گرفیکی ،...... نوشتن.


 خوب برای مثال ما .net framwork رو داریم که به شما امکاناتی رو میده که شما برای windows بتونین خیلی‌ راحت تر برنامه بنویسین ولی‌ برای اینکه برنامه شما اجرا بشه شما حتما نیاز دارین که .net روی سیستم  شما نصب باشه تا اون برنامه اجرا بشه .

در مورد QT هم به همین شکل این هم یه framwork ولی‌ دیگه شما نیاز ندارین همه جا اول QT رو نصب کنین فقط چند تا فایل DLL رو میذارین توی پوش برنامه‌ای که نوشتین و برنامتون همه جا اجرا می‌شه.
 خوب در نهیات به این نمی‌شه گفت زبان برنامه نویسی یک سری کلاس‌ها و متد هایی که فقط به شما کمک می‌کنن تا راحت تر برنامه بنویسیم.

حالا تفاوت QT و .net اینه که شما از چهارچوب (framework) .net نمیتونی‌ فرا تر بری و باید از کتابخونه‌های .net استفاده کنی‌ ولی‌ برای QT شما قادر هستین علاوه بر خود کتابخونه هایی که در اختیار شما میذاره هر چیزی که خود شما لازم درین رو به برنامه خودتون اضافه کنید .

----------


## vcldeveloper

> حالا تفاوت QT و .net اینه که شما از چهارچوب (framework) .net نمیتونی‌ فرا تر بری و باید از کتابخونه‌های .net استفاده کنی


این تصور اشتباه هست.
شما می تونید هم از کتابخانه های تولید شده توسط شرکت های 3rd party برای دات نت در برنامه های خودتان استفاده کنید، هم خودتان کتابخانه های مخصوص به خودتان را بنویسید و از آنها استفاده کنید.

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

----------


## حامد مصافی

Framework مجموعه ابزاري است كه برنامه نويسي براي هدف مشخصي را ساده تر از اينكه خود تان همه چيز را بنويسيد انجام مي دهد، يعني مجموعه اي از كد هاي يا خروجي هاي آماده با قابليت استفاده مجدد.

محدود به استفاده از هيچ كتابخانه يا چهار چوبي نيستيد، در زبان C++‎‎ يا ساير زبان هايي كه قابليت بايند به QT را دارند مي توانيد از Qt استفاده كنيد. در هر زباني كه از تكنولو‍ي دات نت پشتيباني كند مي توانيد از چهار چوب دات نت استفاده كنيد. حتي مي توانيد از MC++‎‎ از دات نت و Qt تواماً استفاده كنيد.




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


هيچ كلاسي در دات نت نمي تواند از پايه ايجاد شود، همه كلاس ها در صورت مشخص نبودن كلاس پايه به طور ضمني از System::Object مشتق مي شوند. حتي پورت هاي ActiveX.

البته اين در مورد MC++‎‎ كه از كد هاي مديريت نشده پشتيباني مي كند استثنا است.

----------


## saleh.hi.62

> این تصور اشتباه هست.


البته منظور من از اون تعریف این بود که اگه شما روزی تصمیم به انجام کاری بگیرید که به فرض نیاز هست که شما از پایه شیئ رو ایجاد کنید اون زمان من فکر نمیکنم .net پاسخگو باشد.

----------


## hamed.t

> منظر از framework اینه که یه سری افراد اومدن و یک سری توابع و کلاس‌های متفاوت برای کار‌های مختلف مثل ارتباط با database ایجاد رابطه گرفیکی ،...... نوشتن.
> 
> 
>  خوب برای مثال ما .net framwork رو داریم که به شما امکاناتی رو میده که شما برای windows بتونین خیلی‌ راحت تر برنامه بنویسین ولی‌ برای اینکه برنامه شما اجرا بشه شما حتما نیاز دارین که .net روی سیستم  شما نصب باشه تا اون برنامه اجرا بشه .
> 
> در مورد QT هم به همین شکل این هم یه framwork ولی‌ دیگه شما نیاز ندارین همه جا اول QT رو نصب کنین فقط چند تا فایل DLL رو میذارین توی پوش برنامه‌ای که نوشتین و برنامتون همه جا اجرا می‌شه.
>  خوب در نهیات به این نمی‌شه گفت زبان برنامه نویسی یک سری کلاس‌ها و متد هایی که فقط به شما کمک می‌کنن تا راحت تر برنامه بنویسیم.
> 
> حالا تفاوت QT و .net اینه که شما از چهارچوب (framework) .net نمیتونی‌ فرا تر بری و باید از کتابخونه‌های .net استفاده کنی‌ ولی‌ برای QT شما قادر هستین علاوه بر خود کتابخونه هایی که در اختیار شما میذاره هر چیزی که خود شما لازم درین رو به برنامه خودتون اضافه کنید .


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

----------


## vcldeveloper

> هيچ كلاسي در دات نت نمي تواند از پايه ايجاد شود، همه كلاس ها در صورت مشخص نبودن كلاس پايه به طور ضمني از System::Object مشتق مي شوند. حتي پورت هاي ActiveX.


کلاس System.Object در دات نت، System::object در جاوا، System.TObject در دلفی کلاس پایه همه کلاس ها در این زبان ها محسوب میشند. وقتی گفته میشه می توان از پایه کلاس تعریف کرد به معنای این هست که می توان مستقیما از System.Object کلاس جدید مشتق کرد.



> البته اين در مورد MC++‎‎‎ كه از كد هاي مديريت نشده پشتيباني مي كند استثنا است.


ربطی به کدهای مدیریت شده یا Native نداره، بلکه به زبان برنامه نویسی بر میگرده. همانطور که گفتم، در دلفی هم که یک زبان Native هست، روال کار به همین شکل هست. در ++VC اینطور نیست چون همچین چیزی در اون زبان برنامه نویسی نیست، و Type ها در اون زبان همگی از یک Type پایه مشتق نمیشند. در واقع نقش کلاس Object در زبان هایی مثل #C یا جاوا مثل نقش حضرت آدم (ع) برای کل بشر هست، یعنی پدر همه کلاس ها.




> البته منظور من از اون تعریف این بود که اگه شما روزی تصمیم به انجام کاری بگیرید که به فرض نیاز هست که شما از پایه شیئ رو ایجاد کنید اون زمان من فکر نمیکنم .net پاسخگو باشد.


می تونید. در دات نت کلاس System.Objectپایه همه کلاس ها ست، و همه چیز حتی Type های اولیه مثل Integer بصورت کلاس های مشتق شده از Object تعریف شدند. کلاس Object یک سری امور اولیه مثل اختصاص حافظه به Instance ساخته شده را انجام میده. 

شما در دات نت می تونید از کلاس System.Objectبه بالا هر چیزی را خودتان بنویسید، حتی می تونید چرخ را از اول اختراع کنید، و تمامی کلاس های Class Library دات نت را کنار بگذارید، و همه آنها را خودتان بنویسید!

----------


## hamed.t

از همه دوستان برای  جواب های زیبا و کاملشون ممنونم ‌ٍ و امیدوارم این بحث ادامه داشته باشه.

یه سوال دیگه ٍ آیا معماری .net فقط برای طراحی وبه ؟

----------


## hamed.t

> می تونید. در دات نت کلاس System.Objectپایه همه کلاس ها ست، و همه چیز حتی Type های اولیه مثل Integer بصورت کلاس های مشتق شده از Object تعریف شدند. کلاس Object یک سری امور اولیه مثل اختصاص حافظه به Instance ساخته شده را انجام میده. 
> 
> شما در دات نت می تونید از کلاس System.Objectبه بالا هر چیزی را خودتان بنویسید، حتی می تونید چرخ را از اول اختراع کنید، و تمامی کلاس های Class Library دات نت را کنار بگذارید، و همه آنها را خودتان بنویسید!


منم موافقم.

تو اینجور زبانها هر چیزی یک شیء است.

----------


## saleh.hi.62

> حالا یه چیز این QT که به C++‎‎‎‎ اضافه میشه یا برعکس منظورم اینه که من فقط کیو تی رو نصب کنم رو سیستم بعد برم تو C++‎‎‎‎ برنامه بنویسم و فقط کتابخونه های کیو تی رو اضافه کنم یا روند طوری دیگه هست ؟!!


نه به این شکل نیست.
QT  خودش یک IDE خیلی خوب و کامل رو همراه داره. شما برای کد نویسی و تمامی کارها از همون محیط استفاده کنید.

دوست عزیز توصیه میکنم QT  دانلود کنی و ببینی که دقیقا چی..اونوقت بهتر میتونی تصمیم بگیری.




> یه سوال دیگه ٍ آیا معماری .net فقط برای طراحی وبه ؟


نه با  net شما قادر خواهید بود برای web, destktop , windows mobile برنامه بنویسید.




> می تونید. در دات نت کلاس System.Objectپایه همه کلاس ها ست، و همه چیز حتی Type های اولیه مثل Integer بصورت کلاس های مشتق شده از Object تعریف شدند. کلاس Object یک سری امور اولیه مثل اختصاص حافظه به Instance ساخته شده را انجام میده. 
> 
> شما در دات نت می تونید از کلاس System.Objectبه بالا هر چیزی را خودتان بنویسید، حتی می تونید چرخ را از اول اختراع کنید، و تمامی کلاس های Class Library دات نت را کنار بگذارید، و همه آنها را خودتان بنویسید!


آیا ما قادر به استفاده از کد زبان ماشین در دات نت هستیم؟

----------


## حامد مصافی

> ربطی به کدهای مدیریت شده یا Native نداره، بلکه به زبان برنامه نویسی بر میگرده. همانطور که گفتم، در دلفی هم که یک زبان Native هست، روال کار به همین شکل هست. در ++VC اینطور نیست چون همچین چیزی در اون زبان برنامه نویسی نیست، و Type ها در اون زبان همگی از یک Type پایه مشتق نمیشند. در واقع نقش کلاس Object در زبان هایی مثل C#‎‎ یا جاوا مثل نقش حضرت آدم (ع) برای کل بشر هست، یعنی پدر همه کلاس ها.


من در مورد عموم زبان هاي native حرف نزدم، بلكه منظورم اين بود كه در زبان هايي كه از دات نت پشتيباني مي كنند (مانند C#‎و VB.NETو ...) همه كلاس ها بايد از System::Object مشتق شوند اما در MC++‎ برنامه نويس قادر است كه كلاس هايي را با اعلان nogc__ تعريف كند كه از كلاس پايه دات نت مشتق نمي شوند، در واقع يك كلاس مديريت نشده ساخته مي شود.

----------


## vcldeveloper

> آیا ما قادر به استفاده از کد زبان ماشین در دات نت هستیم؟


استفاده از کد زبان ماشین در محیط های مدیریت شده مثل جاوا یا دات نت بی معنی هست، چون کدهای مدیریت شده برای یک ماشین مجازی کامپایل میشند، نه یک ماشین حقیقی. عمل کامپایل به زبان ماشین حقیقی در سیستم مقصد توسط JIT انجام میشه.
البته در دات نت برنامه نویس میتونه بخش های از کد را به عنوان کدهای Unmanaged علامتگذاری کنه، یا توابع اختصاصی یک پلت فرم خاص را با استفاده از P/Invoke فراخوانی کنه. البته در اون صورت برنامه قابلیت Portability خودش را از دست میده، و به یک پلت فرم خاص محدود میشه، چون داره از قابلیت های اختصاصی یک پلت فرم استفاده میکنه که ممکن هست در سایر پلت فرم ها وجود نداشته باشه.

----------


## hamed.t

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


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

----------


## nazgolii

سلام
من کار با qt رو تازه آغاز کردم یک برنامه ساده رو نوشتم فایل sis. رو هم ساختم توی این برنامه برای اجرا روی گوشی باید فایل prof. رو چه تغییری بدم تا روی گوشی جواب بده؟ آخه فایل sis رو که میریزم ارور میده
ممنون

----------

