You are on page 1of 144

‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪|Page1‬‬

‫ثؼٓ اهلل اِشكٕٗ اِشكیٓ‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪|Page2‬‬

‫ٌفشبس ٘‪ٛ‬یؼ‪ٙ‬ذ‪: ٜ‬‬

‫ایٗ وشبة ثش ٌشفش‪ ٝ‬اص آٔ‪ٛ‬صؽ ‪ٞ‬بی خ‪ٛ‬ة آلبی وبٔجیض اػذصاد‪ ٜ‬اػز عی كلجشی و‪ ٝ‬ثب ایـ‪ ٖٛ‬ؿذ لشاس ؿذ‪ ٜ‬و‪ٝ‬‬
‫ایٗ وشبة سا ث‪ ٝ‬ك‪ٛ‬سر ‪ pdf‬ا٘شـبس ثذیٓ ایٗ وشبة وبٔال سایٍبٖ اػز‬

‫٘‪ٛ‬یؼ‪ٙ‬ذ‪ : ٜ‬دظٔبٖ اثشا ‪ٞ‬یٓ د‪ٛ‬س)‪(adonis27‬‬

‫ایٕیُ ٘‪ٛ‬یؼ‪ٙ‬ذ‪pejman_ebrahimpor@yahoo.com :ٜ‬‬

‫ایٕیُ آلبی وبٔجیض اػذصاد‪kambiz@nanosoftco.com :ٜ‬‬

‫ػبیز سػٕی ‪www.nanosoftco.com :‬‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪|Page3‬‬

‫اٌش ٔـىّی ث‪ٛ‬د ثب ایٕیُ ‪ٞ‬بی ثبال سٕبع ثٍیشیذ سب دس ا‪ِٚ‬یٗ فشكز اكالف ؿ‪ٛ‬د اٌش ‪ ٓٞ‬غّظ أالیی ‪ٞ‬ؼز ث‪ٝ‬‬
‫ثضسٌی خ‪ٛ‬دس‪ ٖٛ‬ثجخـیذ‬

‫ٔبیّٓ اص أش‪ٚ‬ص عجك سؼبسیف ‪ِ ٚ‬یؼز ث‪ٙ‬ذی روش ؿذ‪ ٜ‬دس ادأ‪ ٝ‬س‪ٛ‬ضیلبر آٔ‪ٛ‬صؽ ‪ٞ‬بیی س‪ ٚ‬ثشای ثش٘بٔ‪ٛ٘ ٝ‬یؼی‬
‫اسائ‪ ٝ‬ثذیٓ و‪ٔ ٝ‬بیُ ث‪ٛ‬دْ دس ‪ٚ‬ة ػبیز خ‪ٛ‬دْ الذاْ ث‪ ٝ‬ا٘شـبس آٔ‪ٛ‬صؽ ‪ٞ‬ب و‪ ٓٙ‬و‪ٌ ٝ‬فشٓ دس ا٘ؼٕٗ ‪ Qt‬ثب ‪C++‬‬
‫‪ٞ‬بی ثش٘بٔ‪ٛ٘ ٝ‬یغ ثبؿ‪ ٝ‬ثیـشش ٔ‪ٛ‬سد اػشفبد‪ ٜ‬لشاس ٔیٍیش‪ ٜ‬و‪ ٝ‬ا٘ـبهلل ‪ٕٞ‬ی‪ٙ‬غ‪ٛ‬س ‪ ٓٞ‬خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د‬
‫‪ٞ‬ذف اص ایٗ آٔ‪ٛ‬صؽ ‪ٞ‬ب آؿ‪ٙ‬بیی ثب أىب٘بسی ‪ٞ‬ؼز و‪ ٝ‬دس ‪ٔQT‬یش‪٘ٛ‬یٓ اػشفبد‪ ٜ‬و‪ٙ‬یٓ و‪ ٝ‬ؿبُٔ وذ ٘‪ٛ‬یؼی وٕشش ‪/‬‬
‫خش‪ٚ‬ػی ‪ ٚ‬عشف ‪ٞ‬بی ثیـشش ‪ ٚ‬دس ٘‪ٟ‬بیز اػشفبد‪ ٜ‬دس دّشفشْ ‪ٞ‬بی ٔ‪ٛ‬سد ٘ظش‪...‬‬

‫كبَ ٔٗ ِیؼشی اص آٔ‪ٛ‬صؽ ‪ٞ‬ب س‪ ٚ‬دس ٘ظش داسْ و‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش ؿش‪ٚ‬ع ث‪ ٝ‬آٔ‪ٛ‬صؽ خ‪ٛ‬ا‪ ٓٞ‬وشد‪.‬‬

‫ٔمذٔبر ‪ٔ ٚ‬ؼشفی ‪ Qt‬ثشای ؿش‪ٚ‬ع وبس‬

‫سا‪ٕٙٞ‬بیی ثشای داّ٘‪ٛ‬د ٔ‪ٙ‬بػجششیٗ ٘ؼخ‪ ٝ‬اص‪Qt‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب ‪ٞ Slot ٚ Signal‬ب‬

‫ٔؼشفی ‪ ٚ‬وبس ثب ٕ٘بیؾ‪Windows‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب الی‪ٞ ٝ‬ب صثب٘‪ٞ ٝ‬ب ‪ ٚ‬ثذ٘‪ٞ ٝ‬بی دس عشاكی‬

‫ٔؼشفی ‪ ٚ‬وبس ثب لبثّیز ‪ٞ‬بی ‪ CSS ٚ HTML‬دس عشاكی‬

‫ٔؼشفی ‪ ٚ‬وبس ثب الی‪ٞ ٝ‬بی افمی ‪ ٚ‬ػٕ‪ٛ‬دی‬

‫ٔؼشفی ‪ ٚ‬وبس ثب الی‪ٞ ٝ‬بی ‪ Grid‬دس عشاكی فشْ‬

‫ٔؼشفی ‪ ٚ‬وبس ثب ػذا و‪ٙٙ‬ذ‪ٞ ٜ‬ب‪Splitter‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب دایشوش‪ٛ‬سی ‪ٞ‬ب‬

‫ٔؼشفی ‪ ٚ‬وبس ثب فبیُ ‪ٞ‬ب ‪ /‬خ‪ٛ‬ا٘ذٖ ‪ٛ٘ ٚ‬ؿشٗ دس آٖ ‪ٞ‬ب‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪|Page4‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب ثشؿؼت ‪ٞ‬ب‪Label‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب دوٕ‪ٞ ٝ‬ب‪Button‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب و‪ٙ‬ششَ ‪ٚ‬س‪ٚ‬دی‪LineEdit‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب ؿه ثبوغ‪CheckBox‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب‪RadioButton‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب‪Combobox/‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب ِیؼز ‪ٞ‬ب‪ListWidget/‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب ِیؼز ‪ٞ‬بی دسخشی‪TreeWidge/‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب ‪ٞ Action‬ب‬

‫ٔؼشفی ‪ ٚ‬وبس ثب ‪ٞ Progress ٚ Slider‬ب‬

‫ٔؼشفی ‪ ٚ‬وبس ثب ‪ Statusbar‬دس فشْ‬

‫ٔؼشفی ‪ ٚ‬وبس ثب‪MessageBox‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب‪Timer‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب ‪ٞ Thread‬ب‬

‫ٔؼشفی ‪ ٚ‬وبس ثب‪Map‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب‪Hash‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب ‪ String /‬سؿش‪ٞ ٝ‬ب‬

‫ٔؼشفی ‪ ٚ‬وبس ثب اٍِ‪ٛ‬سیشٓ ‪ٞ‬بی ٔشست ػبصی‬

‫ٔؼشفی ‪ ٚ‬وبس ثب اٍِ‪ٛ‬سیشٓ ‪ٞ‬بی وذی و‪ٙٙ‬ذ‪ٜ‬‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪|Page5‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب اٍِ‪ٛ‬سیشٓ ‪ٞ‬بی س‪ٙ‬ظیٓ و‪ٙٙ‬ذ‪ٜ‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب اٍِ‪ٛ‬سیشٓ ‪ٞ‬بی ػؼشؼ‪ٛ‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب ‪ٞ Tooltip‬ب ‪ٕٞ‬شا‪ ٜ‬ثب لبثّیز ‪ٞ‬بی ‪ٚ‬یظ‪ٜ‬‬

‫ٔؼشفی ‪ ٚ‬وبس ؿجى‪ / ٝ‬داّ٘‪ٛ‬د فبیُ ثش اػبع دش‪ٚ‬سىُ ‪ٞ‬بی ‪FTPٚ HTTP‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب ثبی‪ٙ‬شی ‪ ٚ‬ػشیبِیض وشدٖ آثؼىز ‪ٞ‬ب‬

‫ٔؼشفی ‪ ٚ‬وبس ثب ‪ٞ TextStream‬ب‬

‫ٔمبیؼ‪ ٝ‬ا٘‪ٛ‬اع كبِز ‪ٞ‬بی وبٔذبیُ دس‪Qt‬‬

‫٘ل‪ ٜٛ‬افض‪ٚ‬دٖ دیٍش وشبثخب٘‪ٞ ٝ‬بی ‪ C++‬دس ٔلیظ ‪ ٚ Qt Creator‬اػشفبد‪ٕٞ ٜ‬شا‪ ٜ‬ثب وشبثخب٘‪Qtٝ‬‬

‫‪ ٚ‬اٌ‪ ٝ‬خذا ثخ‪ٛ‬اد ثؼذ اص ث‪ ٝ‬اسٕبْ سػ‪٘ٛ‬ذٖ ایٗ ٔ‪ٛ‬اسد ٔیشیٓ س‪ٚ‬ی ٔجبكض كشف‪ ٝ‬ای سش سب اعالػبر ػبٔغ سشی دس‬
‫ایٗ ساثغ‪ ٝ‬دس اخشیبس د‪ٚ‬ػشبٖ لشاس ثذیٓ‪.‬‬

‫٘ؼخ‪ Qt ٝ‬ثشای ایٗ آٔ‪ٛ‬صؽ خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د ‪ : Qt 5.2‬ثب وبٔذبیّش ‪MSVC2012.ٚ MinGW‬‬

‫‪ٕٞ‬ـ‪ٙ‬یٗ آٔ‪ٛ‬صؽ ‪ٞ‬بی الصْ ثشای اسسجبط ثشلشاس وشدٖ د‪ IDE ٚ‬لذسسٕ‪ٙ‬ذ ‪ C++‬یؼ‪ٙ‬ی ‪ٚ VS2012 ٚ Qt‬‬
‫‪ 2013‬س‪ ٚ‬ا٘ـباهلل آٔ‪ٛ‬صؽ خ‪ٛ‬ا‪ ٓٞ‬داد‪.‬‬

‫سیستن عاهل هٌاسة ‪ :‬لیٌَکس ‪ٍ ٍ Ubuntu‬یٌذٍز ‪8 ٍ 7‬‬

‫خة هرحلِ ‪ٔ : 1‬مذٔبر ‪ٔ ٚ‬ؼشفی ‪ Qt‬ثشای ؿش‪ٚ‬ع وبس‪:‬‬

‫اتتذا الزهِ تَضیحاتی در راتطِ تا ایٌکِ ‪ QT‬چیِ ٍ چرا تایذ ازش استفادُ کٌین رٍ هیذم‪:‬‬

‫‪ٕٞ‬ب٘غ‪ٛ‬س و‪ٔ ٝ‬ی دا٘یذ أش‪ٚ‬ص‪ ٜ‬س‪ٛ‬ػؼ‪٘ ٝ‬شْ افضاس ‪ ٚ‬ث‪ ٝ‬س‪ٚ‬ص سػب٘ی ‪ٞ‬بی آٖ دس ا٘‪ٛ‬اع دّشفشْ ‪ٞ‬ب اص لجیُ ‪Linux ,‬‬
‫‪ٕٞ ٚ Windows , Mac OS X‬ـ‪ٙ‬یٗ دّشفشْ ‪ٞ‬بی ٔ‪ٛ‬ثبیّی ‪ ٚ‬سجّشی اص لجیُ ‪Andoird , IOS ,‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪|Page6‬‬

‫‪ ... ٚ Backberry‬ثب ػشػز ثؼیبس صیبدی د٘جبَ ٔی ؿ‪ٛ‬د ؛ ‪ٕٞ‬ـ‪ٙ‬یٗ آسص‪ٚ‬ی اوظش ثش٘بٔ‪ٛ٘ ٝ‬یؼبٖ ایٗ اػز و‪ٝ‬‬
‫یه صثبٖ ‪ٚ‬یظ‪ ٜ‬ثب سٕبٔی لبثّیز ‪ٞ‬ب ‪ٕٟٔ ٚ‬شش اص ‪ ٕٝٞ‬دـشیجب٘ی اص ‪ٚ Objective Oriented‬‬
‫‪ Performance‬ثبال س‪ٕٞ ٚ‬شا‪ ٜ‬ثب یه ‪ ٕٝٞIDE‬وبس‪ ٚ ٜ‬ػزاة دس اخشیبس داؿش‪ ٝ‬ثبؿ‪ٙ‬ذ و‪ ٝ‬دس ایٗ‬
‫ك‪ٛ‬سر ث‪ ٝ‬ػبی سؼشث‪ ٝ‬وشدٖ سٕبٔی ٔلیظ ‪ٞ‬بی ثش٘بٔ‪ٛ٘ ٝ‬یؼی دس ایٗ صٔی‪ٞ ٝٙ‬ب دیـ‪ٟٙ‬بد ٔیى‪ ٓٙ‬خیّی سا‪ ٜ‬د‪ٚ‬سی‬
‫٘ش‪ٚ‬یذ صیشا ثب اػشفبد‪ ٜ‬اص ٔلیظ ثش٘بٔ‪ٛ٘ ٝ‬یؼی ‪ Qt‬و‪ ٝ‬دـشـٓ ی‪ ٝ‬صثبٖ غ‪ِٛ‬ی ٔظُ ‪ٚ C++‬اػشبد‪ ٜ‬سمشیجب ‪ٕٝٞ‬‬
‫آسص‪ٞٚ‬بی ؿٕب دس ثش٘بٔ‪ٛ٘ ٝ‬یؼی فشا‪ٔ ٓٞ‬ی ؿ‪ٛ‬د‪.‬‬

‫دس ساثغ‪ ٝ‬ثب س‪ٛ‬ا٘بیی ‪ٞ‬ب ‪ ٚ‬لذسر صثبٖ ‪ C++‬آؿ‪ٙ‬ب ‪ٞ‬ؼشیذ ای‪ٙ‬ى‪ ٝ‬یه صثبٖ ٔبدس ‪$‬دبی‪ #ٝ‬اػز ‪ ٚ‬خ‪ٛ‬د ٔؼشمیٓ ثذ‪ٖٚ‬‬
‫ٔشىی ‪ٚ ٚ‬اثؼش‪ ٝ‬ث‪ٛ‬دٖ ی‪ ٝ‬ث‪ ٝ‬ػیؼشٓ ػبُٔ یب صثبٖ ثش٘بٔ‪ٛ٘ ٝ‬یؼی دیٍشی وبس خ‪ٛ‬دؽ س‪ ٚ‬ا٘ؼبْ ٔی د‪ٞ‬ذ ‪ ,‬دس ایٗ ٔیبٖ‬
‫عی ایٗ ػبَ ‪ٞ‬ب و‪ ٝ‬صثبٖ ‪ٞ‬بی ثش٘بٔ‪ٛ٘ ٝ‬یؼی دیـشفش‪ ٝ‬ثؼیبس صیبدی س‪ ٚ‬داؿش‪ٙ‬ذ ع‪ٛ‬سی و‪ ٝ‬ثش٘بٔ‪ٛ٘ ٝ‬یؼبٖ ث‪ ٝ‬ساكشی‬
‫ٔیش‪ٛ‬ا٘‪ٙ‬ذ س‪ٛ‬ػظ صثبٖ ‪ٞ‬بی ٔظُ ‪ ... ٚ C#‬ثش٘بٔ‪ٞ ٝ‬بی ٔ‪ٛ‬سد ٘ظش خ‪ٛ‬د سا دس وٕششیٗ صٔبٖ ثب ٔلیظ ‪ٌ ٚ‬شافیه لبثُ‬
‫س‪ٛ‬ػ‪ٟ‬ی س‪ِٛ‬یذ و‪ٙٙ‬ذ و‪ ٝ‬سٕبٔی ایٗ ٔ‪ٛ‬اسد ثبػض ؿذ‪ ٜ‬ث‪ٛ‬د صثبٖ ‪ C++‬اص ٘ظش ثش٘بٔ‪ٛ٘ ٝ‬یؼبٖ ثی ك‪ٛ‬كّ‪ ٝ‬یه صثبٖ‬
‫ػخز ‪ ٚ‬خ‪ٛ‬اػشبس كبَ ك‪ٛ‬كّ‪ ٝ‬دسػز كؼبثی اص عشف ثش٘بٔ‪ٛ٘ ٝ‬یغ ٔی ثبؿذ ث‪ٙ‬ب ثش ایٗ دالیُ ػخشی ‪ٕٞ ٚ‬ـ‪ٙ‬یٗ‬
‫ػبد‪٘ ٜ‬ج‪ٛ‬دٖ عشاكی س‪ٛ‬ػظ ایٗ صثبٖ ؿبیذ دِیّی ثشای وٓ سً٘ ؿذٖ ایٗ صثبٖ دس عشاكی ‪ ٚ‬س‪ِٛ‬یذ فشْ ‪ٞ‬ب ‪ٚ‬‬
‫خش‪ٚ‬ػی ‪ٞ‬بی ل‪ٛ‬ی ث‪ٛ‬د و‪ ٝ‬رسب ‪ٞ‬ش وؼی و‪ ٝ‬ثب ایٗ صثبٖ ‪ٚ‬الؼب وبس وشد‪ٔ ٜ‬یذا٘ذ و‪ ٝ‬ؿ‪ٙ‬یٗ ٘یؼز ! صیشا ث‪ ٝ‬س‪ٟٙ‬بیی‬
‫سىٕیُ ‪ ٚ‬ػبٔغ اػز فمظ ‪ٚ‬لز ‪ ٚ‬وذ ٘‪ٛ‬یؼی ثیـششی ثشای س‪ِٛ‬یذ خش‪ٚ‬ػی ‪ٞ‬بی ٔـبث‪ ٝ‬دس صثبٖ ‪ٞ‬بی دیٍشی‬
‫‪ٕٞ‬ـ‪ C# ٖٛ‬سا داسد ؛ كبَ ؿىبس و‪ٙ‬یٓ ؟ آیب ثب ایٗ كبَ ثش٘بٔ‪ٛ٘ ٝ‬یؼی ثب ػشػز وٓ دس ایٗ صثبٖ خ‪ٛ‬ا‪ٞ‬بٖ‬
‫خ‪ٛ‬دؽ س‪ ٚ‬داس‪ ٜ‬؟‬

‫ػ‪ٛ‬اة ػ‪ٛ‬اَ س‪ ٚ‬ای‪ ٍٝ٘ٛٙ‬دبػخ ٔیذْ ‪ :‬ا‪ٚ‬ال ٘یبصی ٘یؼز ث‪ ٝ‬وذ ٘‪ٛ‬یؼی صیبد ‪ ٚ‬ػخز ؿ‪ٕ٘ٛٞ ٖٛ‬غ‪ٛ‬س و‪ ٝ‬صثبٖ ‪ٞ‬بی‬
‫دیٍ‪ ٝ‬دس عی ایٗ ػبِ‪ٟ‬ب دیـشفز وشد‪ ٜ‬صثبٖ ‪ ٓٞ C++‬خبِی اص دیـشفز ٘ج‪ٛ‬د‪٘ ٚ ٜ‬ؼجز ث‪ ٝ‬لجُ ثؼیبس س‪ٛ‬إ٘‪ٙ‬ذ ‪ٚ‬‬
‫خ‪ٛ‬د وفبػز ‪ ,‬دس ایٗ ٔیبٖ ٘‪ ٝ‬س‪ٟٙ‬ب دس ساثغ‪ ٝ‬ثب لبثّیز ‪ٞ‬ب ٔ‪ٛ‬اسد صیبدی دس ٘ؼخ‪ٞ ٝ‬بی ‪ 11‬ایٗ صثبٖ سفغ ‪ ٚ‬س‪ٛ‬ػؼ‪ٝ‬‬
‫داد‪ ٜ‬ؿذ‪ ٜ‬اػز دس و‪ٙ‬بس ایٗ ‪ IDE‬ثؼیبس ػزاثی و‪ ٝ‬ث‪ ٝ‬داد ثش٘بٔ‪ٛ٘ ٝ‬یؼبٖ ‪ٔ ٚ‬ـشبلبٖ ایٗ صثبٖ ا‪ٔٚ‬ذ‪ ٜ‬ث‪٘ ٝ‬بْ ! ‪ Qt‬ثب‬
‫آ‪ٚ‬ای ‪$‬وی ی‪ٛ‬ر‪ #‬یب وی‪ٛ‬ر؛‬

‫‪ ٕٝٞ‬ؿیض ػبد‪ ٜ‬سش ‪ ,‬س‪ٚ‬ا٘شش ‪ ٚ‬ػزاثشش ؿذ‪ ٚ ٜ‬ػشػز ثش٘بٔ‪ٛ٘ ٝ‬یؼی ‪ ٚ‬عشاكی فشْ ‪ٞ‬ب ‪ ٚ‬لبِت ث‪ٙ‬ذی ‪ٞ‬بی دیـشفش‪ ٝ‬و‪ٝ‬‬
‫لجال ٘یبص ث‪ ٝ‬وذ ٘‪ٛ‬یؼی ‪ٞ‬بی ثؼیبس صیبدی داؿز ثؼیبس ث‪ٟ‬شش اص لجُ ؿذ‪ ٜ‬ث‪ ٝ‬ع‪ٛ‬سی و‪ ٝ‬ث‪ ٝ‬ػشئز ٔیش‪ ٓ٘ٛ‬ثٍٓ ٔٗ‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪|Page7‬‬

‫خ‪ٛ‬دْ و‪ ٝ‬ثؼیبس ػخز دؼ‪ٙ‬ذ ‪ٞ‬ؼشٓ دس ٍ٘ب‪ ٜ‬ا‪ َٚ‬وبس ثب ‪ Qt‬س‪ ٚ‬دؼ‪ٙ‬ذیذْ ‪ ,‬ایٗ ٔلیظ ثش خالف ٔلیظ ‪ٞ‬بی ‪VS‬‬
‫ث‪ٞ ٝ‬یؾ ػ‪ٛٙ‬اٖ ػیبػز ا٘للبسی ث‪ٛ‬دٖ س‪٘ ٚ‬ذاسد ‪ ٚ‬فمظ ‪ٚ‬ی‪ٙ‬ذ‪ٚ‬ص ٘یؼز و‪ ٝ‬اص لذسسٕ‪ٙ‬ذسشیٗ ‪ IDE‬ایٗ د‪ٚ‬س‪ ٜ‬صٔ‪ٝ٘ٛ‬‬
‫دـشیجب٘ی ٔیى‪ٙ‬ذ ثّى‪ ٝ‬ػیؼشٓ ػبُٔ ‪ٞ‬بی لذسسٕ‪ٙ‬ذ ی‪٘ٛ‬یىؼی ٔظُ ‪ Mac OS X ٚ Linux Ubuntu‬ایٗ ٔلیظ‬
‫ثش٘بٔ‪ٛ٘ ٝ‬یؼی خبسق اِؼبد‪ ٜ‬س‪ ٚ‬وبٔال دـشیجب٘ی ٔیى‪ ٚ ٗٙ‬ایٗ دس اثشذای وبس ث‪ ٝ‬س‪ٟٙ‬بیی اسصؿٕ‪ٙ‬ذ اػز‪.‬‬

‫اص لبثّیز ‪ٞ‬بیی و‪ٕ٘ ٝ‬یـ‪ ٝ‬اصؿ‪ ٖٛ‬ث‪ ٝ‬ایٗ ساكشی ؿـٓ د‪ٛ‬ؿی وشد ٔی س‪ٛ‬اٖ ث‪ ٝ‬لبثّیز ‪ Cross platform‬ث‪ٛ‬دٖ‬
‫ثش٘بٔ‪ٞ ٝ‬بی س‪ِٛ‬یذ ؿذ‪ ٜ‬س‪ٛ‬ػظ ‪ C++/Qt‬اؿبس‪ ٜ‬وشد و‪ ٝ‬ؿٕب ث‪ ٝ‬ساكشی ٔیش‪٘ٛ‬یذ خش‪ٚ‬ػی س‪ ٚ‬دس ػیؼشٓ ػبُٔ‬
‫ٔ‪ٛ‬سد ٘ظشس‪ ٖٛ‬دسیبفز ‪ ٚ‬وبٔذبیُ و‪ٙ‬یذ كشی ػیؼشٓ ػبُٔ ‪ٞ‬بیی ٔظُ ‪ Android ٚ IOS‬و‪ ٝ‬أش‪ٚ‬ص‪ ٜ‬ثش٘بٔ‪ٝ‬‬
‫٘‪ٛ‬یؼی ٔ‪ٛ‬ثبیُ ‪ ٓٞ‬یؼ‪ٛ‬سایی ثبصاسؽ ٌشٔ‪ٝ‬‬

‫قاتلیت ّا در طراحی ‪ :‬لبثّیز عشاكی ف‪ٛ‬ق اِؼبد‪ ٜ‬ثب ‪ٕٞ ٚ QML‬ـ‪ٙ‬یٗ دـشیجب٘ی اص ‪ HTML ٚ CSS‬یىی‬
‫دیٍ‪ ٝ‬اص ٔضایبی ‪ٞ Qt‬ؼشؾ و‪ٔ ٝ‬یش‪٘ٛ‬یذ ثش٘بٔش‪ ٖٛ‬س‪ ٚ‬ثششو‪٘ٛ‬یذ ٔظال فشم و‪ٙ‬یذ یه فشْ عشاكی ٔیى‪ٙ‬یذ دس كبِز‬
‫ػبدی خبِی اص ‪ ٚ style‬افىز ‪ٞ‬بی ‪ٚ‬یظ‪ٞ ٜ‬ؼز ثشای ایٗ وبس ٔیش‪٘ٛ‬یذ ثب اػشفبد‪ ٜ‬اص ‪CSS ٚ HTML‬ثش٘بٔش‪ٖٛ‬‬
‫س‪ ٚ‬ث‪ ٝ‬ع‪ٛ‬س ؿٍفز اٍ٘یضی عشاكی و‪ٙ‬یذ‪.‬‬

‫اػشفبد‪ ٜ‬اص لبثّیز ‪ٞ‬بی ‪ HTML‬یىی اص ث‪ٟ‬ششیٗ ‪ ٚ‬ػزاثششیٗ ٔ‪ٛ‬اسدی ٔیش‪ ٝ٘ٛ‬ثبؿ‪ ٝ‬و‪ ٝ‬دس ثش٘بٔ‪ٛ٘ ٝ‬یؼی‬
‫‪ Mobile ٚDesktop‬خیّی خیّی ػزاة خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د ‪ ٕٝٞ‬ایٗ لبثّیز ‪ٞ‬ب دػز ث‪ ٝ‬دػز ‪ٔ ٓٞ‬یذٖ سب ثش٘بٔ‪ٝ‬‬
‫٘‪ٛ‬یغ ػخشی ‪ٞ‬بی ‪ C++‬س‪ ٚ‬فشأ‪ٛ‬ؽ و‪ ٚ ٝٙ‬ثب ػالل‪ ٝ‬سٕبْ ثش٘بٔؾ س‪ ٚ‬عشاكی ‪ ٚ‬دس ٘‪ٟ‬بیز سی ‪ٞ‬ش دّشفشٔی و‪ٝ‬‬
‫د‪ٚ‬ػز داس‪ ٜ‬وبٔذبیُ و‪.ٝٙ‬‬

‫یِ چکیذُ کلی از تعریف ایي هحیط ‪ :‬دیٍ‪٘ ٝ‬یبصی ٘خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د ثشیٗ ػشاؽ ‪ Objective-C‬ثشای س‪ِٛ‬یذ‬
‫٘شْ افضاس ‪ٞ‬بی ‪ MAC OS X ٚ IOS‬یب ٘یبصی ٘یؼز ثشیذ ػشاؽ ‪ Java‬ثشای س‪ِٛ‬یذ ٘شْ افضاس ‪ٞ‬بی ‪Android‬‬
‫یب ٘یبصی ٘یؼز ثشیذ ػشاؽ صثبٖ ‪ٞ‬بی ثذثخشی ٔظُ ‪ VB‬یب ‪ C#‬ثشای س‪ِٛ‬یذ ثش٘بٔ‪ٞ ٝ‬بی ‪ٚ‬ی‪ٙ‬ذ‪ٚ‬صی ! ‪ ٚ‬دس ٘‪ٟ‬بیز‬
‫٘یبصی ٘یؼز فمظ ٔؼج‪ٛ‬س ثبؿیذ ثشای ك‪ٙ‬ؼز ػخز افضاس اص ‪ C++‬اػشفبد‪ ٜ‬و‪ٙ‬یذ ثّى‪ ٝ‬ثب داؿشٗ ػّٓ یه صثبٖ‬
‫لذسسٕ‪ٙ‬ذی ٔظُ ‪ٔ C++‬یش‪٘ٛ‬یذ ثب یه سیش ؿ‪ٙ‬ذیٗ ٘ـبٖ س‪ٕٞ ٚ‬ـیٗ ثض٘یذ و‪ ٝ‬خذا ثذا٘ذ و‪ ٝ‬ؿ‪ ٝ‬ؿ‪ٛ‬د!!!‬

‫یبدْ ٘ش‪ ٜ‬ثٍٓ و‪ٔ ٝ‬یش‪٘ٛ‬یذ عشاكی ‪ٚ‬ة ‪ ٓٞ‬داؿش‪ ٝ‬ثبؿیذ ‪ٞ‬بٔ‪ٙ‬ظ‪ٛ‬سْ اص ‪ ٕٝٞ‬وبس‪ ٜ‬ث‪ٛ‬دٖ یؼ‪ٙ‬ی ‪ٚ‬الؼب ‪ ٕٝٞ‬وبسػز‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪|Page8‬‬

‫دغ ؿذ یبد ٌیشی صثبٖ ‪ ٚC++‬آؿ‪ٙ‬بیی ثب ٔلیظ ‪Qt‬و‪ ٝ‬یه ٘‪ٛ‬ع فشیٓ ‪ٚ‬سن ‪ٚ‬یظ‪ ٜ‬ای ثشای ایٗ صثبٖ اػز‬
‫ثش٘بٔش‪ ٖٛ‬س‪ ٚ‬ثششو‪٘ٛ‬یذ كبال ثب دس ٘ظش داؿشٗ ای‪ٙ‬ى‪ ٝ‬اعالػبر ‪ HTML , CSS , QML , JavaScript‬س‪ٚ‬‬
‫‪ ٓٞ‬داسیذ دیٍ‪ ٝ‬ؿ‪ ٝ‬ث‪ٟ‬شش ‪ٞ‬شع‪ٛ‬س و‪ٟٔ ٝ‬شث‪٘ٛ‬ش‪ٔ ٖٛ‬ی خ‪ٛ‬اد ٔب٘‪ٛ‬س ثذیٗ و‪ ٝ‬دس ٘‪ٟ‬بیز ٔ‪ٙ‬ؼش ث‪ ٝ‬یه خش‪ٚ‬ػی ٔمبثُ‬
‫ٔیـ‪ٛ‬د ‪ :‬لذسر ‪ ,‬ػشػز ‪ ,‬ویفیز ‪ ,‬اسسجبط ٔؼشمیٓ ثب ػخز افضاس ! ‪ ٚ‬دس و‪ٙ‬بس ایٗ ٔلیظ ثب ویفیز ثبال ‪ٕٞ ٚ‬ـ‪ٙ‬یٗ‬
‫عشاكی ٔذسٖ ‪ ٕٝٞ ٚ ٕٝٞ‬دس خش‪ٚ‬ػی ٘‪ٟ‬بیی ثش٘بٔ‪ ٝ‬ؿٕب كغ خ‪ٛ‬ا‪ٞ‬ذ ؿذ‪.‬‬

‫هرحلِ ‪ : 2‬سا‪ٕٙٞ‬بیی ثشای داّ٘‪ٛ‬د ٔ‪ٙ‬بػجششیٗ ٘ؼخ‪ ٝ‬اص‪Qt‬‬

‫قثل از ضرٍع کار تْترُ تَضیحاتی در راتطِ تا ایٌکِ کذام ٍیرایص از ‪ Qt‬رٍ تایذ داًلَد کٌیذ‬
‫رٍ تذم تِ صَرت زیر‪:‬‬

‫٘ىش‪: ٝ‬ثشای اػشفبد‪ ٜ‬اص ‪ٔ Qt‬ب د‪ ٚ‬س‪ٚ‬ؽ داسیٓ و‪ ٝ‬دس ایٗ د‪ ٚ‬س‪ٚ‬ؽ یىیؾ سایٍبٖ ‪ٞ‬ؼز ‪ ٚ‬یىیؾ ؿبُٔ ‪ٞ‬ضی‪ٝٙ‬‬
‫ای دس ساثغ‪ ٝ‬ثب ِیؼب٘غ ‪ٞ IDE‬ؼشؾ ‪ ,‬دس ساثغ‪ ٝ‬ثب ایٗ د‪ٛٔ ٚ‬سد ثبیذ ثٍٓ ‪ٞ‬یؾ سفب‪ٚ‬سی آٖ ؿ‪ٙ‬ب٘ی ثیٗ ایٗ د‪٘ ٚ‬ؼخ‪ٝ‬‬
‫د‪ِٛ‬ی ‪ ٚ‬سایٍبٖ ‪ٚ‬ػ‪ٛ‬د ٘ذاس‪ ٜ‬ث‪ ٝ‬ػض ٘‪ٛ‬ع وبٔذبیُ ا‪ ٖٚ‬و‪ ٝ‬دس ٘ؼخ‪ ٝ‬د‪ِٛ‬ی ؿٕب ٔیش‪٘ٛ‬یذ خش‪ٚ‬ػی ‪ static‬ثٍیشیذ ‪ٚ‬‬
‫س‪ٟٙ‬ب دس ك‪ٛ‬سر دشداخز ‪ٞ‬ضی‪ٔ ٝٙ‬یش‪٘ٛ‬یذ ثش٘بٔش‪ ٖٛ‬دس كبِز ‪ Static‬س‪ ٚ‬ث‪ ٝ‬فش‪ٚ‬ؽ ثشػ‪٘ٛ‬یذ ‪ ,‬فؼال ٔیشیٓ ػشاؽ‬
‫٘ؼخ‪ ٝ‬سلز ٔؼ‪ٛ‬ص ‪ LGPL‬و‪ ٝ‬ث‪ ٝ‬ؿٕب اػبص‪ ٜ‬وبٔذبیُ ث‪ ٝ‬ك‪ٛ‬سر دای‪ٙ‬بٔیىی س‪ٔ ٚ‬یذ‪.ٜ‬‬

‫حاال از کجا داًلَد کٌین ٍ کذٍم ًسخِ رٍ تایذ داًلَد کٌین تِ صَرت زیر ّستص‪:‬‬

‫ٔب دس ثخؾ داّ٘‪ٛ‬د ػبیز سػٕی ‪ Qt‬ا٘‪ٛ‬اع ٔخشّفی اص ‪ٚ‬یشایؾ ‪ٞ‬بی ا‪ ٖٚ‬سا ٔیجی‪ٙ‬یٓ و‪ ٝ‬دس ِی‪ٙ‬ه سػٕی ٔ‪ٛ‬ػ‪ٛ‬د‬
‫‪ٞ‬ؼز‪:‬‬

‫‪http://qt-project.org/downloads‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪|Page9‬‬

‫لجُ اص ‪ ٕٝٞ‬ؿیض ثبیذ ػیؼشٓ ػبّٔی و‪ ٝ‬ؿٕب س‪ٚ‬ی ا‪ ٖٚ‬وبس ٔیى‪ٙ‬یذ س‪ٔ ٚ‬ـخق و‪ٙ‬یذ ‪ٞ‬شؿ‪ٙ‬ذ االٖ ‪ 99‬دسكذ س‪ٚ‬ی‬
‫‪ٚ‬ی‪ٙ‬ذ‪ٚ‬ص وبس ٔیى‪ٙ‬یذ ‪ِٚ‬ی ‪ٚ‬لشی دیٍ‪ ٝ‬اػٓ ‪ٔC++‬یبد ‪ٚ‬ػظ س‪ٛ‬س‪ ٚ‬خذا ‪ِٚ‬ؾ و‪ٙ‬یذ ایٗ ػیؼشٓ ػبُٔ س‪ ٚ‬ثشیذ س‪ٚ‬ی‬
‫‪ Linux‬یىٓ ث‪ ٝ‬خ‪ٛ‬دس‪ ٖٛ‬سغییش سل‪ٛ‬الر ثذیٗ ‪ ٓٞ‬اص ِلبػ س‪ٚ‬كی سبطیش داس‪ ٓٞ ٜ‬سؼشث‪ٔ ٝ‬یى‪ٙ‬یذ ‪ ٚ‬ایٗ خ‪ٛ‬ث‪.ٝ‬‬

‫ث‪ ٝ‬ع‪ٛ‬س وّی ٔؼ‪ٙ‬ی ػ‪ٛٙ‬اٖ ِی‪ٙ‬ه ‪ٞ‬بی لبثُ دسیبفز ث‪ ٝ‬ك‪ٛ‬سر ٔمبثُ صیش ٔؼ‪ٙ‬ی ٔیـ‪ٛ‬د‪:‬‬

‫ٔظال )‪ : Qt 5.3.0 for Windows 64-bit (VS 2013, OpenGL, 589 MB‬یؼ‪ٙ‬ی ؿی ؟‬

‫خت ‪ Qt 5.3.0‬و‪٘ ٝ‬بْ ‪٘ ٚ‬ؼخ‪ ٝ‬ثش٘بٔ‪ٞ ٝ‬ؼز ‪ٛ٘ ٖٕٛٞ for Windows‬ع ػیؼشٓ ػبُٔ ‪ٞ‬ؼز و‪ ٝ‬س‪ٚ‬ؽ‬
‫ثبیذ ٘لت و‪ٙ‬یذ ‪ٔ 64-bit‬ؼٕبسی ػیؼشٓ ػبُٔ ٘لت ؿذ‪ٞ ٜ‬ؼشؾ دلز و‪ٙ‬یذ ؿبیذ ‪ CPU‬ؿٕب ‪ 64‬ثیشی ثبؿ‪ٝ‬‬
‫‪ِٚ‬ی اٌ‪٘ ٝ‬ؼخ‪32 ٝ‬ثیشی ػیؼشٓ ػبُٔ س‪٘ ٚ‬لت وشدیٗ ثبیذ دس ایٗ كبِز ‪ 32‬ثیشی ‪ Qt‬س‪ ٚ‬دسیبفز ‪٘ ٚ‬لت و‪ٙ‬یذ‬
‫‪ ٚ! VS 2013‬یب ‪ٛ٘ MinGW 4.8‬ع وبٔذبیّش ‪ٕٞ‬شا‪ ٜ‬ثب ‪ٞ Qt‬ؼشؾ ‪ٛٔ ٚ‬سد آخش اٌ‪ OpenGL ٝ‬س‪ٚ‬‬
‫٘ؼخ‪ ٝ‬ؿٕب ثبؿ‪ ٝ‬یؼ‪ٙ‬ی ‪ Qt‬ؿٕب اص ‪ ٓٞ OpenGL‬دـشیجب٘ی ٔیى‪.ٝٙ‬‬

‫كبال ثشیٓ ػش اكُ ٔغّت‪:‬‬

‫دس ك‪ٛ‬سسی و‪ ٝ‬اص سیستن عاهل ٍیٌذٍز اػشفبد‪ٔ ٜ‬یى‪ٙ‬یذ ٘ؼخ‪ٞ ٝ‬بی ‪ Qt 5.3.0 for Windows‬س‪ٚ‬‬
‫ثبیذ دسیبفز ‪٘ ٚ‬لت و‪ٙ‬یذ‪.‬‬

‫دس ك‪ٛ‬سسی و‪ ٝ‬اص سیستن عاهل لیٌَکس )‪ (Ubuntu‬اػشفبد‪ٔ ٜ‬یى‪ٙ‬یذ ٘ؼخ‪ٞ ٝ‬بی ‪Qt 5.3.0 for‬‬
‫‪Linux‬س‪ ٚ‬ثبیذ دسیبفز ‪٘ ٚ‬لت و‪ٙ‬یذ‪.‬‬

‫دس ك‪ٛ‬سسی و‪ ٝ‬اص سیستن عاهل هکیٌتاش )‪ (Mac OS X‬اػشفبد‪ٔ ٜ‬یى‪ٙ‬یذ ٘ؼخ‪ٞ ٝ‬بی ‪Qt 5.3.0 for‬‬
‫‪Mac‬س‪ ٚ‬ثبیذ دسیبفز ‪٘ ٚ‬لت و‪ٙ‬یذ‪.‬‬

‫كبال س‪ٛ‬ضیلبر دس ثبس‪ ٜ‬ػضئیبر ٘ؼخ‪ٞ ٝ‬ب ثشای داّ٘‪ٛ‬د ‪٘ :‬ؼخ‪ٞ ٝ‬بی ‪ 32‬ثیشی ‪ٔ ٖٕٛٞ‬ؼٕبسی ‪ٞ x86‬ؼش‪ٙ‬ذ ‪٘ ٚ‬ؼخ‪ٝ‬‬
‫‪ٞ‬بی ‪ 64‬ثیشی ‪ٕٟٔ ٖٕٛٞ ٓٞ‬بسی ‪ٞ x64‬ؼش‪ٙ‬ذ‪.‬‬

‫دس كبِز ػبدی ؿٕب ٔیش‪٘ٛ‬یذ س‪ٚ‬ی ػیؼشٓ ػبُٔ ‪ٞ‬بی دػىشبدی وبس و‪ٙ‬یذ ‪ ٚ‬ثش٘بٔش‪ ٖٛ‬س‪ ٚ‬وبٔذبیُ و‪ٙ‬یذ ‪ِٚ‬ی اٌ‪٘ ٝ‬یبص‬
‫ث‪ ٝ‬وبٔذبیُ ثش٘بٔ‪ ٝ‬س‪ٚ‬ی ػیؼشٓ ػبُٔ ‪ٞ‬بی ‪Android ٚ IOS‬داسیذ ثبیذ ٘ؼخ‪ٞ ٝ‬بی صیش س‪ ٚ‬داّ٘‪ٛ‬د و‪ٙ‬یذ ‪:‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 10‬‬

‫ثشای ‪ٔ Android‬یش‪٘ٛ‬یذ اص ٘ؼخ‪ Qt 5.3.0 for Android Windows ٝ‬ثشای اػشفبد‪ ٜ‬دس‬
‫ٔلیظ ٍیٌذٍز داّ٘‪ٛ‬دؽ و‪ٙ‬یذ‪.‬‬

‫ثشای ‪ٔ Android‬یش‪٘ٛ‬یذ اص ٘ؼخ‪ Qt 5.3.0 for Android for Linux ٝ‬ثشای اػشفبد‪ ٜ‬دس‬
‫ٔلیظ لیٌَکس داّ٘‪ٛ‬دؽ و‪ٙ‬یذ‪.‬‬

‫ثشای ‪IOS‬كشٕب ثبیذ ػیؼشٓ ػبُٔ ٔه داؿش‪ ٝ‬ثبؿیذ ‪٘ ٚ‬ؼخ‪ Qt 5.3.0 for iOS ٝ‬س‪ ٚ‬داّ٘‪ٛ‬د و‪ٙ‬یذ ‪ٕٞ ,‬ـ‪ٙ‬یٗ‬
‫ٔیش‪٘ٛ‬یذ ‪ Qt 5.3.0 for Android‬س‪ ٓٞ ٚ‬ثشای وبٔذبیُ ثشای ا٘ذس‪ٚ‬یذ دس ٔلیظ ٔه داّ٘‪ٛ‬د و‪ٙ‬یذ ‪ ٚ‬یب ‪ٞ‬ش‬
‫د‪ٚ‬ی‪ ٝ‬ای‪ٟٙ‬بس‪ٔ ٚ‬یش‪٘ٛ‬یذ ث‪ ٝ‬ك‪ٛ‬سر ‪Qt 5.3.0 for Android and iOS‬دسیبفز و‪ٙ‬یذ‪.‬‬

‫یه ٘ىش‪ : ٝ‬ؿ‪ ٖٛ‬ػیؼشٓ ػبُٔ ‪ Mac ٚ IOS‬ثذسش اص ٔبیىش‪ٚ‬ػبفز ا٘للبس عّت ‪ٞ‬ؼش‪ٙ‬ذ ث‪ٕٞ ٝ‬یٗ خبعش ثشای‬
‫وبٔذبیُ ثش٘بٔ‪ٞ ٝ‬بی ‪ Mac ٚ IOS‬كشٕب ثبیذ ػیؼشٓ ػبُٔ ٔه داؿش‪ ٝ‬ثبؿیذ سب ثش‪٘ٛ‬یذ ثش٘بٔ‪ٞ ٝ‬بی ٔشث‪ٛ‬ط ث‪ٝ‬‬
‫‪Apple‬س‪ ٚ‬وبٔذبیُ و‪ٙ‬یذ‪.‬‬

‫س‪ٛ‬ػ‪ : ٝ‬الصْ ٘یؼز ؿٕب ثشای ‪ٞ‬ش وذاْ اص دّشفشْ ‪ٞ‬ب د‪ٚ‬ثبس‪ٛ٘ ٜ‬یؼی ‪ ٚ‬وذ ٘‪ٛ‬یؼی ٔؼذد ا٘ؼبْ ثذیٗ خیبِش‪ ٖٛ‬ساكز‬
‫ؿٕب ٔیش‪٘ٛ‬یذ ثشای ؿش‪ٚ‬ػجشای ‪ٚ‬ی‪ٙ‬ذ‪ٚ‬ص یب ِی‪ٛٙ‬وغ ی‪٘ ٝ‬ؼخ‪ٛٔ ٝ‬سد ٘ظش س‪ ٚ‬دسیبفز و‪ٙ‬یذ ‪ ٚ‬ثش٘بٔش‪ ٖٛ‬س‪ ٚ‬ث‪ٛٙ‬یؼیذ دس‬
‫٘‪ٟ‬بیز و‪ ٝ‬دیذیٗ ٘یبص ‪ٞ‬ؼز س‪ٚ‬ی ػیؼشٓ ‪ٞ‬بی ٔظُ ‪ MAC ٚ IOS‬یب ‪ Android‬وبٔذبیُ ‪ ٚ‬آصٔبیؾ و‪ٙ‬یذ‬
‫ا‪ٛ٘ٚ‬لز ث‪ٟ‬شش‪٘ ٜ‬ؼخ‪ٔ ٝ‬شث‪ٛ‬ع‪ ٝ‬س‪ ٚ‬دسیبفز ‪ ٚ‬دش‪ٚ‬ط‪ ٜ‬خ‪ٛ‬دس‪ ٖٛ‬س‪ ٚ‬ث‪ٚ ٝ‬ػیّ‪٘ ٝ‬ؼخ‪ٛٔ ٝ‬سد ٘ظشس‪ ٚ Import ٖٛ‬وبٔذبیُ‬
‫ٕ٘بییذ‪.‬‬

‫كبال دس ایٗ آٔ‪ٛ‬صؽ ٔٗ للذ داسْ اص ٘ؼخ‪ٞ ٝ‬بی ‪ٚ‬ی‪ٙ‬ذ‪ٚ‬صی اػشفبد‪ ٜ‬و‪ ٓٙ‬سب ساكز سش ثش‪٘ٛ‬یذ اصؽ اػشفبد‪ٜ‬‬
‫و‪ٙ‬یذ‪$.‬دس ساثغ‪ ٝ‬ثب ٘لجؾ دس ‪ٚ‬ی‪ٙ‬ذ‪ٚ‬ص س‪ٛ‬ضیلبسی ٕ٘یذْ ؿ‪ ٖٛ‬ساكش‪ِٚ ٝ‬ی ثشای ِی‪ٛٙ‬وغ ثؼذ اص اسٕبْ آٔ‪ٛ‬صؽ ‪ٞ‬ب‬
‫دػش‪ٛ‬سار ‪ ٚ‬ػّٕیبر الصْ س‪ ٚ‬خ‪ٛ‬ا‪ٌ ٓٞ‬فز و‪ ٝ‬ؿغ‪ٛ‬س ‪ٞ‬ؼش‪ٙ‬ذ(‬

‫خت ثشای ؿش‪ٚ‬ع ٘ؼخ‪Qt 5.3.1 for Windows 32-bit (MinGW 4.8.2, OpenGL, 734 MB) ٝ‬‬

‫یب ٔیش‪٘ٛ‬یذ ایٗ س‪ ٚ‬داّ٘‪ٛ‬د و‪ٙ‬یذ)‪Qt 5.3.1 for Windows 32-bit (VS 2013, 626 MB‬‬

‫فمظ اٌ‪٘ ٝ‬ؼخ‪ VS2010 ٝ‬یب ‪ ٚ VS2012‬یب ‪ 2013‬س‪ ٚ‬داّ٘‪ٛ‬د ٔیى‪ٙ‬یذ كشٕب ثبیذ ‪ٔ Visual Studio‬شث‪ٛ‬ط ث‪ٝ‬‬
‫ا‪٘ ٖٚ‬ؼخ‪ ٝ‬یب ‪ٞ SDK‬بی ٔشث‪ٛ‬ع‪ ٝ‬س‪ٚ‬ی ػیؼشٕش‪٘ ٖٛ‬لت ثبؿ‪.ٝ‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 11‬‬

‫ٔٗ اص وبٔذبیّش ‪ MinGW‬اػشفبد‪ٔ ٜ‬یى‪ٙ‬یٓ راسب ٔظُ ‪ VS‬خیّی دش دسدػش ٘یؼز ثشا ‪ٕٞ‬یٗ!‬

‫دسساثغ‪ ٝ‬ثب ِی‪ٛٙ‬وغ ‪ٔ ٚ‬خل‪ٛ‬كب ‪ ٓٞ Ubuntu‬ث‪ ٝ‬س‪ٚ‬ؽ صیش ػُٕ و‪ٙ‬یذ ‪:‬ثش فشم ای‪ٙ‬ى‪ ٝ‬فبیُ ‪qt-‬‬
‫‪opensource-linux-x64-5.3.0.run‬س‪ ٚ‬داّ٘‪ٛ‬د وشد‪ ٜ‬ثبؿیذ اٌش لشاسؽ ثذیٗ دس د‪ٛ‬ؿ‪ٝ‬‬
‫‪ ٚDownloads‬دػش‪ٛ‬س صیش س‪ ٚ‬س‪ Terminal ٛ‬ث‪ٛٙ‬یؼیذ ‪:‬‬

‫‪cd /home/USER/Downloads‬‬

‫ث‪ ٝ‬ػبی ایٗ ‪ USER‬و‪ ٝ‬ای‪ٙ‬ؼب ی‪ٛ‬صس ٔٗ ‪ٞ‬ؼز ی‪ٛ‬صسی و‪ ٝ‬س‪ ٚ‬ػیؼشٓ خ‪ٛ‬دس‪ٞ ٖٛ‬ؼز س‪ ٚ‬ث‪ٛٙ‬یؼیذ اِجش‪ ٝ‬دلز و‪ٙ‬یذ‬
‫لجّؾ ثبیذ س‪ٛ‬ػظ ‪ su -‬س‪ٚ‬ر ؿذ‪ ٜ‬ثبؿیذ!‬

‫ثؼذ اص ای‪ٙ‬ىبس سـشیف ثجشیذ س‪ٚ‬ی فبیُ ‪ qt-opensource-linux-x64-5.3.0.run‬و‪ ٝ‬س‪ ٛ‬د‪ٛ‬ؿ‪ٝ‬‬


‫‪ٞDownloads‬ؼشؾ ساػز وّیه ‪ Properties ٚ‬و‪ٙ‬یذ ‪ ٚ‬دس صثب٘‪ Permissions ٝ‬ا‪ ٖٚ‬دبییٗ ٌضی‪ٝٙ‬‬
‫‪Execute‬س‪ ٚ‬سیه ثض٘یذ ‪ ٚ‬ثؼذ ثشیذ سشٔی‪ٙ‬بَ دػش‪ٛ‬س صیش س‪ ٚ‬ث‪ٛٙ‬یؼیذ‪...‬‬

‫‪./qt-opensource-linux-x64-5.3.0.run‬‬

‫دػش‪ٛ‬س ػبسی ی‪ ٝ‬ؿیضی ث‪ ٝ‬ایٗ ك‪ٛ‬سر ‪ٞ‬ؼشؾ‪:‬‬

‫‪root@USER-Aspire-4720Z:/home/USER/Downloads# ./qt-opensource-‬‬
‫‪linux-x64-5.3.0.run‬‬

‫‪ ٚ‬دس ٔشاكُ ثؼذی ‪Wizard‬ثشای ٘لت ٔیبد ثبال ‪ ٚ‬ثمی‪ٔ ٝ‬شاكّؾ ‪ٕٞ‬ب٘‪ٙ‬ذ آٔ‪ٛ‬صؽ ‪ٞ‬بی ‪ٚ‬ی‪ٙ‬ذ‪ٚ‬صی ‪ٞ‬ؼشؾ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 12‬‬

‫ٔیشیٓ ػش اكُ ٔغّت ‪ ٚ‬وبس ثب ‪ ٚ Qt‬س‪ٛ‬ضیلبر دس ساثغ‪ ٝ‬ثب ا٘‪ٛ‬اع دش‪ٚ‬ط‪ٞ ٜ‬ب‬

‫ثشای ؿش‪ٚ‬ع ث‪ٛٙٔ ٝ‬ی ‪ٌ ٚ File‬ضی‪ٔ New File or Project ٝٙ‬شاػؼ‪ ٝ‬و‪ٙ‬یذ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 13‬‬

‫كبال دس ایٗ لؼٕز ؿٕب ا٘‪ٛ‬اع دش‪ٚ‬ط‪ٞ ٜ‬ب ‪ ٚ‬فبیُ ‪ٞ‬بیی و‪ٔ ٝ‬یش‪٘ٛ‬یذ س‪ٛ‬ػظ ‪ Qt‬ایؼبد و‪ٙ‬یذ ثب س‪ٛ‬ػ‪ ٝ‬ث‪٘ ٝ‬ؼخ‪ ٝ‬ای و‪ٝ‬‬
‫٘لت وشدیٗ فؼبَ ‪ ٚ‬لبثُ ا٘شخبة ‪ٞ‬ؼشؾ و‪ ٗٔ ٝ‬دس ایٗ أ‪ٛ‬صؽ ‪ٞ‬ب اص دش‪ٚ‬ط‪Qt Widgets Application ٜ‬‬
‫اػشفبد‪ٔ ٜ‬یى‪ ٚ ٓٙ‬سمشیجب ٔیـ‪ٌ ٝ‬فز اػشب٘ذاسدسشیٗ كبِز دش‪ٚ‬ط‪ ٜ‬ثشای عشاكی فشْ ‪ٞ‬ؼز ثب ثمی‪ٛٔ ٝ‬اسد اص لجیُ ‪Qt‬‬
‫‪Console‬یب ‪ ...‬فؼال وبسی ٘ذاسیٓ‪.‬‬

‫كبَ ثب ادأ‪ ٝ‬ایٗ ٔشكّ‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش ٘بْ دش‪ٚ‬ط‪ٔ ٚ ٜ‬ؼیشی و‪ٔ ٝ‬بیُ ‪ٞ‬ؼشیذ دش‪ٚ‬ط‪ ٜ‬دس ا‪ٔ ٖٚ‬ىبٖ رخیش‪ ٜ‬ثـ‪ ٝ‬س‪ٚ‬‬
‫ا٘شخبة و‪ٙ‬یذ‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 14‬‬

‫خت دس ایٗ ٔشكّ‪ ٝ‬ؿٕب ٔیش‪٘ٛ‬یذ ٘‪ٛ‬ع والع ‪ٕٞ ٚ‬ـ‪ٙ‬یٗ ‪ٞ‬یذس ‪ٞ‬بس‪ٔ ٚ‬ـخق و‪ٙ‬یذ عجك سل‪ٛ‬یش صیش ادأ‪ ٝ‬ثذیٗ‪:‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 15‬‬

‫دس ٘‪ٟ‬بیز سبییذ و‪ٙ‬یذ سب دش‪ٚ‬ط‪ ٜ‬ؿٕب ث‪ ٝ‬ك‪ٛ‬سر سل‪ٛ‬یش صیش ایؼبد ثـ‪:ٝ‬‬

‫خت سب ای‪ٙ‬ؼب ٔب فمظ ی‪ ٝ‬دش‪ٚ‬ط‪ ٜ‬اص ٘‪ٛ‬ع ‪ QtWidgets‬ایؼبد وشدیٓ و‪ ٝ‬ؿبُٔ ‪ ٚ Main Window‬والع ‪ٚ‬‬
‫‪ٞ‬یذس ‪ٞ‬بی اػشب٘ذاسد ثشای ؿش‪ٚ‬ع وبس ‪ ٚ‬ثش٘بٔ‪ٛ٘ ٝ‬یؼی ‪ٞ‬ؼشؾ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 16‬‬

‫ثجی‪ٙ‬یذ دس دش‪ٚ‬ط‪ٞ ٜ‬بی ‪ٔ Qt‬ب ؿ‪ٙ‬ذ ٘‪ٛ‬ع فبیُ دش‪ٚ‬ط‪ ٜ‬ای داسیٓ ثب دؼ‪٘ٛ‬ذ ‪ٞ‬بی ‪.pro ٚ .pri‬و‪ٞ ٝ‬ش د‪ٚ‬ی ایٗ فبیُ‬
‫‪ٞ‬ب س‪ٛ‬ػظ ‪ Qt‬لبثُ ؿ‪ٙ‬بػبیی ‪ٞ‬ؼش‪ٙ‬ذ ‪ ٚ‬ث‪ ٝ‬ػ‪ٛٙ‬اٖ فبیُ اكّی دش‪ٚ‬ط‪ ٜ‬ؿٕب دس ٘ظش ٌشفش‪ٔ ٝ‬یـ‪٘ٛ‬ذ‪.‬‬

‫اٌش س‪ٚ‬ی فبیُ ‪ MyProject.pro‬وّیه و‪ٙ‬یذ ث‪ ٝ‬ك‪ٛ‬سر صیش ؿبُٔ وذ ‪ٞ‬بیی ‪ٞ‬ؼشؾ‪:‬‬

‫‪#-------------------------------------------------‬‬
‫‪#‬‬
‫‪# Project created by QtCreator 2014-01-15T08:19:15‬‬
‫‪#‬‬
‫‪#-------------------------------------------------‬‬

‫‪QT‬‬ ‫‪+= core gui‬‬

‫‪greaterThan(QT_MAJOR_VERSION, 4): QT += widgets‬‬

‫‪TARGET = MyProject‬‬
‫‪TEMPLATE = app‬‬

‫\‪SOURCES += main.cpp‬‬
‫‪mainwindow.cpp‬‬

‫‪HEADERS‬‬ ‫‪+= mainwindow.h‬‬

‫‪FORMS‬‬ ‫‪+= mainwindow.ui‬‬

‫! فشأ‪ٛ‬ؽ ٘ى‪ٙ‬یذ فبیُ ‪.pro‬‬ ‫كبال ٔٗ ث‪ ٝ‬ك‪ٛ‬سر صیش س‪ٛ‬ضیلبسؾ س‪ٔ ٚ‬یذْ سب ٔش‪ٛ‬ػ‪ٚ ٝ‬ػ‪ٛ‬د ایٗ وذ ‪ٞ‬ب ثـیذ‬
‫ٔ‪ٕٟ‬ششیٗ لؼٕز دش‪ٚ‬ط‪ٞ ٜ‬ؼشؾ و‪ ٝ‬دس فشاخ‪ٛ‬ا٘ی فبیُ ‪ٞ‬ب ‪ ٚ‬سفش٘غ ‪ٞ‬ب ٔ‪ٔ ٕٟٝ‬ظال ٔٗ اٌ‪ ٝ‬ثخ‪ٛ‬اْ اص دیشبثیغ ‪ٚ‬‬
‫اػشفبد‪ ٜ‬و‪ ٓٙ‬دس ایٗ لؼٕز ثبیذ ا‪ َٚ‬فشاخ‪ٛ‬ا٘یؾ و‪.ٓٙ‬‬ ‫دػش‪ٛ‬سار ‪SQL‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 17‬‬

‫‪#-------------------------------------------------‬‬
‫‪#‬‬
‫دش‪ٚ‬ط‪ ٜ‬ػبخش‪ ٝ‬ؿذ‪ ٜ‬س‪ٛ‬ػظ وی‪ٛ‬ر دس سبسیخ ( ‪# Project created by QtCreator 2014-01-15T08:19:15‬‬
‫)فالٖ‬
‫‪#‬‬
‫‪#-------------------------------------------------‬‬

‫‪QT‬‬ ‫ایٗ لؼٕز ٔشث‪ٛ‬ط ث‪ ٝ‬فشاخ‪ٛ‬ا٘ی ٔ‪ٛ‬اسد الصْ ‪ٞ‬ؼز ی‪ ٝ‬ؿیضی ٔظُ سفش٘غ ٌیشی دس ‪ٚ‬یظ‪ٚ‬اَ اػشذی‪ ٛ‬و‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر ( ‪+= core gui‬‬
‫)وذ ٘‪ٛ‬ؿش‪ٔ ٝ‬یـ‪ٝ‬‬

‫)ٔشث‪ٛ‬ط ث‪٘ ٝ‬ؼخ‪ٚ ٝ‬یذػز دس وی‪ٛ‬ر ‪ٞ‬ؼشؾ( ‪greaterThan(QT_MAJOR_VERSION, 4): QT += widgets‬‬

‫)و‪ ٝ‬دس ‪ٚ‬یظ‪ٚ‬اَ اػشذی‪ ٓٞ ٛ‬دیذیٗ فشاخ‪ٛ‬ا٘ی ٔیى‪٘Namespace ٝٙ‬بْ دش‪ٚ‬ط‪ ٜ‬س‪ ٚ‬ث‪ ٝ‬ك‪ٛ‬سر ( ‪TARGET = MyProject‬‬
‫‪TEMPLATE = app‬‬ ‫)لبِت ث‪ٙ‬ذی(‬

‫\‪SOURCES += main.cpp‬‬
‫)‪ٞ‬ؼشؾ س‪ ٚ‬فشاخ‪ٛ‬ا٘ی ٔیى‪ٙ‬ذ ‪main‬ػ‪ٛ‬سع اكّی و‪ ٝ‬ؿبُٔ سبثغ ( ‪mainwindow.cpp‬‬

‫‪HEADERS‬‬ ‫)‪ٞ‬یذس د‪ٙ‬ؼش‪ ٜ‬اكّی س‪ ٚ‬فشاخ‪ٛ‬ا٘ی ٔیى‪+= mainwindow.h (ٝٙ‬‬

‫‪FORMS‬‬ ‫)فبیُ ‪ ٚ‬لؼٕشی و‪ ٝ‬ؿبُٔ عشاكی ‪ٞ‬ؼشؾ س‪ ٚ‬فشاخ‪ٛ‬ا٘ی ٔیى‪ٙ‬ذ( ‪+= mainwindow.ui‬‬

‫خت ثؼذ اص ایٗ فبیُ ٔب ؿ‪ٙ‬ذ د‪ٛ‬ؿ‪ ٝ‬ث‪٘ ٝ‬بٔ‪ٟ‬بی ‪ Forms ٚ Headers , Sources‬داسیٓ و‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‬
‫س‪ٛ‬ضیلبسـ‪ٔ ٛ٘ٛ‬یذْ‪.‬‬

‫د‪ٛ‬ؿ‪ٚ Headers ٝ‬ظیف‪ ٍٝ٘ ٝ‬داسی سٕبْ فبیُ ‪ٞ‬بی ‪ C++‬اص ٘‪ٛ‬ع ‪ .h‬یب ‪ٕٞ‬بٖ ‪ heder‬س‪ ٚ‬ثش ػ‪ٟ‬ذ‪ ٜ‬داسد‪.‬‬

‫د‪ٛ‬ؿ‪ٚ Sources ٝ‬ظیف‪ ٍٝ٘ ٝ‬داسی سٕبْ فبیُ ‪ٞ‬بی ‪ C++‬اص ٘‪ٛ‬ع ‪ .cpp‬یب ‪ٕٞ‬بٖ ‪ Source‬س‪ ٚ‬ثش ػ‪ٟ‬ذ‪ٜ‬‬
‫داسد‪.‬‬

‫د‪ٛ‬ؿ‪ٚ Forms ٝ‬ظیف‪ ٍٝ٘ ٝ‬داسی سٕبْ فبیُ ‪ٞ‬بی ٔشث‪ٛ‬ط ث‪ ٝ‬عشاكی س‪ ٚ‬داس‪ ٜ‬دؼ‪٘ٛ‬ذ فبیُ ‪ٞ‬بی عشاكی دس وی‪ٛ‬ر‬
‫‪ٞui‬ؼش‪ٙ‬ذ ث‪ ٝ‬ك‪ٛ‬سر ‪ mainwindow.ui‬و‪ ٝ‬فبیُ دیضایٗ دش‪ٚ‬ط‪ ٜ‬ؿٕب ث‪ ٝ‬ػ‪ٛٙ‬اٖ یه فشْ دس ٘ظش ٌشفش‪ ٝ‬ؿذ‪ٜ‬‬
‫اػز‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 18‬‬

‫هرحلِ سَم ‪ٔ :‬ؼشفی ‪ ٚ‬وبس ثب ‪ٞ Slot ٚ Signal‬ب ‪ٞ Event ٚ‬ب‬

‫٘ىش‪ ٗٔ : ٝ‬للذْ ای‪ ٝٙ‬و‪ ٝ‬دس ػبد‪ ٜ‬سشیٗ كبِز آٔ‪ٛ‬صؿش‪ ٚ‬اسائ‪ ٝ‬ثذْ ث‪ ٝ‬خبعش ای‪ٙ‬ى‪ ٝ‬افشاد ؿبوی اص وذ ٘‪ٛ‬یؼی صیبد‬
‫‪C++‬وٕی دیذٌب‪ٞ‬ـ‪ ٖٛ‬س‪ ٚ‬دس ساثغ‪ ٝ‬ثب ایٗ صثبٖ سغییش ثذٖ ثذ ٘یؼز‪ٔ ...‬خل‪ٛ‬كب ا‪٘ٚ‬بیی ن ٔیٍٗ وی ك‪ٛ‬كّ‪ٝ‬‬
‫داس‪ ٜ‬س‪ٞ C++ ٛ‬ضاس خظ وذ ث‪ٛٙ‬یؼ‪ ٝ‬سب ی‪ ٝ‬دیغبْ ٕ٘بیؾ ثذ‪!!!ٜ‬‬

‫ػیٍ‪ٙ‬بَ یب اػالر ‪ٞ‬ب ؿیٗ ؟ ث‪ ٝ‬ؿ‪ ٝ‬دسدی ٔیخ‪ٛ‬سٖ ؟ ٔؼّٕب ؿٕب ثشای ایؼبد یه سخذاد دس یه صٔبٖ ثب اطش‬
‫ٌزاسی ثش س‪ٚ‬ی یه و‪ٙ‬ششَ یب ‪ Object‬ا٘شظبس ای‪ ٛٙ‬داسیٗ و‪ ٝ‬ا‪ ٖٚ‬ؿیء دس لجبَ فـشد‪ ٜ‬ؿذٖ یب ‪ٞ‬ش س‪ٚ‬یذاد دیٍ‪ٝ‬‬
‫ای یه ػىغ اِؼّٕی ٘ـ‪ ٖٛ‬ثذ‪ٔ ٜ‬ظال س‪ٚ‬ی یه دوٕ‪ ٝ‬ای وّیه ٔیى‪ٙ‬یذ ا٘شظبس داسیذ ی‪ ٝ‬دیغبٔی دس س‪ٚ‬یذاد‬
‫‪Clicked‬ا‪ٕ٘ ٖٚ‬بیؾ داد‪ ٜ‬ثـ‪ٙٔ ٝ‬ظ‪ٛ‬س اص ‪ Slot ٚ Signal‬دس ساثغ‪ ٝ‬ثب ایٗ ٔؼبئُ ‪ٞ‬ؼشؾ و‪ ٝ‬كبال دس ایٗ ٔیبٖ‬
‫ثشای كذا صدٖ اص ‪ Signal‬اػشفبد‪ٔ ٜ‬یى‪ٙ‬یٓ ‪ ٚ‬اص ‪ Slot‬ثشای دسیبفز دػش‪ٛ‬س ‪ ٚ‬ػُٕ وشدٖ‪.‬‬

‫ٔٗ للذ داسْ ثشای ؿش‪ٚ‬ع وبس س‪ٚ‬ی یه فشٔی ‪ 2‬سب دوٕ‪ ٝ‬ایؼبد و‪ ٚ ٓٙ‬س‪ٚ‬ی ایٗ د‪ٚ‬سب دوٕ‪ ٝ‬اص‪ 2‬س‪ٚ‬یذاد‬
‫)‪(Clicked‬وّیه ؿذٖ اػشفبد‪ ٜ‬و‪.ٓٙ‬‬

‫خت ث‪ ٝ‬لؼٕز ‪ Forms‬دس دش‪ٚ‬ط‪ ٜ‬ثشیذ ‪ ٚ‬س‪ٚ‬ی فبیُ ‪ mainwindow.ui‬د‪ٚ‬ثبس وّیه و‪ٙ‬یذ سب ٔلیظ‬
‫عشاكی فشٔش‪ ٖٛ‬س‪ ٚ‬ثجی‪ٙ‬یذ ث‪ ٝ‬ك‪ٛ‬سر صیش د‪ ٚ‬سب دوٕ‪ ٝ‬ثب ػُٕ ‪ Drag and Drop‬س‪ٚ‬ی فشْ خ‪ٛ‬دْ ایؼبد ٔیى‪ٓٙ‬‬
‫دس ك‪ٛ‬سسی و‪ ٝ‬وبٔذبیُ ‪ ٚ‬اػشا و‪ٙ‬یذ دوٕ‪ٞ ٝ‬بی ایؼبد ؿذ‪ ٜ‬س‪ ٚ‬س‪ٚ‬ی فشٔش‪ٔ ٖٛ‬یجی‪ٙ‬یذ ‪ِٚ‬ی ثذ‪ٞ ٖٚ‬یؾ ػّٕی !‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 19‬‬

‫ثش خالف ‪ ٚ Visual Studio‬صثبٖ ‪ C#‬و‪ ٝ‬س‪ٚ‬ی ‪ٞ Object‬ب وّیه ٔیى‪ٙ‬یذ ‪ ٚ‬سبثغ ٔشث‪ٛ‬ط ث‪ ٝ‬س‪ٚ‬یذاد ا‪ٖٚ‬‬
‫ػبخش‪ٔ ٝ‬یـ‪ ٚ ٝ‬ؿٕب ؿش‪ٚ‬ع ٔیى‪ٙ‬یذ ث‪ ٝ‬ثش٘بٔ‪ٛ٘ ٝ‬یؼی دس ‪ Qt‬ؿ‪ٙ‬یٗ ؿیضی ‪ٚ‬ػ‪ٛ‬د ٘ذاس‪ ٜ‬دس وُ س‪ٛ‬ی ‪ C++‬وّیه‬
‫وذ وذ ث‪ٛٙ‬یغ ثی ٔؼ‪ٙ‬ی‪ ٝ‬ثبیذ و‪ ٛٞٛ‬ثى‪ٙ‬ی سب ثش‪٘ٛ‬ی دػش‪ٛ‬س ثذی ث‪ ٝ‬س‪ٚ‬یذاد ‪ٞ‬ب‪ِٚ ....‬ی ٔٗ ی‪ ٝ‬س‪ٚ‬ؽ ػبد‪ ٜ‬سشی س‪ٚ‬‬
‫ث‪ٟ‬ش‪ٔ ٖٛ‬یٍٓ ث‪ ٝ‬ك‪ٛ‬سر صیش س‪ٚ‬ی و‪ٙ‬ششَ ساػز وّیه ٔیى‪ٙ‬یٓ ‪ٌ ٚ‬ضی‪ Go to Slot ٝٙ‬س‪ ٚ‬ا٘شخبة ٔیى‪ٙ‬یٓ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 20‬‬

‫خت كبال عجك سل‪ٛ‬یش صیش ٔـب‪ٞ‬ذ‪ٔ ٜ‬یى‪ٙ‬یذ و‪ ٝ‬سٕبْ سخذاد ‪ٞ‬بی ٔشث‪ٛ‬ط ث‪ ٝ‬و‪ٙ‬ششَ ٔ‪ٛ‬سد ٘ظش ؿٕب لبثُ ا٘شخبة‬
‫‪ٞ‬ؼش‪ٙ‬ذ ٔب دس ایٗ ثخؾ الصٔ‪ ٝ‬اص س‪ٚ‬یذاد‪ Click ٜ‬اػشفبد‪ ٜ‬و‪ٙ‬یٓ دغ س‪ٚ‬ؽ وّیه و‪ٙ‬یذ ‪ ٚ‬ثشیذ ٔشكّ‪ ٝ‬ثؼذ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 21‬‬

‫خت كبال ای‪ٙ‬ؼب سبثغ ٔشث‪ٛ‬ط ث‪ ٝ‬ػُٕ وّیه ؿذٖ س‪ٚ‬ی ایٗ دوٕ‪ ٝ‬ایؼبد ؿذ‪.ٜ‬‬

‫)(‪void MainWindow::on_pushButton_clicked‬‬
‫{‬

‫}‬
‫دس فبیُ ‪ mainwindow.h‬وذ صیش اضبف‪ ٝ‬ؿذ‪ ٜ‬و‪ ٝ‬سؼشیف ‪ٔ Slot‬شث‪ٛ‬ط ث‪ ٝ‬و‪ٙ‬ششَ ٔیجبؿذ‪.‬‬

‫‪private slots:‬‬
‫;)(‪void on_pushButton_clicked‬‬

‫ٔ‪ٙ‬ظ‪ٛ‬س اص ‪٘ pushButton‬بْ ‪ٕٞ‬بٖ دوٕ‪ ٝ‬ای ‪ٞ‬ؼشؾ و‪ ٝ‬س‪ٚ‬ؽ وّیه ٔیـ‪ٔ ٝ‬ؼّٕب ٘بْ دوٕ‪ ٝ‬ثؼذی‬
‫‪pushButton_2‬خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د ! ؿٕب ٔیش‪٘ٛ‬یذ ایٗ سبثغ س‪ ٚ‬ثذ‪ ٖٚ‬ػّٕیبسی و‪ ٝ‬دس سل‪ٛ‬یش دیذیٗ ایؼبد ‪ ٚ‬ث‪ٞ ٝ‬ش‬
‫یه اص و‪ٙ‬ششَ ‪ٞ‬بی خ‪ٛ‬دس‪ ٖٛ‬اخشلبف ثذیٗ‪.‬‬

‫كبال ایٗ ثخؾ ٔـخق وشد و‪ ٝ‬ایؼبد ‪ٞ Event‬بی ٔشث‪ٛ‬ط ث‪ ٝ‬و‪ٙ‬ششِش ‪ٞ‬ب ؿغ‪ٛ‬س ك‪ٛ‬سر ٔیٍیش‪ ٜ‬ث‪ ٝ‬ك‪ٛ‬سر وذ‬
‫٘‪ٛ‬یؼی ایٗ س‪ٚ‬ؽ ‪ٞ‬بس‪ٔ ٚ‬یـذ ثشیٓ ‪ِٚ‬ی خ‪ٛ‬اػشٓ ػبد‪ ٜ‬سشیٗ كبِشؾ س‪٘ ٚ‬ـ‪٘ٛ‬ش‪ ٖٛ‬ثذْ سب ػ‪ٛ‬م ا‪ ٕٟٝ٘ٚ‬وذ ٘‪ٛ‬یؼی دس‬
‫‪C++‬ث‪ ٝ‬ك‪ٛ‬سر ػبدی دس ثیبد‪.‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 22

‫ ٕ٘بیؾ ثذْ دغ عجك‬ٕٝ‫ی ایٗ دو‬ٚ‫ ثب وّیه س‬ٚ‫ دیغبٔی س‬ٝ‫اْ ی‬ٛ‫ٓ ٔیخ‬ٙ‫سایی وبُٔ و‬ٛ‫ یؼ‬ٚ‫ ایٗ ثلض س‬ٝ‫ى‬ٙ‫ثشای ای‬
ٝ‫ ث‬QMessageBox ‫ؼشؾ‬ٞ ‫ر‬ٛ‫ دس وی‬ٝ‫ٓ و‬ٙ‫ا٘ی ٔیى‬ٛ‫ فشاخ‬ٚ‫ س‬Message ‫یذس‬ٞ ‫ اثشذا‬C++ ٗ‫ا٘ی‬ٛ‫ل‬
:‫سر صیش‬ٛ‫ك‬

#include "qmessagebox.h"
:ٓ‫یؼ‬ٛٙ‫ دس داخُ سبثغ سخذاد وّیه ٔی‬ٚ‫ وذ صیش س‬ٚ

QMessageBox msgBox;
msgBox.setText("Welcome to the Qt 5.2 , My name is Kambiz Asadzadeh");
msgBox.exec();

:‫ؼز‬ٞ ‫وبّٔؾ‬

void MainWindow::on_pushButton_clicked()
{

QMessageBox msgBox;
msgBox.setText("Welcome to the Qt 5.2 , My name is Kambiz Asadzadeh");
msgBox.exec();

}
: ‫ ٔظُ صیش‬ٝ‫ػی ثـ‬ٚ‫ خش‬Show Message ٕٝ‫ی دو‬ٚ‫ٍبْ وّیه س‬ٙٞ ‫ اػشا‬ٚ ُ‫خت كبال ثبیذ ثؼذ اص وبٔذبی‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 23‬‬

‫هرحلِ چُارم ‪ٔ :‬ؼشفی ‪ ٚ‬وبس ثب ٕ٘بیؾ‪Windows‬‬

‫للذ داسْ دس ساثغ‪ ٝ‬ثب د‪ٙ‬ؼش‪ٞ ٜ‬ب یب ‪ٕٞ‬بٖ دیبِ‪ٛ‬ي ‪ٞ‬ب یب دس صثبٖ ‪ٞ Widgets ٖٕٛٞ Qt‬ب س‪ٛ‬ضیلبسی ثذْ‪.‬‬

‫عجك س‪ٚ‬اَ ػبدی یه دش‪ٚ‬ط‪ ٜ‬ث‪٘ ٝ‬بْ ‪ MyWindows‬ایؼبد ٔیى‪ٙ‬یٓ و‪ ٝ‬دس كبِز ػبدی اٌ‪ ٝ‬س‪ٛ‬ػ‪ ٝ‬و‪ٙ‬یذ دش‪ٚ‬ط‪ٜ‬‬
‫داسای یه ‪ MainWindow‬یب ‪ ٖٕٛٞ‬فشْ اكّی ‪ٞ‬ؼشؾ ایؼبد ٔیى‪.ٝٙ‬‬

‫كبَ ٔب ثشای ای‪ٙ‬ى‪ ٝ‬اص فشْ ‪ٞ‬ب ‪ ٚ‬دیبِ‪ٛ‬ي ‪ٞ‬بی دیٍ‪ ٝ‬ای دس دش‪ٚ‬طٔ‪ ٖٛ‬اػشفبد‪ ٜ‬و‪ٙ‬یٓ ثبیذ ؿىبس و‪ٙ‬یٓ ؟‬

‫خیّی ساكش‪ ٝ‬ثشای ایٗ وبس س‪ٚ‬ی دش‪ٚ‬ط‪ ٜ‬یؼ‪ٙ‬ی ‪ MyWindows‬ساػز وّیه ٔیى‪ٙ‬یٓ ‪ٌ ٚ‬ضی‪ Add new ٝٙ‬س‪ٚ‬‬
‫عجك سل‪ٛ‬یش صیش ٔیض٘یٓ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 24‬‬

‫دس ٔشكّ‪ ٝ‬ثؼذ عجك سل‪ٛ‬یش صیش ٌضی‪ٞ ٝٙ‬بی ٔش‪ٛٙ‬ػی س‪٘ ٚ‬ؼجز ث‪٘ ٝ‬یبص وبسی س‪ٚ‬ی دش‪ٚ‬ط‪ ٜ‬دس اخشیبس لشاس ٔیذ‪ ٜ‬و‪ٔ ٝ‬ب‬
‫‪ٞ‬ذفٕ‪ ٖٛ‬ػبخز فشْ یب ‪ ٖٕٛٞ‬د‪ٙ‬شػش‪ٞ ٜ‬ؼز ثشای ای‪ٙ‬ىبس ث‪ ٝ‬ؿبخ‪ٔ Qt ٝ‬یشْ و‪ ٝ‬دس ای‪ٙ‬ب لجُ اص ‪ٞ‬ش ؿیض ثزاسیذ ی‪ٝ‬‬
‫س‪ٛ‬ضیلی ثذْ‪...‬‬

‫ا٘‪ٛ‬اع ٌضی‪ٞ ٝٙ‬بی ٔخشّفی ‪ٚ‬ػ‪ٛ‬د داس‪ ٜ‬وذ‪ ٛٔٚ‬ثبیذ ا٘شخبة و‪ٙ‬یٓ ‪ ٚ‬ؿشا ؟ خت ثجی‪ٙ‬یذ ؿٕب ثش اػبع ٘یبص اٌش‬
‫ٔیخ‪ٛ‬ا‪ٞ‬یذ فشْ س‪ِٛ‬یذ ؿذ‪ ٜ‬ؿٕب داسای ‪ٞ‬یذس ‪ ٚ‬والع اخشلبكی خ‪ٛ‬دؽ ثبؿ‪ٔ ٝ‬یش‪٘ٛ‬یذ دس ‪ٕٞ‬یٗ ٔشكّ‪ ٝ‬ا‪ ٖٚ‬س‪ ٚ‬سؼییٗ‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 25‬‬

‫و‪ٙ‬یذ و‪ ٝ‬آیب ‪ٞ‬یذس ‪ ٚ‬والع ٔخل‪ٛ‬ف فشْ ٔٗ ایؼبد ثـ‪ ٝ‬یب خیش ! دس اوظش ٔ‪ٛ‬اسد الصٔ‪ ٝ‬دغ ٔٗ اص ‪Qt‬‬
‫‪Designer Form class‬اػشفبد‪ٔ ٜ‬یى‪...ٓٙ‬‬

‫دس ٔشكّ‪ ٝ‬ثؼذ عجك سل‪ٛ‬یش صیش ٔب ٔیش‪٘ٛ‬یٓ ٘‪ٛ‬ع فشْ س‪ ٚ‬ػشیؼب ا٘شخبة و‪ٙ‬یٓ و‪ ٝ‬و‪ ٝ‬فشْ دیبِ‪ٛ‬ي ثبؿ‪ ٝ‬یب فشْ ٔؼٕ‪ِٛ‬ی‬
‫ثبؿ‪ ٚ ٝ‬یب فشْ اكّی ؛ ؿ‪ ٖٛ‬للذ ٔب اػشفبد‪ ٜ‬اص ‪ٞ Widgets‬ؼشؾ ٔٗ اص ٘‪ٛ‬ع ‪ٚ‬یذػز یب ‪ ٖٕٛٞ‬فشْ ٔؼٕ‪ِٛ‬ی‬
‫اػشفبد‪ٔ ٜ‬یى‪.ٓٙ‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 26‬‬

‫دس ٔشكّ‪ ٝ‬ثؼذ ؿٕب ٔیش‪٘ٛ‬یذ ث‪ ٝ‬ك‪ٛ‬سر ػفبسؿی ٘بْ والع ‪٘ ,‬بْ ‪ٞ‬یذس ‪٘ ٚ‬بْ فبیُ اكّی ‪ ٚ‬فبیُ عشاكی س‪ ٚ‬سؼییٗ‬
‫و‪ٙ‬یذ و‪ ٝ‬دس خش‪ٚ‬ػی ثش اػبع ٘بْ ا٘شخبة ؿذ‪ ٜ‬ؿٕب ٔ‪ٛ‬سد اػشفبد‪ ٜ‬لشاس ٔیٍیش‪ ٜ‬و‪ ٝ‬دس ایٗ آٔ‪ٛ‬صؽ ٔٗ اػٓ فشْ‬
‫خ‪ٛ‬دْ س‪ٔ ٚ‬یضاسْ ‪ ٚMyForm‬ث‪ ٝ‬ك‪ٛ‬سر صیش سبییذ ٔیى‪.ٓٙ‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 27‬‬

‫كبال فشْ ٔب ایؼبد ؿذ‪ٔ ٚ ٜ‬ب ٔیش‪٘ٛ‬یٓ اصؽ اػشفبد‪ ٜ‬و‪ٙ‬یٓ ثشای ای‪ٙ‬ى‪ٔ ٝ‬غٕئٗ ثـیٓ ث‪ ٝ‬سل‪ٛ‬یش صیش ٍ٘ب‪ٞ‬ی و‪ٙ‬یذ دلیمب‬
‫عجك ٘بْ ٌزاسی ‪ ٚ‬ا٘شخبثی و‪ ٝ‬وشدْ ‪ ٓٞ‬فبیُ عشاكی ‪ ٓٞ ٚ‬فبیُ ‪ٞ‬بی اكّی ‪ٞ ٚ‬یذس ‪ٕٞ‬شا‪ ٜ‬ثب والع ‪ٞ‬بی ٔشث‪ٛ‬ط‬
‫داخّی ایؼبد ؿذ‪ ٜ‬ا٘ذ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 28‬‬

‫خت كبال فشْ ٔب سب ای‪ٙ‬ؼب ایؼبد ؿذ‪ٔ ٗٔ ٜ‬یخ‪ٛ‬اْ فشٔٓ س‪ ٚ‬داخُ فشْ اكّی س‪ٛ‬ػظ ػُٕ وّیه ؿذٖ س‪ٚ‬ی یه‬
‫و‪ٙ‬ششَ دوٕ‪ (Button) ٝ‬فشاخ‪ٛ‬ا٘ی ‪ٕ٘ ٚ‬بیؾ ثذْ‪.‬‬

‫ثبیذ ؿىبس و‪ٙ‬یٓ ؟ ٔٗ ٔیخ‪ٛ‬اْ دس فشْ اكّی ی‪ ٝ‬دوٕ‪ ٝ‬ای ایؼبد و‪ ٚ ٓٙ‬دس س‪ٚ‬یذاد وّیه ؿذٖ ا‪ ٖٚ‬فشْ د‪ ْٚ‬خ‪ٛ‬دْ‬
‫یؼ‪ٙ‬ی ‪ MyForm‬س‪ ٚ‬كذا ثض٘ٓ سب ‪ Show‬ثـ‪.ٝ‬‬

‫دغ یب ث‪ ٝ‬ك‪ٛ‬سر ػشیغ اص ‪ ٚ Got to Slot‬وّیه اػشفبد‪ٔ ٜ‬یى‪ ٓٙ‬س‪ٚ‬ی دوٕ‪ ٝ‬ایؼبد ؿذ‪ ٚ ٜ‬یب دس فبیُ ‪ٞ‬یذس‬
‫فشْ اكّی ایٗ وذ س‪ٔ ٚ‬ی‪ٛٙ‬یؼٓ‪.‬‬

‫)(‪void MainWindow::on_pushButton_clicked‬‬
‫{‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 29

‫ كذا ثض٘ٓ ؿىبس ثذیذ‬ٚ‫ٔٓ س‬ٚ‫اْ فشْ د‬ٛ‫ كبال ٔٗ ثخ‬ٝٙ‫ ایؼبد ٔیى‬ٚ‫یذاد وّیه س‬ٚ‫ؽ ایٗ وذ س‬ٚ‫ س‬ٚ‫ش د‬ٞ ‫دس‬
...ٓٙ‫و‬

:‫یذ‬ٙ‫ و‬ٜ‫ ایٗ وذ ٍ٘ب‬ٝ‫ث‬

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_pushButton_clicked()
{

}
.ْ‫ ٕ٘بیؾ ثذ‬ٛ٘ٚ‫ ا‬ٚ ْ‫ ثؼذ اصؽ وذی ثؼبص‬ٚ ٓٙ‫ وبسایی و‬ٝ‫ْ ثبیذ ی‬ٚ‫بػبیی فشْ د‬ٙ‫ِی ثشای ؿ‬ٚ ّٝ‫ ؿیض ك‬ٕٝٞ

:‫ٓ ثب ایٗ وذ‬ٙ‫د و‬ّٛ‫ى‬ٙ‫ ثبیذ ای‬ٚ‫ْ س‬ٚ‫یذس فشْ د‬ٞ ‫دغ اثشذا‬

#include "myform.h"
:ٓ‫یؼ‬ٛٙ‫ ٔی‬ٚ‫بیز دس سبثغ وّیه وذ صیش س‬ٟ٘ ‫ دس‬ٚ

void MainWindow::on_pushButton_clicked()
{

MyForm *dialog = new MyForm();


dialog->show();

}
: ‫سر صیش‬ٛ‫ ك‬ٝ‫ ث‬ٝ‫وذ اكّی وّی ٔیـ‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 30

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "myform.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_pushButton_clicked()
{

MyForm *dialog = new MyForm();


dialog->show();

}
:‫سر صیش‬ٛ‫ ك‬ٝ‫ ث‬ٝ‫ ٔیـ‬ٕٝ‫ی دو‬ٚ‫ٓ ثؼذ اص وّیه س‬ٞ ‫ػی‬ٚ‫خش‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 31‬‬

‫قسوت پٌجن ‪ٔ :‬ؼشفی ‪ ٚ‬وبس ثب الی‪ٞ ٝ‬ب صثب٘‪ٞ ٝ‬ب ‪ ٚ‬ثذ٘‪ٞ ٝ‬بی دس عشاكی‬

‫دس ایٗ ٔشكّ‪ ٝ‬دس ساثغ‪ ٝ‬ثب الی‪ٞ ٝ‬بی عشاكی ‪ ٚ‬أىب٘بر س‪ٛ‬ضیلبسی ثذْ و‪ ٝ‬عجك س‪ٚ‬اَ لجّی دش‪ٚ‬ط‪ ٜ‬ای ایؼبد‬
‫ٔیى‪ٙ‬یٓ ث‪٘ ٝ‬بْ ‪ٔ ٚ MyGui‬یشیٓ ػش اكُ ٔغّت‪...‬‬

‫خت عجك سل‪ٛ‬یش صیش ٔب ی‪ ٝ‬لؼٕشی داسیٓ و‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر خیّی ساكز أىب٘بر الی‪ ٝ‬ث‪ ٝ‬الی‪ ٝ‬دس اخشیبس ٔب ٔیضاس‪:ٜ‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 32‬‬

‫اثشذا س‪ٛ‬ضیلبر لؼٕز ا‪ َٚ‬س‪ ٚ‬ث‪ ٝ‬ك‪ٛ‬سر صیش ٔیذْ‪:‬‬

‫گسیٌِ ‪ Edit Widgets :‬دس كبِز وّی ‪ٚ‬لشی الصٔ‪ ٝ‬اثضاس ‪ٞ‬ب ‪ ٚ‬و‪ٙ‬ششَ ‪ٞ‬بیی س‪ ٚ‬س‪ٚ‬ی فشْ لشاس ثذیٓ یب ث‪ٝ‬‬
‫ع‪ٛ‬س ػبد‪ ٜ‬ثخ‪ٛ‬اْ ثٍٓ ‪ٚ‬لشی ٘یبص ثبؿ‪ ٝ‬س‪ٚ‬ی فشٔش‪ ٖٛ‬ؿیئی س‪ ٚ‬دسع و‪ٙ‬یذ كشٕب ثبیذ دس ایٗ الی‪ ٝ‬وبس و‪ٙ‬یذ‪.‬‬

‫گسیٌِ ‪ Edit Signals/Slots :‬ث‪ ٝ‬ك‪ٛ‬سر وّی ایٗ الی‪ٚ ٝ‬ظیف‪ ٝ‬دس اخشیبس ٌزاؿشٗ ػشیغ دػششػی ‪ٞ‬بی‬
‫ٔشث‪ٛ‬ط ث‪ٞ Signal ٝ‬ب ‪ٞ Slot ٚ‬ب س‪ ٚ‬دس اخشیبس ؿٕب ٔیضاس‪ ٜ‬و‪ ٝ‬ثب ػُٕ ‪ Drop ٚ Drag‬اؿیبء س‪ٚ‬ی ‪ٕٞ‬ذیٍ‪ٝ‬‬
‫ٔشاكُ ثؼذیؾ ٕ٘بیبٖ ٔیـ‪ٛ‬د‪.‬‬

‫گسیٌِ ‪ Edit buddies :‬ایٗ الی‪ ٝ‬أىبٖ س‪ٙ‬ظیٓ ا٘ذاص‪ ٜ‬فشْ س‪ ٚ‬ثشاس‪ ٖٛ‬فشا‪ٔ ٓٞ‬یى‪.ٝٙ‬‬

‫گسیٌِ ‪ Edit tab order :‬دس ایٗ الی‪ ٝ‬اص عشاكی ؿٕب ٔیش‪٘ٛ‬یذ ث‪ ٝ‬ساكشی ؿٕبس‪ ٜ‬ای‪ٙ‬ذػه یب ‪ٕٞ‬بٖ‬
‫‪ Index number‬اخشلبكی ‪ٞ‬ش یه اص اؿیبئ س‪ ٚ‬س‪ٚ‬ی فشْ ٔـخق و‪ٙ‬یذ و‪ ٝ‬ثب ػُٕ ‪٘ Tab‬یض ثش اػبع‬
‫ا‪ِٛٚ‬یز ا٘شخبة ٔی ؿ‪٘ٛ‬ذ‪.‬‬

‫ی‪٘ ٝ‬ىش‪ ٟٓٔ ٝ‬دس ‪ٚ Qt‬ػ‪ٛ‬د داس‪ ٜ‬ا‪ ٓ٘ٚ‬ای‪ ٝٙ‬و‪ ٝ‬ػّٕیبر ‪ Drop ٚ Drag‬ثش خالف ‪ٞ IDE‬بی دیٍ‪ ٝ‬أىب٘بر‬
‫ثؼیبس صیبدی س‪ ٚ‬ثشای ساكشی وبس ایؼبد ٔیى‪ٙٙ‬ذ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 33‬‬

‫هرحلِ ضطن ‪ٔ :‬ؼشفی ‪ ٚ‬وبس ثب لبثّیز ‪ٞ‬بی ‪ CSS ٚ HTML‬دس عشاكی‬

‫‪ٕٞ‬ب٘غ‪ٛ‬س و‪ٔ ٝ‬یذ‪٘ٚ‬یذ أش‪ٚ‬ص‪ ٜ‬داؿشٗ ٌشافیه ‪ ٚ‬عشاكی ‪ٞ‬بی دسػز كؼبثی س‪ٚ‬ی ٘شْ افضاس ٘‪ٛ‬یؼی خ‪ٛ‬دؽ یىی‬
‫اص ٔ‪ٕٟ‬ششیٗ لؼٕز ‪ٞ‬بی س‪ِٛ‬یذ یه ثش٘بٔ‪ٞ ٝ‬ؼشؾ و‪ ٝ‬اوظشا ث‪ ٝ‬خبعش ای دِیُ و‪ C++ ٝ‬س‪ ٚ‬فمظ یه ٔلیظ‬
‫‪ٔConsole‬یذ‪ ٗ٘ٚ‬ػشاؽ ایٗ صثبٖ ٘ی‪ٔٛ‬ذٖ ٕ٘یذ‪ ٓ٘ٚ‬ؿشا ؿبیذ ثشاؿ‪ ٖٛ‬ػخش‪ ٝ‬یب ؿبیذْ اعالػبر وبفی ٘ذاسٖ‪...‬‬

‫‪ِٚ‬ی دس وُ اٌ‪ ٝ‬ثب صثبٖ ‪ٞ‬بی ساكشی ٔظُ ‪ C#‬وبس وشدیٗ ٔیذ‪٘ٚ‬یذ و‪ ٝ‬ثشای عشاكی ف‪ٙ‬ب‪ٚ‬سی ‪ٞ‬بیی ٔظُ ‪WPF‬‬
‫س‪ ٚ‬داس٘ذ و‪ ٝ‬ثؼبی ‪ CSS‬اص ‪ XAML‬اػشفبد‪ٔ ٜ‬یى‪ ٚ ٝٙ‬دس ٘‪ٛ‬ثز خ‪ٛ‬دؽ دس عشاكی ویفیز خ‪ٛ‬ثی س‪ ٚ‬دس‬
‫خش‪ٚ‬ػی اسائ‪ٔ ٝ‬یذ‪.ٜ‬‬

‫‪ِٚ‬ی ‪ٞ‬شؿی ثبؿ‪ ٝ‬خ‪ٛ‬دس‪ٔ ٖٛ‬یذ‪٘ٚ‬یذ عشف ‪ٞ‬بیی و‪ ٝ‬دس ثش٘بٔ‪ٞ ٝ‬بی سلز ‪ٚ‬ة س‪ِٛ‬یذ ٔیـٗ ‪ٕٞ‬ـ‪ ٖٛ‬ث‪ ٝ‬وٕه ‪CSS‬‬
‫‪ٞ HTML ٚ‬ؼشؾ ‪ٕٞ ٚ‬ـ‪ٙ‬یٗ ‪ ... ٚ JavaScript‬كبال اٌ‪ ٝ‬ایٗ ف‪ٙ‬ب‪ٚ‬سی ‪ٞ‬ب س‪ٚ‬ی دّشفشْ ‪ٞ‬بی دػىشبدی ثبؿ‪ٝ‬‬
‫ؿی ٔیـ‪ ٝ‬؟ ٔؼّٕب یىی ٔٗ خ‪ٛ‬دْ خیّی خ‪ٛ‬ؿلبَ ٔیـٓ ‪ WPF ٚ‬س‪ٔ ٚ‬یضاسْ و‪ٙ‬بس ‪ٔ ٚ‬یبْ ػشاؽ ‪ٕٞ‬یٗ‪Qt.‬‬

‫لجُ اص ‪ٞ‬شؿیض ی‪ ٝ‬سؼشیفی دس ساثغ‪ ٝ‬ث‪ HTML ٚ CSS ٝ‬ثذْ ثؼذ ثشیٓ ػش اكُ ٔغّت‪....‬‬

‫فٌاٍری ‪ CSS‬تا آٍای (سیاساس ‪) :‬س‪ٚ‬ؿی ػبد‪ ٜ‬ثشای ٕ٘بیؾ ؿیذٔبٖ ‪ ٚ‬ػّ‪ٜٞٛ‬بی سل‪ٛ‬یشی ‪ٔ$‬ب٘‪ٙ‬ذ ٘‪ٛ‬ع‬
‫لّٓ‪ ،‬سً٘ ‪ ٚ‬ا٘ذاص‪ٜٞ‬ب‪ #‬ثش كفل‪ٞٝ‬بی ‪ٚ‬ة اػز‪ .‬ؿی‪ٜ٘ٛ‬بٔ‪ ٔ ٝ‬آثـبسی اص ػ‪ٙ‬غ صثبٖ‪ٞ‬بی ٘ـب٘‪ٌٝ‬زاسی‪ ،‬ثب ػبخشبس‬
‫ٔشٗ ػبد‪ ٔ ٜ‬سایب٘‪ٞ ٝ‬ؼش‪ٙ‬ذ ‪ ٚ‬دس‪ٞ ٖٚ‬شوذاْ‪ ،‬دػش‪ٛ‬س‪ٞ‬بیی آثـبس ٔب٘‪ٙ‬ذ ‪ ٚ‬دیدسدی‪ ،‬ثشای ؿٍ‪ٍ٘ٛ‬ی ٕ٘بیؾ ‪ٞ‬ش كفل‪ٝ‬‬
‫‪ٚ‬ة افض‪ٚ‬د‪ٔ ٜ‬یؿ‪ٛ‬د‪ .‬ث‪ٌ ٝ‬فش‪ٝ‬ای ػبد‪ ٜ‬سش‪ ،‬ایٗ دػش‪ٛ‬س‪ٞ‬ب س‪ٚ‬ؽ ٘ـبٖ داد‪ ٜ‬ؿذٖ لّٓ‪ٞ‬ب ‪ ٚ‬ا٘ذاص‪ ٜ‬ؿبٖ‪ ،‬سً٘‪ٞ‬ب ‪ ٚ‬دغ‬
‫صٔی‪ٞٝٙ‬ب‪ ،‬س‪ٚ‬ؽ ؿیذٔبٖ ٔ‪ٛ‬صاییه‪ٞ‬بی دسثشٌیش٘ذ‪ ٜ‬داد‪ٜٞ‬ب ‪$‬دی‪ٛ‬اس‪ٜٞ‬ب‪ ٚ ،#‬ثؼیبسی دیٍش اص ػ‪ٙ‬لش‪ٞ‬بی ػبخشبس ‪ٞ‬ش‬
‫كفل‪ٚ ٝ‬ة سا‪ ،‬دس‪ ٖٚ‬خ‪ٛ‬د ػبی ٔید‪ٙٞ‬ذ‪.‬‬

‫فٌاٍری ‪ HTML :‬صثبٖ أشذاددزیش ٘ـب٘‪ٌٝ‬زاسی فشأشٗ یب اوغاؽسیاْاَ ‪(Extensible HyperText‬‬


‫)‪ٕٞMarkup Language - XHTML‬بٖ اؽسیاْاَ اػز ث‪ٕٞ ٝ‬شا‪ ٜ‬سػبیز دلیك سٕبٔی ل‪ٛ‬اػذ ‪ٚ‬‬
‫دػش‪ٛ‬سار ٘ل‪ٛ‬ی ٘ضدیهسش ث‪ ٝ‬صثبٖ اوغاْاَ و‪ٛٔ ٝ‬ػجبر افضایؾ اعٕی‪ٙ‬بٖ اص ػُٕوشد كللیق ػ‪ٙ‬ذ‪ٞ‬ب دس‬
‫ؿشایظ دیـیذ‪ٜ‬سش ٔ‪ٛ‬ػ‪ٛ‬د دس ای‪ٙ‬شش٘ز أش‪ٚ‬صیٗ سا فشا‪ٔ ٓٞ‬یػبصد‪ٞ. XHTML‬ب‪ٛ٘ ،‬ع‪ٞ‬بی ػ‪ٙ‬ذ‪ٞ‬ب ‪ٔ ٚ‬بط‪َٞٚ‬ب دس‬
‫كبَ كبضش ‪ ٚ‬دس آی‪ٙ‬ذ‪ٞ ٜ‬ؼش‪ٙ‬ذ و‪ ٝ‬دس ‪ٚ‬الغ صیش ٔؼٕ‪ٛ‬ػ‪ٌ ٚ ٝ‬ؼششؽ یبفش‪ HTML4 ٝ‬اػز‪ .‬ایٗ ٘‪ٛ‬ع اػ‪ٙ‬بد ثش دبی‪ٝ‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 34‬‬

‫‪ٞXML‬ؼش‪ٙ‬ذ ‪ ٚ‬ثشای وبس دس سشویت ثب ػبُٔ وبسثش ٔجش‪ٙ‬ی ثش ‪ XML‬عشاكی ؿذ‪ٜ‬ا٘ذ‪ ٚ .‬دس كبَ كبظش ٘یض‬
‫ػذیذسشیٗ آٖ ‪ٞ HTML5‬ؼشؾ‪.‬‬

‫دس ساثغ‪ ٝ‬ثب ایٗ ٔؼئبِ‪ ٗٔ ٝ‬خ‪ٛ‬دْ خیّی ث‪ ٝ‬ایٗ لؼٕز ػالل‪ٙٔ ٝ‬ذْ دِیّـٓ ؿبیذ ‪ٚ‬اضق ثبؿ‪ ٝ‬وبس وشدٖ ثب دػش‪ٛ‬سار‬
‫‪ HTML ٚCSS‬دس س‪ِٛ‬یذ كفلبر ‪ٚ‬ة خش‪ٚ‬ػی خیّی لبثُ س‪ٛ‬ػ‪ٟ‬ی س‪ٔ ٚ‬یذ‪ ٜ‬كبَ آ٘ى‪ ٝ‬اص ایٗ دػش‪ٛ‬سار دس‬
‫س‪ِٛ‬یذ ثش٘بٔ‪ٞ ٝ‬بی سلز دػىشبح اػشفبد‪ ٜ‬و‪ٙ‬یٓ ؿ‪ ٝ‬ؿ‪ٛ‬د !!! دس ای‪ٙ‬ؼبػز و‪ ٝ‬ثبیذ ثٍٓ ث‪ٙ‬بٔش‪ ٖٛ‬س‪ ٚ‬اص ِلبػ‬
‫ٌشافیىی ٔیش‪٘ٛ‬یذ ٔ‪ٙ‬فؼشؽ و‪ٙ‬یذ‪.‬‬

‫سَال ‪ ....‬هگر ‪ CSS ٍ HTML‬هختص طراحی ٍب ًیست ؟ دس ػ‪ٛ‬اة ثبیذ ٌفز ثّ‪ِٚ ...ٝ‬ی اص ایٗ ث‪ٝ‬‬
‫ثؼذ ٘‪ٕ٘ٛٞ ٝ‬غ‪ٛ‬س و‪ٔ ٝ‬ش‪ٛ‬ػ‪ ٝ‬ؿذیذ دس ‪ٔ Qt‬ب لبثّیز ایٗ س‪ ٚ‬خ‪ٛ‬ا‪ٞ‬یٓ داؿز اص دػش‪ٛ‬سار ‪ CSS ٚ HTML‬دس‬
‫عشاكی اػشفبد‪ ٜ‬و‪ٙ‬یٓ ثشای ‪ٕٞ‬ی‪ ٝٙ‬و‪ ٝ‬داسْ ٔیٍٓ ث‪ٟ‬شش اص ایٗ ٕ٘یـ‪ٝ‬‬

‫ثشیٓ ػش دش‪ٚ‬ط‪ٔ ... ٜ‬ظُ لجُ ی‪ ٝ‬دش‪ٚ‬ط‪ ٜ‬ایؼبد ٔیى‪ٙ‬یٓ ثب ٘بْ ‪ ٚ MyDesign‬اص ٘‪ٛ‬ع ‪Widgets ...ٖٕٛٞ‬‬

‫خت كبال ثشای ؿش‪ٚ‬ع وبس اص ‪ٔ ٗٔ HTML‬یخ‪ٛ‬اْ ؿش‪ٚ‬ع و‪ ٓٙ‬و‪ ٝ‬ؿغ‪ٛ‬سی ٔیـ‪ ٝ‬دػش‪ٛ‬سار ‪ HTML‬س‪ ٚ‬س‪ٛ‬ی‬
‫وذ ‪ٞ‬بی ‪ C++‬اػشفبد‪ ٜ‬وشد‪.‬‬

‫فشم و‪ٙ‬یذ ٔٗ ی‪ٔ ٝ‬ش‪ٙ‬ی ‪ٞ‬ؼز دس س‪ٚ‬ی ی‪ label ٝ‬یب ‪ٞ‬ش ؿیئ دیٍشی ٔیخ‪ٛ‬اْ س‪ٛ‬ػظ وذ ‪ٞ‬بی ‪ HTML‬ث‪ٟ‬ؾ‬
‫‪ٚ‬یظٌی ‪ٞ‬بی خبكی ثذْ‪...‬‬

‫ٔیبْ وذ س‪ ٚ‬ث‪ ٝ‬ك‪ٛ‬سر صیش دس ٘ظش ٔیٍیشْ‪:‬‬

‫ی‪ 2 ٚ Label ٝ‬سب دوٕ‪ ٝ‬ایؼبدٔیى‪ ٓٙ‬و‪ ٝ‬دس كبِز ػبدی ث‪ ٝ‬ك‪ٛ‬سر صیش داسای افىز ‪ ٚ‬ؿىُ ظب‪ٞ‬شای‬
‫اػشب٘ذاسدی ‪ٞ‬ؼش‪ٙ‬ذ و‪ ٝ‬اص اػشبیُ دیـفشم ػیؼشٓ ػبُٔ سجؼیز وشدٖ ‪...‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 35‬‬

‫اال ٔٗ ٔیخ‪ٛ‬اْ اص ‪ HTML‬اػشفبد‪ ٜ‬و‪ ٚ ٓٙ‬دیٍ‪ ٝ‬ایٗ ‪ٚ‬اثؼشٍی س‪ ٚ‬اص ػیؼشٓ ػبُٔ ثٍیشْ ‪ ...‬ؿىبس ٔیى‪ٙ‬یٓ ث‪ٝ‬‬
‫ك‪ٛ‬سر صیش ثبیذ دلز و‪ٙ‬یذ ٔب ثشای دػش‪ٛ‬س ٘‪ٛ‬یؼی ‪ HTML‬ثبیذ ثیٗ وشیـٗ ‪ ٚ‬داثُ وشیـٗ اص وذ ‪ٞ‬بی ‪HTML‬‬
‫اػشفبد‪ ٜ‬و‪ٙ‬یٓ و‪ ٝ‬دسػشؾ ‪ٕٞ ٓٞ‬ی‪ ٝٙ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪.‬‬

‫">‪"<b>This is C++/Qt HTML Code</b‬‬

‫ٔیجی‪ٙ‬یذ ایٗ وذ دس ثیٗ سً ‪ٞ‬بی دػش‪ٛ‬س ‪ bold‬و‪ ٝ‬ثب >‪<b‬اغبص و‪ٙٙ‬ذ‪</b> ٚ ٜ‬خبسٕ‪ ٝ‬د‪ٙٞ‬ذ‪ ٜ‬ؿش‪ٚ‬ع ؿذ‪ٜ‬‬
‫لشاس ٌشفش‪ ٚ ٝ‬سٕبٔی ا‪ٟ٘ٚ‬بسْ دس ثیٗ "" ‪ ٚ‬یب ' لشاس ٔیذیٓ سب لبثُ ؿ‪ٙ‬بػبیی ثشای وبٔذبیّش ثبؿ‪.ٝ‬‬

‫كبال ٔب ؿغ‪ٛ‬س ثبیذ ایٗ ٘‪ٛ‬ع ٘‪ٛ‬یؼ‪ ٝ‬س‪ ٚ‬س‪ٚ‬ی یه ِیجُ ػشؾ و‪ٙ‬یٓ ای‪ ٓٙ‬خیّی ساكز ٔیـ‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش ا٘ؼبٔؾ‬
‫داد ‪ ٚ‬خش‪ٚ‬ػی س‪ٔ ٚ‬ـب‪ٞ‬ذ‪ ٜ‬وشد‪.‬‬

‫;)">‪ui->label->setText("<b>This is C++/Qt HTML Code</b‬‬

‫ایٗ وذ ؿی ٔیٍ‪ٝ‬؟ خیّی ساكز داس‪ٔ ٜ‬یٍ‪ ٝ‬آلب ػبٖ اص والع فشْ ٔٗ ؿیئ ‪ label‬س‪ ٚ‬ا٘شخبة وٗ ‪ٔ ٚ‬شٗ یب‬
‫‪ٔ ٖٕٛٞ‬لش‪ٛ‬یبسؾ س‪ ٚ‬ثشاْ دس ثیٗ وذ ‪ HTML‬ػز وٗ‪ .‬و‪ ٝ‬سد كبِز ػبدی ث‪ ٝ‬ك‪ٛ‬سر صیش ‪ٞ‬ؼشؾ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 36‬‬

‫;)"‪ui->label->setText("This is C++/Qt HTML Code‬‬

‫س‪ٟٙ‬ب ؿیضی و‪ ٗٔ ٝ‬اضبف‪ ٝ‬وشدْ ؿی‪ ٝ‬؟ فمظ سً ‪ٞ‬بی ؿش‪ٚ‬ع ‪ ٚ‬دبیبٖ د‪ٙٞ‬ذ‪ٞ Bold ٜ‬ؼز دغ دس ٘شیؼ‪ ٝ‬ؿٕب ثب‬
‫‪ٚ‬اسد وشدٖ سً ‪ٞ‬بی ‪ HTML‬ث‪ ٝ‬ك‪ٛ‬سر اػشب٘ذاسد دس وذس‪ٔ ٖٛ‬یش‪٘ٛ‬یذ اصؿ‪ٛ‬سٗ اػشفبد‪ ٜ‬و‪ٙ‬یذ‪.‬‬

‫٘شیؼ‪ ٝ‬خش‪ٚ‬ػی‪:‬‬

‫ٔیجی‪ٙ‬یذ عجك سل‪ٛ‬یش ٔمبیؼ‪ ٝ‬و‪ٙ‬یذ ٔشٗ ‪ label‬دس كبِز ‪ HTML‬دش سً٘ ؿذ‪ ٜ‬ث‪ ٝ‬كبِز ‪ bold‬سغییش وشد‪.ٜ‬‬

‫ی‪ٔ ٝ‬ظبِی ٔیض٘ٓ دس ساثغ‪ ٝ‬ثب ‪ Tooltip‬ثب ‪ HTML ...‬ع‪ٛ‬سی و‪ٚ ٝ‬لشی س‪ٚ‬ی دوٕ‪ ٝ‬ا‪ٔ َٚ‬ب‪ٚ‬ع س‪ ٍٝ٘ ٚ‬داسیٓ ی‪ٝ‬‬
‫‪Tooltip‬ثبص ثـ‪ ٝ‬و‪ ٝ‬س‪ٛ‬ػظ ‪ٛ٘ HTML‬ؿشیٓ‪.‬‬

‫ثشای ای‪ٙ‬ىبس ثبیذ اص ‪ Propertie‬ؿی اػشفبد‪ ٜ‬و‪ٙ‬یٓ ؟ ٔؼّٕب ثبیذ اص ‪ setToolTip‬اػشفبد‪ ٜ‬و‪ٙ‬یٓ‬

‫ث‪ ٝ‬ایٗ س‪ٚ‬ؽ‪:‬‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 37‬‬

‫‪ui->pushButton->setToolTip("Hello <font color='red'><b>My name is‬‬ ‫‪Kambiz‬‬


‫">‪Asadzadeh</b></font‬‬
‫">‪"<ul‬‬
‫">‪"<li>Item 1</li‬‬
‫">‪"<li>Item 2</li‬‬
‫">‪"<li>Item 3</li‬‬
‫;)">‪"</ul‬‬
‫خش‪ٚ‬ػی ؿذ ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫كبال ی‪٘ ٝ‬ىش‪ ٝ‬ای ‪ ٓٞ‬اؿبس‪ ٜ‬و‪ ٓٙ‬و‪ ٝ‬اٌ‪ ٝ‬دلز و‪ٙ‬یذ دس فشْ ثبال ٔٗ اص ‪ ٓٞ CSS‬دس داخُ ‪ HTML ٖٕٛٞ‬سً‬
‫اػشفبد‪ ٜ‬وشدْ ‪ ...‬ایٗ یؼ‪ٙ‬ی ؿی یؼ‪ٙ‬ی ‪ HTML‬ث‪ ٝ‬ع‪ٛ‬س وّی لبثُ دـشیجب٘ی ‪ٞ‬ؼز ؿ‪ ٖٛ‬اٌ‪٘ ٝ‬ج‪ٛ‬د ‪ٚ‬یظٌی خبكؾ‬
‫س‪ ٚ‬اػشا ٕ٘یىشد‪.‬‬

‫دس ساثغ‪ ٝ‬ثب ‪ CSS‬یىٓ س‪ٛ‬ضیق ثذْ ؿغ‪ٛ‬س ٔیش‪٘ٛ‬یٓ ی‪ CSS ٝ‬وذ ث‪ ٝ‬فشٕٔ‪٘ ٖٛ‬ؼجز ثذیٓ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 38‬‬

‫لجُ اص ‪ٞ‬ش ؿیض ثبیذ ای‪ ٛٙ‬ثٍٓ ؿٕب ٔیش‪٘ٛ‬یذ ‪ ٓٞ‬ثب ایٗ س‪ٚ‬ؿی و‪ٌ ٝ‬فشٓ دس ثیٗ سً ‪ٞ‬بی ‪ HTML‬اص ‪ CSS‬اػشفبد‪ٜ‬‬
‫و‪ٙ‬یذ ‪ ٓٞ‬س‪ٚ‬ؽ ‪ٞ‬بی دیٍ‪ ٝ‬دس وذ ٘‪ٛ‬یؼی خ‪ٛ‬د ‪ٕٞ ٚ C++‬ـ‪ٙ‬یٗ س‪ٚ‬ؽ دػشی دس لؼٕز عشاكی س‪ٛ‬ػظ ‪ Qt‬ث‪ٝ‬‬
‫ك‪ٛ‬سر ‪ٞ‬بی صیش‪..‬‬

‫س‪ٚ‬ؽ ا‪ َٚ‬س‪ ٚ‬و‪ ٝ‬دیذیٗ‪...‬س‪ٚ‬ؽ د‪ ْٚ‬ؿغ‪ٛ‬سی‪ ٝ‬دس س‪ٚ‬ؽ د‪ ْٚ‬ؿٕب ٔیش‪٘ٛ‬یذ اص خبكیز ‪setStyleSheet‬ثشای‬
‫و‪ٙ‬ششَ ‪ٞ‬ب ‪ ٚ‬اؿیبئ اػشفبد‪ ٜ‬و‪ٙ‬یذ ٔظال ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫;)";‪ui->label->setStyleSheet("color: #ff0000‬‬

‫سغییشی و‪ ٝ‬وشد‪ ٜ‬سً٘ ٔلش‪ٛ‬یبر ‪ label‬لشٔض ؿذ‪ ٜ‬و‪ ٝ‬س‪ٛ‬ػظ خبكیز ‪ CSS‬ث‪ٟ‬ؾ سثظ دادیٓ‪.‬‬

‫كبال ٔیـ‪ ٝ‬ثب ی‪ ٝ‬س‪ٚ‬ؽ دیٍ‪ ٝ‬ای ‪ ٓٞ‬ایٗ وبس س‪ ٚ‬وشد ا‪ ٓ٘ٚ‬ای‪ ٝٙ‬س‪ٚ‬ی فشْ ‪ ٚ‬س‪ٚ‬ی ‪label‬ساػز وّیه ٔیى‪ٙ‬یٓ ‪ٚ‬‬
‫ٌضی‪ Change StyleSheet ٝٙ‬س‪ ٚ‬ا٘شخبة ٔیى‪ٙ‬یٓ دس ایٗ كبِز ٔیش‪٘ٛ‬یذ ثش اػبع ٘بْ والع ‪ ٚ‬ؿ‪ٙ‬بػ‪ٞ ٝ‬ش‬
‫یه خبكیز ‪ ٚ‬اػشبیُ س‪ ٚ‬ػز و‪ٙ‬یذ‪.‬‬

‫ٔظال وذ صیش س‪ ٚ‬دس وبدس ثبص ؿذ‪ٚ ٜ‬اسد و‪ٙ‬یذ ‪ ٚ‬سبییذ و‪ٙ‬یذ‪:‬‬

‫;)‪color: rgb(0, 85, 255‬‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 39‬‬

‫سً٘ خش‪ٚ‬ػی ٔیـ‪ ٝ‬آثی‪...‬‬

‫دس وُ ثبیذ ثٍٓ ؿٕب ٔیش‪ٛ‬ییذ وال وذ‪ٞ‬بی ‪ CSS‬س‪ ٚ‬دس ٔشكّ‪ ٝ‬عشاكی ‪ٕٞ ٚ‬ـ‪ٙ‬یٗ وذ ٘‪ٛ‬یؼی ث‪ ٝ‬ثش٘بٔش‪ ٖٛ‬سثظ‬
‫ثذیٗ ‪ ٚ‬یب دس ٘‪ٟ‬بیز ی‪ ٝ‬والع ‪ٞ‬بی دسػز كؼبثی ث‪ٛٙ‬یؼیذ ثشای اػشبیُ ثش٘بٔش‪ ٚ ٖٛ‬وّی وبسای دیٍ‪.ٝ‬‬

‫هرحلِ ّفتن ‪ٔ :‬ؼشفی ‪ ٚ‬وبس ثب الی‪ٞ ٝ‬بی افمی ‪ ٚ‬ػٕ‪ٛ‬دی‬

‫دس ساثغ‪ ٝ‬ثب ایٗ لؼٕز یىٓ س‪ٛ‬ضیلبسی ثذْ و‪ٞ ٝ‬ذف ؿ‪ ٝ‬ؿیضی ‪ٞ‬ؼز ‪ ٚ‬ثؼذ ثشیٓ ػشاؽ آٔ‪ٛ‬صؽ‪.‬‬

‫خت سبكبال ؿ‪ٙ‬یذیٗ ‪ ٚ‬دیذیٗ و‪ ٝ‬دس ٘شْ افضاس ‪ٞ‬ب س‪ٙ‬ظیٕبر د‪ٙ‬ؼش‪ٞ ٜ‬ب ‪ٕٞ ٚ‬ـ‪ٙ‬یٗ الی‪ٞ ٝ‬ب س‪ٛ‬ػظ ‪ Re-size‬ؿذٖ‬
‫ك‪ٛ‬سر ٔیٍیشٖ ‪ ٚ‬دس ػیٗ سغییش ا٘ذاص‪ ٜ‬آثؼىز ‪ٞ‬ب ‪ ٚ‬و‪ٙ‬ششَ ‪ٞ‬بی ٔ‪ٛ‬ػ‪ٛ‬د ثش س‪ٚ‬ی فشْ ٔش‪ٙ‬بػت ثب سغییشار ا٘ذاص‪ ٜ‬ث‪ٝ‬‬
‫خ‪ٛ‬ثی ٔ‪ٙ‬ظٓ ‪ ٚ‬سغییش ٔیى‪ٙٙ‬ذ دس ایٗ كبِز ٔب ٔیٍیٓ سٕبٔی و‪ٙ‬ششَ ‪ٞ‬بی ٔ‪ٛ‬ػ‪ٛ‬د س‪ٚ‬ی الی‪ ٝ‬س‪ٙ‬ظیٓ ؿذ‪ ٜ‬ا٘ذ‪.‬‬

‫ثشای ؿش‪ٚ‬ع دش‪ٚ‬ط‪ ٜ‬ای س‪ ٚ‬ایؼبد ٔیى‪٘ ٚ ٓٙ‬بٔؾ س‪ٔ ٚ‬یضاسْ ‪ٔ MyLayout‬یش‪٘ٛ‬یٓ ایٗ دش‪ٚ‬ط‪ ٜ‬س‪ ٚ‬ثذ‪widget ٖٚ‬‬
‫‪ ٓٞ‬ایؼبد و‪ٙ‬یٓ ؿ‪ ٖٛ‬دس ایٗ ٔشكّ‪ ٝ‬اص وذ ٘‪ٛ‬یؼی ثشای ایؼبد فشْ ‪ ٚ‬الی‪ٞ ٝ‬ب اػشفبد‪ ٜ‬خ‪ٛ‬ا‪ٞ‬یٓ وشد‪.‬‬

‫ثجی‪ٙ‬یذ لجُ اص ‪ٞ‬ش ؿیضی ٔٗ ٔیخ‪ٛ‬اْ یه فشٔی ث‪ ٝ‬ػ‪ٛٙ‬اٖ د‪ٙ‬ؼش‪ ٜ‬ایؼبد و‪ٕٞ ٚ ٓٙ‬ـ‪ٙ‬یٗ و‪ٙ‬ششَ ‪ٞ‬بی الصْ س‪ ٚ‬ثش س‪ٚ‬ی‬
‫ا‪ ٖٚ‬فشاخ‪ٛ‬ا٘ی خ‪ٛ‬ا‪ ٓٞ‬وشد‪.‬‬

‫ثشای ایٗ وبس ٔب ثبیذ ٔ‪ٛ‬اسد الصْ س‪ Include ٚ‬و‪ٙ‬یٓ و‪ ٝ‬دس ایٗ ٔشكّ‪ٔ ٝ‬ب ٘یبص ث‪ ٝ‬والع ‪ٚ QWidget‬‬
‫‪ٞ QVBoxLayout ٚ QHBoxLayout ٚQPushButton‬ؼشیٓ‪.‬‬

‫كبال ؿغ‪ٛ‬سی اص ایٗ ٔ‪ٛ‬اسد اػشفبد‪ ٜ‬خ‪ٛ‬ا‪ٞ‬یٓ وشد ث‪ ٝ‬ك‪ٛ‬سر صیش ‪ٞ‬ؼشؾ‪.‬‬

‫اثشذا ٔٗ الذاْ ث‪ ٝ‬ػبخشٗ فشٔٓ ٔیى‪ ٓٙ‬س‪ٛ‬ػظ وذ صیش‪:‬‬

‫;‪QWidget *window = new QWidget‬‬


‫;)"‪window->setWindowTitle("Window Layout‬‬

‫دس ایٗ وذ ٔٗ ی‪ ٕٝ٘ٛ٘ ٝ‬اص ‪ٔ QWidget‬یٍیشْ ‪٘ ٚ‬بٔؾ س‪ٔ window ٚ‬یضاسْ ‪ ٚ‬دس خظ ثؼذیؾ ػ‪ٛٙ‬ا٘ی ثشای‬
‫ایٗ فشْ خ‪ٛ‬دْ س‪ٛ‬ػظ خبكیز ‪ setWindowsTitle‬ثشاؽ دس ٘ظش ٔیٍیشْ‪.‬‬

‫كبال ٔیخ‪ٛ‬اْ ‪ 3‬سب دوٕ‪ ٝ‬دس فشٔٓ لشاس ثذْ ث‪ ٝ‬ك‪ٛ‬سر صیش ثشای ‪ٞ‬ش وذ‪ ْٚ‬اص ‪ٔ ٕٝ٘ٛ٘ QPushButton‬یٍیشْ‪.‬‬

‫;)"‪QPushButton *button = new QPushButton("Button One‬‬


‫;)"‪QPushButton *button1 = new QPushButton("Button Two‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 40‬‬

‫;)"‪QPushButton *button2 = new QPushButton("Button Three‬‬


‫ثجی‪ٙ‬یذ دس ‪ٞ‬ش ‪ 3‬سب خظ ‪ 3 ٗٔ ٓٞ‬سب ٕ٘‪ٌ ٝ٘ٛ‬شفشٓ ثب ٘بْ ‪ٞ‬بی ٔخشّف ‪ِٚ‬ی ‪ٕٞ‬ـ‪ ٖٛ‬اص ٘‪ٛ‬ع دوٕ‪ ٝ‬یب ‪ٕٞ‬بٖ ‪Button‬‬
‫‪ٞ‬ؼش‪ٙ‬ذ‪.‬‬

‫كبال ٔٗ اٌ‪ ٝ‬فشْ س‪ٕٞ ٚ‬ی‪ٙ‬ؼ‪ٛ‬سی ‪ show‬و‪ ٓٙ‬دوٕ‪ٞ ٝ‬بی ٕ٘‪ٌ ٝ٘ٛ‬شفش‪ ٝ‬ؿذ‪ ٗٔ ٜ‬دس داخُ فشْ ٕ٘بیؾ داد‪ٜ‬‬
‫٘خ‪ٛ‬ا‪ٙٞ‬ذ ؿذ ‪ ٚ‬فشْ ٔٗ ث‪ ٝ‬ك‪ٛ‬سر دیـفشم دس كذاوظش ا٘ذاص‪ٕ٘ ٜ‬بیؾ داد‪ ٜ‬خ‪ٛ‬ا‪ٞ‬ذ ؿذ ! ‪ِٚ‬ی ‪ٞ‬ذف ٔٗ ای‪ ٝٙ‬و‪ ٝ‬ث‪ٝ‬‬
‫وٕه والع ‪ٞ‬بی افمی ‪ ٚ‬یب ػٕ‪ٛ‬دی ‪ٞButton‬ب س‪ ٚ‬دس داخُ فشْ ٕ٘بیؾ ثذْ ‪ٞ ٚ‬ـ‪ٙ‬یٗ دس ایٗ كبِز ا٘ذاص‪ٜ‬‬
‫فشْ ٔٗ ثش اػبع ایٗ والع ٔش‪ٙ‬بػت ثب ‪ 3‬دوٕ‪ٌ ٕٝ٘ٛ٘ ٝ‬شفش‪ ٝ‬ؿذ‪ ٜ‬دس داخُ الی‪ Re-Size ٝ‬خ‪ٛ‬ا‪ٞ‬ذ ؿذ‪.‬‬

‫ثش اػبع ٘یبص ٘‪ٛ‬ع الی‪ ٝ‬س‪ ٚ‬ا٘شخبة ٔیى‪ٙ‬یٓ و‪ ٝ‬ػٕ‪ٛ‬دی ثبؿ‪ ٝ‬یب افمی‪...‬‬

‫ٔٗ الی‪ ٝ‬افمی س‪ ٚ‬ا٘شخبة ٔیى‪ ٚ ٓٙ‬اصؽ ث‪ ٝ‬ك‪ٛ‬سر صیش ٕ٘‪ٔ ٝ٘ٛ‬یٍیشْ‪:‬‬

‫;‪QHBoxLayout *hlayout = new QHBoxLayout‬‬


‫كبال سب ای‪ٙ‬ؼب الی‪ ٗٔ ٝ‬ػبخش‪ ٝ‬ؿذ‪ِٚ ٜ‬ی ثبص‪ ٓٞ‬دس ایٗ ٔشكّ‪ ٝ‬ؿیضی ٕ٘بیؾ داد‪٘ ٜ‬خ‪ٛ‬ا‪ٞ‬ذ ؿذ ثشای ایٗ أش ثبیذ ث‪ٝ‬‬
‫ك‪ٛ‬سر صیش و‪ٙ‬ششَ ‪ٞ‬بی خ‪ٛ‬دْ س‪ ٚ‬ثش اػبع الی‪ ٝ‬سؼشیف ؿذ‪ ٜ‬كذا ثض٘ٓ‪.‬‬

‫;)‪hlayout->addWidget(button‬‬
‫;)‪hlayout->addWidget(button1‬‬
‫;)‪hlayout->addWidget(button2‬‬
‫دلز و‪ٙ‬یذ ‪ ...‬ای‪ٙ‬ؼب ٔٗ ٔیٍٓ دوٕ‪ 3...2..1 ٝ‬س‪ٞ ٚ‬ش ‪ 3‬سبؿ‪ ٖٛ‬س‪ ٚ‬ث‪ ٝ‬الی‪ ٗٔ ٝ‬اضبف‪ ٝ‬وٗ‪.‬‬

‫كبال سب ای‪ٙ‬ؼب و‪ٙ‬ششَ ‪ٞ‬بی ٔٗ ث‪ ٝ‬الی‪ ٝ‬اخشلبف داد‪ ٜ‬ؿذ‪ِٚ ٜ‬ی خ‪ٛ‬د الی‪ ٝ‬ی‪ٛٔ ٝ‬سدی داس‪ !!! ٜ‬ا‪ ٓ٘ٚ‬ای‪ ٝٙ‬و‪ ٝ‬ثشای‬
‫ٕ٘بیؾ الی‪ ٝ‬دس داخُ ‪ window‬و‪ ٝ‬اص ٘‪ٛ‬ع ‪ QWidget‬دس ٘ظش ٌشفشٓ ٕ٘بیؾ داد‪٘ ٜ‬خ‪ٛ‬ا‪ٞ‬ذ ؿذ ! دغ ثبیذ‬
‫ؿىبس و‪ ٓٙ‬؟ خت خیّی ساكز ثبیذ ٔٗ الی‪ ٝ‬ای و‪ ٝ‬سؼشیف وشدْ س‪ ٚ‬ث‪ window ٝ‬سخلیق ثذْ ث‪ ٝ‬ك‪ٛ‬سر‬
‫صیش‪...‬‬

‫;)‪window->setLayout(hlayout‬‬
‫‪ ٚ‬دس ا٘ش‪ٟ‬ب ثشای ای‪ٙ‬ى‪ ٝ‬فشْ ٔٗ ث‪ٕ٘ ٝ‬بیؾ دس ثیبد ثبیذ ث‪ ٝ‬ك‪ٛ‬سر صیش ایٗ وذ س‪ ٓٞ ٚ‬فشأ‪ٛ‬ؽ ٘ى‪:ٓٙ‬‬

‫;)(‪window->show‬‬
‫٘شیؼ‪ ٝ‬ایٗ وبسا ٔیـ‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 41

:‫ذ‬ٙٙ‫ب سغییش ٔیى‬ٞ ‫سر صیش وذ‬ٛ‫ ك‬ٝ‫یٓ ث‬ٙ‫ و‬ٜ‫دی اػشفبد‬ٕٛ‫ اص كبِز ػ‬ٌٝ‫ ا‬ٚ

QVBoxLayout *vlayout = new QVBoxLayout;

vlayout->addWidget(button);
vlayout->addWidget(button1);
vlayout->addWidget(button2);

window->setLayout(vlayout);
: ‫ػی‬ٚ‫خش‬

ٚ
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 42

:‫سر صیش‬ٛ‫ ك‬ٝ‫وذ وّی ث‬

#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>

int main(int argc, char *argv[])


{
QApplication a(argc, argv);

QWidget *window = new QWidget;


window->setWindowTitle("Window Layout");

QPushButton *button = new QPushButton("Button One");


QPushButton *button1 = new QPushButton("Button Two");
QPushButton *button2 = new QPushButton("Button Three");

QHBoxLayout *hlayout = new QHBoxLayout;

hlayout->addWidget(button);
hlayout->addWidget(button1);
hlayout->addWidget(button2);

window->setLayout(hlayout);
window->show();

return a.exec();
}
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 43‬‬

‫هرحلِ ّطتن ‪ٔ :‬ؼشفی ‪ ٚ‬وبس ثب الی‪ٞ ٝ‬بی ‪ Grid‬دس عشاكی فشْ‬

‫دس ایٗ ٔشكّ‪ ٝ‬للذ داسیٓ ثب الی‪ٞ ٝ‬بی ‪ Grid‬وبس و‪ٙ‬یٓ ایٗ الی‪ ٝ‬ؿی ‪ٞ‬ؼشؾ ‪ ٚ‬ث‪ ٝ‬ؿ‪ ٝ‬دسدی ٔیخ‪ٛ‬س‪ ٜ‬؟‬

‫خت ثبیذ ای‪ٙ‬غ‪ٛ‬س ثٍٓ ؿٕب س‪ٚ‬ی فشْ ‪ٞ‬ش و‪ٙ‬ششِی س‪ ٚ‬دسع ٔیى‪ٙ‬یذ ٔؼّٕب ا٘شظبس ایٗ س‪ ٚ‬داسیذ و‪ ٝ‬و‪ٙ‬ششَ ‪ٞ‬بی ؿٕب ‪ٚ‬‬
‫اؿیبئی و‪ ٝ‬س‪ٚ‬ی فشْ كذا صد‪ ٜ‬ؿذ‪ ٜ‬ث‪ ٝ‬ك‪ٛ‬سر ٔ‪ٙ‬ظٓ ثش اػبع الی‪ٞ ٝ‬بی س‪ٛ‬سی )‪ٙٔ (Grid‬ظٓ ثـ‪ ٝ‬یؼ‪ٙ‬ی ‪ٞ‬ش ػ‪ٛ‬س‬
‫و‪ ٝ‬فشْ س‪ ٚ‬عشاكی و‪ٙ‬یٓ ثشای ‪ٞ‬ش وذاْ اص و‪ٙ‬ششَ ‪ٞ‬ب یه ٔىب٘ی س‪ ٚ‬س‪ٚ‬ی ‪ Grid‬اخشلبف ٔیذیٓ‪.‬‬

‫ٔیشیٓ ػشاؽ ی‪ ٝ‬دش‪ٚ‬ط‪ ٜ‬ثب ٘بْ ‪ MyGridLayout‬دس ٔلّ‪ ٝ‬ا‪ َٚ‬فشٔٓ س‪ ٚ‬ایؼبد ٔیى‪ ٓٙ‬عجك وذ صیش‪:‬‬

‫;‪QWidget *window = new QWidget‬‬


‫;)"‪window->setWindowTitle("Grid Window‬‬
‫كبال ٘یبص ث‪ ٝ‬الی‪ ٝ‬س‪ٛ‬سی یب ‪ Grid ٖٕٛٞ‬داسْ ث‪ ٝ‬ك‪ٛ‬سر صیش اضبف‪ٔ ٝ‬یى‪:ٓٙ‬‬

‫;‪QGridLayout *Layout = new QGridLayout‬‬


‫كبال ؿ‪ٙ‬ذ سب و‪ٙ‬ششَ ٔیخ‪ٛ‬اْ ایؼبد و‪ ٓٙ‬سب س‪ٛ‬ی فشٔٓ ‪ ٚ‬داخُ ‪ Grid‬دسػـ‪ ٖٛ‬و‪ ٓٙ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫;)"‪QLabel *label1 = new QLabel("First name:‬‬


‫;‪QLineEdit *txtFirstName = new QLineEdit‬‬
‫;)"‪QLabel *label2 = new QLabel("Last name:‬‬
‫;‪QLineEdit *txtLastName = new QLineEdit‬‬
‫;)"‪QPushButton *button = new QPushButton("OK‬‬
‫دس ایٗ ثخؾ ٔب ی‪ ٝ‬خل‪ٛ‬كیبسی س‪ ٚ‬ثبیذ س‪ٛ‬ػ‪ ٝ‬و‪ٙ‬یٓ و‪ Grid ٝ‬ثش اػبع ا‪ ٖٚ‬و‪ٙ‬ششَ س‪ٕ٘ ٚ‬بیؾ ٔیذ‪...ٜ‬‬

‫سبثغ ث‪ ٝ‬ك‪ٛ‬سر صیش ‪ٞ‬ؼشؾ‪:‬‬

‫‪void QGridLayout::addWidget(QWidget * widget, int fromRow, int fromColumn,‬‬


‫)‪int rowSpan, int columnSpan, Qt::Alignment alignment = 0‬‬
‫خت كبال ثلض اكّی ای‪ٙ‬ؼبػز ؿغ‪ٛ‬سی ثبیذ سؼییٗ و‪ ٓٙ‬و‪ ٝ‬دس وذ‪ ْٚ‬لؼٕز اص ‪ Grid‬و‪ٙ‬ششَ ‪ٞ‬بی ٔٗ ثبیذ‬
‫ٕ٘بیؾ دیذا و‪...ٗٙ‬‬

‫دس صیش ٔب ثش اػبع ‪ٕٞ‬یٗ لب٘‪ ٖٛ‬سبثغ ‪ Grid‬ثشای ‪ٞ‬ش یه اص و‪ٙ‬ششَ ‪ٞ‬ب ؿٕبس‪ ٜ‬ای‪ٙ‬ذوغ ػّ‪ ٚ َٛ‬ػش‪٘ٛ‬ؾ س‪ٚ‬‬
‫ٔـخق وشدیٓ‪.‬‬

‫;)‪Layout->addWidget(label1,0,0‬‬
‫;)‪Layout->addWidget(txtFirstName,0,1‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 44

Layout->addWidget(label2,1,0);
Layout->addWidget(txtLastName,1,1);
Layout->addWidget(button,2,0,1,2);
‫سر ثبیذ ٔمذاس‬ٛ‫یذ دس غیش ایٗ ك‬ٙ‫ و‬ٜ‫٘یذ اػشفبد‬ٛ‫س دس ٘ظش ٍ٘شفشٗ ٔمذاس ٔیش‬ٛ‫ظ‬ٙٔ ٝ‫ ث‬0 ‫ اص ػذد‬ٝ‫ الصْ ٘جبؿ‬ٝ‫ش ػب و‬ٞ
:‫سر صیش‬ٛ‫ ك‬ٝ‫ ث‬ٝ‫ ٘شیؼؾ ٔیـ‬ٚ ‫یذ‬ٙ‫اسد و‬ٚ ... ٚ 3...2...1 ‫ی‬ٙ‫یز یؼ‬ِٛٚ‫ ثش اػبع ا‬ٚ‫س‬

...‫سار سىٕیّی وبس‬ٛ‫ دػش‬ٚ ‫ب‬ٞ ‫د‬ّٛ‫ى‬ٙ‫ ثب ای‬ٜ‫ٕشا‬ٞ ُٔ‫وذ وب‬

#include <QApplication>
#include "QLabel"
#include "QLineEdit"
#include "QLayout"
#include "QPushButton"

int main(int argc, char *argv[])


{
QApplication a(argc, argv);

QWidget *window = new QWidget;


window->setWindowTitle("Grid Window");

QGridLayout *Layout = new QGridLayout;

QLabel *label1 = new QLabel("First name:");


QLineEdit *txtFirstName = new QLineEdit;
QLabel *label2 = new QLabel("Last name:");
QLineEdit *txtLastName = new QLineEdit;
QPushButton *button = new QPushButton("OK");

Layout->addWidget(label1,0,0);
Layout->addWidget(txtFirstName,0,1);
Layout->addWidget(label2,1,0);
Layout->addWidget(txtLastName,1,1);
Layout->addWidget(button,2,0,1,2);
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 45‬‬

‫;)‪window->setLayout(Layout‬‬

‫;)(‪window->show‬‬

‫;)(‪return a.exec‬‬
‫}‬

‫هرحلِ ًْن ‪ٔ :‬ؼشفی ‪ ٚ‬وبس ثب ػذا و‪ٙٙ‬ذ‪ٞ ٜ‬ب‪Splitter‬‬

‫دس ساثغ‪ ٝ‬ثب ػذاو‪ٙٙ‬ذ‪ ٜ‬یب ‪ Splitter ٖٕٛٞ‬یىٓ س‪ٛ‬ضیلبر ثذْ ‪ٙٔ ...‬ظ‪ٛ‬س اص ایٗ اكغالف ؿیی‪ ٚ ٝ‬س‪ ٛ‬ثش٘بٔ‪ٛ٘ ٝ‬یؼی‬
‫ث‪ ٝ‬ؿ‪ ٝ‬دسدی ٔیخ‪ٛ‬س‪ ٜ‬؟ دس ساثغ‪ ٝ‬ثب ایٗ ٌضی‪ ٝٙ‬ثبیذ ای‪ٙ‬غ‪ٛ‬س ثٍٓ فشم و‪ٙ‬یذ ؿٕب فشٔی داسیذ ‪ ٚ‬فضبی فشْ ؿٕب‬
‫‪ٍٙٞ‬بْ سغییش ا٘ذاص‪ ٜ‬وّی فشق ٔیى‪ ٚ ٝٙ‬و‪ٙ‬ششَ ‪ٞ‬بی ٔ‪ٛ‬ػ‪ ٛ‬دس ا‪ٞ ٖٚ‬یؾ سغییشی ‪ٍٙٞ‬بْ سغییش ا٘ذاص‪ ٜ‬فشْ ٕ٘یى‪ٙٙ‬ذ ! ثشای‬
‫سفغ ایٗ ٔـىُ دس ك‪ٛ‬سر ٘یبص ٔیش‪٘ٛ‬یٓ ث‪ ٝ‬ك‪ٛ‬سر صیش ػُٕ و‪ٙ‬یٓ‪.‬‬

‫خت ی‪ ٝ‬دش‪ٚ‬ط‪ ٜ‬اص ٘‪ٛ‬ع ‪ Widget‬ایؼبد ٔیى‪ ٓٙ‬اػٕـ‪ٔ ٛ‬یضاسْ ‪ ٚ Splitter‬ث‪ ٝ‬ك‪ٛ‬سر صیش د‪ ٚ‬سب و‪ٙ‬ششَ س‪ٛ‬ؽ‬
‫ایؼبد ٔیى‪.ٓٙ‬‬

‫اٌ‪ ٝ‬دلز و‪ٙ‬یذ دس ٔشكّ‪ ٝ‬ا‪ َٚ‬دوٕ‪ٞ ٝ‬ب ‪ ٚ‬فشْ ٔب ٔشست ٘یؼش‪ٙ‬ذ ‪ٍٙٞ ٚ‬بْ سغییش ػبیض ‪ ٓٞ‬و‪ٙ‬ششَ ‪ٞ‬ب ‪ٕٞ‬شا‪ ٜ‬ثب فشْ‬
‫سغییشی ٕ٘یى‪ٙٙ‬ذ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 46‬‬

‫ثشای كُ ایٗ ٔ‪ٛ‬سد ثبیذ ؿىبس و‪ٙ‬یٓ ؟ خت عجك سل‪ٛ‬یش صیش ‪ٞ‬ش د‪ ٚ‬و‪ٙ‬ششَ س‪ ٚ‬ا٘شخبة ٔیى‪ ٚ ٓٙ‬ثش اػبع ٔل‪ٛ‬س‬
‫افمی ‪ ٚ‬یب ػٕ‪ٛ‬دی ػشـ‪ٔ ٖٛ‬یى‪ ٓٙ‬و‪ ٗٔ ٝ‬دس ایٗ ٔظبَ اص ٘‪ٛ‬ع ‪ ٖٕٛٞ Horizontal‬افمی ثشای ‪Splitter‬‬
‫ا٘شخبثـ‪ ٖٛ‬وشدْ‪.‬‬

‫كبال س‪ٚ‬ی فشْ وّیه ٔیى‪ٙ‬یٓ ‪ٌ ٚ‬ضی‪ Layout Horizontally ٝٙ‬س‪ ٚ‬ا٘شخبة ٔیى‪ٙ‬یٓ سب ث‪ ٝ‬ك‪ٛ‬سر صیش و‪ٙ‬ششَ‬
‫‪ٞ‬ب ثب فشْ ٔب ‪ٕٞ‬ب‪ ًٙٞ‬ثـٗ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 47‬‬

‫خت كبال ثؼذ اص اػشای فشْ ٔٗ ‪ٕٞ‬شا‪ ٜ‬ثب و‪ٙ‬ششَ ‪ٞ‬بؽ ‪ٕٞ‬ب‪ٔ ًٙٞ‬یـ‪ٍٙٞ ٚ ٝ‬بْ سغییش ا٘ذاص‪ ٜ‬فشْ و‪ٙ‬ششَ ‪ٞ‬بٔٓ سغییش‬
‫ا٘ذاص‪ٔ ٜ‬یذٖ ‪ ٚ‬كشی اٌ‪ ٝ‬اص كبِز ‪ Move ٚ Drag‬اػشفبد‪ ٜ‬و‪ٙ‬یذ ٔیجی‪ٙ‬یذ و‪ ٝ‬خبكیز ‪ Splitter‬فؼبَ ‪ٞ‬ؼز ‪ٚ‬‬
‫ساكز ٔیـ‪ ٝ‬سغییشؽ داد‪.‬‬

‫ؿٕب عجك ایٗ آٔ‪ٛ‬صؽ ٔیش‪٘ٛ‬یذ ٘‪ ٝ‬س‪ٟٙ‬ب و‪ٙ‬ششَ ثّى‪ ٝ‬س‪ ٛ‬ثش٘بٔ‪ٞ ٝ‬بس‪ٛ٘ ٖٛ‬اس اثضاس ‪ٞ‬بیی س‪ِٛ‬یذ و‪ٙ‬یذ و‪ٔ ٝ‬ظُ ‪ٕٞ‬یٗ ٘‪ٛ‬اس‬
‫اثضاس ‪ٞ‬بی ٔلیظ ثش٘بٔ‪ٛ٘ ٝ‬یؼی ػفبسؿی ‪ ٚ‬لبثّیز ‪ Splitter‬داؿش‪ ٝ‬ثبؿ‪ٙ‬ذ‪.‬‬

‫هرحلِ دّن ‪ٔ :‬ؼشفی ‪ ٚ‬وبس ثب دایشوش‪ٛ‬سی ‪ٞ‬ب‬

‫ٔیشیٓ ػش وبس ثب دایشوش‪ٛ‬سی ! ثشای ؿش‪ٚ‬ع ی‪ ٝ‬دش‪ٚ‬ط‪ ٜ‬ایؼبد و‪ٙ‬یٓ ای‪ٙ‬جبس اص ٘‪ٛ‬ع ‪Console‬ؿ‪٘ ٖٛ‬یبصی ث‪ ٝ‬وبس س‪ٚ‬ی‬
‫فشْ ٘ذاسیٓ فؼال فمظ ٔیخ‪ٛ‬اْ دس ساثغ‪ ٝ‬ثب ٘ل‪ ٜٛ‬ثشسػی دایشوش‪ٛ‬سی س‪ٛ‬ضیق ثذْ‪.‬‬

‫دس ‪ Qt‬ثشای كذا صدٖ س‪ٛ‬اثغ وبس ثب دایشوش‪ٛ‬سی ثبیذ اص ‪ QDir‬اػشفبد‪ ٜ‬و‪ٙ‬یٓ‪.‬‬

‫ثشای ٔظبَ ٔٗ اثشذا ای‪ٙ‬ىّ‪ٛ‬د ٔیى‪ QDir ٓٙ‬س‪ ٚ ٚ‬اصؽ ی‪ٔ ٕٝ٘ٛ٘ ٝ‬یؼبصْ ‪ٔ ٚ‬ؼیشی و‪ٔ ٝ‬یخ‪ٛ‬اْ ثشسػی و‪ ٓٙ‬س‪ٚ‬‬
‫ٔـخق ٔیى‪ ٓٙ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫>‪#include <QCoreApplication‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 48‬‬

‫>‪#include <QDebug‬‬
‫>‪#include <QDir‬‬

‫)][‪int main(int argc, char *argv‬‬


‫{‬
‫;)‪QCoreApplication a(argc, argv‬‬

‫;)"‪QDir MyDir("c:/‬‬
‫;)(‪qDebug() << MyDir.exists‬‬

‫;)(‪return a.exec‬‬
‫}‬
‫دس ای‪ٙ‬ؼب ؿ‪ ٝ‬وشدیٓ ؟ ٔٗ اص والع ‪ QDir‬یه ٕ٘‪ٌ ٝ٘ٛ‬شفشٓ ‪ٔ ٚ‬ؼیشی و‪ ٝ‬الصْ داسْ ثشای ثشسػی و‪ٖٕٛٞ ٝ‬‬
‫دایشوش‪ٛ‬سی ‪ٞ‬ؼشؾ س‪ ٚ‬ث‪ٟ‬ؾ دادْ ‪ ٚ‬دس ٔشكّ‪ ٝ‬ثؼذؽ اٌش ٔؼیشی و‪ ٗٔ ٝ‬دادْ س‪ ٚ‬سـخیق ثذ‪ ٜ‬ثشاْ ٔمذاس ث‪ِٛ‬یٗ‬
‫‪true‬س‪ ٚ ٚ‬اٌش ٘‪ٔ ٝ‬مذاس ث‪ِٛ‬یٗ ‪false‬س‪ٔ ٚ‬یذ‪.ٜ‬‬

‫ػبخشبسؽ ث‪ ٝ‬ك‪ٛ‬سر صیش ‪ٞ‬ؼز‪:‬‬

‫‪bool QDir::exists(const QString & name) const‬‬

‫اٌش ٔؼیش ٔ‪ٛ‬ػ‪ٛ‬د ثبؿ‪ ٚ True ٝ‬اٌش ٘جبؿ‪ False ٝ‬س‪ ٚ‬ثشٌـز ٔیذ‪.ٜ‬‬

‫;)(‪qDebug() << MyDir.exists‬‬


‫‪ ٖٕٛٞqDebug‬ػُٕ ؿبح س‪ ٚ‬ا٘ؼبْ ٔیذ‪ ٜ‬دس ٔ‪ٛ‬سد ایٗ س‪ٛ‬ضیلبر ٘ذادْ ‪ِٚ‬ی وبسؽ دلیمب ٔظُ ‪std::cout‬‬
‫‪ٞ‬ؼشؾ و‪ ٝ‬دس كبِز اػشب٘ذاسد ٔیـ‪ ٝ‬ث‪ ٝ‬ایٗ ك‪ٛ‬سر اصؽ ؿبح ٌشفز‪:‬‬

‫;)(‪std::cout << MyDir.exists‬‬

‫خت دس ایٗ ٔشكّ‪ ٝ‬للذ داسْ سؼذاد دسای‪ٞ ٛ‬بیی و‪ ٝ‬س‪ٚ‬ی ػیؼشٓ ٔٗ فؼبَ ‪ٞ‬ؼش‪ٙ‬ذ س‪ٕ٘ ٚ‬بیؾ ثذْ‪.‬‬

‫ث‪ ٝ‬ك‪ٛ‬سر صیش ی‪ ٕٝ٘ٛ٘ ٝ‬اص ‪ ٚ QDir‬ی‪ ٕٝ٘ٛ٘ ٝ‬ثشای ِیؼز وشدٖ دسای‪ٞ ٛ‬بْ اص ‪ٌ ٚQFileInfo‬شفشٗ‬
‫اعالػبسـ‪ٔ ٖٛ‬یٍیشْ ‪ ٚ‬داخُ یه كّم‪ ٝ‬س‪٘ٚ‬ذ س‪ ٚ‬سب ػبیی و‪ ٝ‬الصٔ‪ ٝ‬سىشاس ٔیى‪.ٓٙ‬‬

‫;‪QDir MyDir‬‬
‫))(‪foreach (QFileInfo MyItem,MyDir.drives‬‬
‫{‬
‫;)(‪qDebug() << MyItem.absoluteFilePath‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 49

}
ٝ‫ظیف‬ٚ ‫ػظ‬ٚ ٗ‫ ای‬ٝ‫ ثیـشش و‬ٝ٘ ٜ‫ٖ ٔیذ‬ٛ‫ سب ٘ـ‬3 ْ‫ داس‬ٛ‫ سب دسای‬3 ٖٛ‫ ٔٗ ؿ‬ٝ‫سر صیش اِجش‬ٛ‫ ك‬ٝ‫ ث‬ٝ‫٘شیؼؾ ٔیـ‬
.‫ػی‬ٚ‫ خش‬ٝ‫ ث‬ٜ‫ ثبصٌـز ٔیذ‬ٚ‫ س‬ٝ‫ع‬ٛ‫ اعالػبر ٔشث‬ٝ‫ؼشؾ و‬ٞabsoluteFilePath

"C:/"
"D:/"
"E:/"
:‫سر صیش‬ٛ‫ ك‬ٝ‫وذ وّی ث‬

#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QFileInfo>

int main(int argc, char *argv[])


{
QCoreApplication a(argc, argv);

QDir MyDir;
foreach (QFileInfo MyItem,MyDir.drives())
{
qDebug() << MyItem.absoluteFilePath();

return a.exec();
}

‫ خَاًذى ٍ ًَضتي در آى ّا‬/ ‫ هعرفی ٍ کار تا فایل ّا‬: ‫هرحلِ یازدّن‬

(Read)‫ ٍ خَاًذى هحتَیات فایل‬C++/Qt ‫در ایي قسوت هیرین سراغ کار تا فایل ّا در‬

:‫سر صیش‬ٛ‫ ك‬ٝ‫ٓ ث‬ٙ‫ا٘ی ٔیى‬ٛ‫ فشاخ‬ٚ‫سد ٘ظشْ س‬ٛٔ ‫بی‬ٞ ‫اثشذا والع‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 50‬‬

‫>‪#include <QFile‬‬
‫>‪#include <QString‬‬
‫>‪#include <QTextStream‬‬
‫كبال دس ٘ظش داسْ ی‪ ٝ‬فبیّی ایؼبد و‪ٔ ٚ ٓٙ‬لش‪ٛ‬یبر داخُ ا‪ ٖٚ‬س‪ ٚ‬ثخ‪ ٓ٘ٛ‬ثشای ایٗ ٔ‪ٙ‬ظ‪ٛ‬س ی‪ ٝ‬سبثغ ‪ٔ Read‬یؼبصْ ث‪ٝ‬‬
‫ك‪ٛ‬سر صیش‪...‬‬

‫)‪void Read(QString Filename‬‬


‫{‬
‫;)‪QFile MyFile(Filename‬‬

‫))‪if(!MyFile.open(QFile::ReadOnly | QFile::Text‬‬
‫{‬
‫;"‪qDebug() << "could not open file for reading‬‬
‫;‪return‬‬
‫}‬

‫;)‪QTextStream in(&MyFile‬‬
‫;)(‪QString MyText = in.readAll‬‬

‫;‪qDebug() << MyText‬‬

‫;)(‪MyFile.close‬‬
‫}‬
‫كبال دس ایٗ لؼٕز سبثؼی و‪ٛ٘ ٝ‬ؿشٓ س‪ ٚ‬فشاخ‪ٛ‬ا٘ی ٔیى‪ ٚ ٓٙ‬ادسع ٔؼیش ‪ ٚ‬فبیّٓ س‪ٔ ٚ‬ـخق ٔیى‪ ٓٙ‬سب ٔلش‪ٛ‬یبر‬
‫ا‪ ٖٚ‬س‪ ٚ‬ثشاْ ٕ٘بیؾ ثذ‪ ٜ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫)][‪int main(int argc, char *argv‬‬


‫{‬
‫;)‪QCoreApplication a(argc, argv‬‬

‫;)"‪Read("C:/TEST/test.txt‬‬

‫;)(‪return a.exec‬‬
‫}‬
‫خش‪ٚ‬ػی ؿذ ث‪ ٝ‬ك‪ٛ‬سر صیش ‪ٞ‬ش ؿیضی و‪ ٝ‬دس داخُ فبیُ ‪ٞ‬ؼشؾ‪:‬‬

‫")‪"My name is Kambiz Asadzadeh :‬‬


‫لجُ اص ‪ٞ‬ش ؿیض س‪ٛ‬ضیق ثذْ و‪ ٝ‬ثشای دسیبفز ٘بْ ‪ٔ ٚ‬ؼیش فبیُ ٔ‪ٛ‬سد ٘ظش دس سبثغ ث‪ ٝ‬ك‪ٛ‬سر صیش ثبیذ ٘‪ٛ‬ؿش‪ ٝ‬ثـ‪:ٝ‬‬

‫)‪void Read(QString Filename‬‬


‫یؼ‪ٙ‬ی ٘بْ ‪ٔ ٚ‬ؼیش فبیُ س‪ ٚ‬اص ٘‪ٛ‬ع سؿش‪ ٝ‬دس ٘ظش ثٍیش ‪ٚ ٚ‬اسد سبثغ ثشای دشداصؽ ‪ٞ‬بی ثؼذی ثىٗ‪.‬‬

‫كبال ثشیٓ ػشاؽ س‪ٛ‬ضیلبر‪ ....‬دس ٔشكّ‪ ٝ‬ا‪ َٚ‬دس ساثغ‪ ٝ‬ثب سبثغ ‪ Read‬س‪ٛ‬ضیق ثذْ‪....‬‬

‫ٔٗ اثشذا ثشای ٘‪ٛ‬ؿشٗ ‪ ٚ‬یب خ‪ٛ‬ا٘ذٖ دس داخُ یه فبیُ ثبیذ اص والع ‪ QFile‬یه ٕ٘‪ ٝ٘ٛ‬ثٍیشْ سب ثش‪ ٓ٘ٛ‬ایٗ وبس‬
‫س‪ ٚ‬ا٘ؼبْ ثذْ دغ ث‪ ٝ‬ك‪ٛ‬سر صیش اثشذا ی‪ٌ ٕٝ٘ٛ٘ ٝ‬شفشٓ‪:‬‬

‫;)‪QFile MyFile(Filename‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 51‬‬

‫دس خظ ثؼذی ی‪ ٝ‬دػش‪ٛ‬س ؿشعی آ‪ٚ‬سدْ ‪ٌ ٚ‬فشٓ و‪ ٝ‬اٌش فبیّٓ س‪ ٚ‬اص ٘‪ٛ‬ع ٔش‪ٙ‬ی ‪ ٚ‬دس كبِز فمظ خ‪ٛ‬ا٘ذ٘ی دس ٘ظش‬
‫ثٍیش اٌش فبیُ ٔٗ س‪ ٚ‬ثش اػبع ایٗ ؿشایظ سـخیق ‪ ٚ‬لبدس ث‪ ٝ‬خ‪ٛ‬ا٘ذٖ ٔلش‪ٛ‬یبر آٖ ٘ـذ دیغبْ ػذْ س‪ٛ‬ا٘بیی دس ثبص‬
‫وشدٖ ‪ ٚ‬خ‪ٛ‬ا٘ذٖ فبیُ س‪ ٚ‬ث‪ ٟٓ‬ثذ‪.ٜ‬‬

‫ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫))‪if(!MyFile.open(QFile::ReadOnly | QFile::Text‬‬
‫{‬
‫;"‪qDebug() << "could not open file for reading‬‬
‫;‪return‬‬
‫}‬
‫دس لؼٕز ثؼذ ٔٗ ثشای ای‪ٙ‬ى‪ ٝ‬ثش‪ ٓ٘ٛ‬ثب یه فبیُ ٔش‪ٙ‬ی ‪ ٚ‬سؿش‪ ٝ‬ای وبس و‪ ٓٙ‬و‪ٔ ٝ‬یش‪ ٝ٘ٛ‬خ‪ٛ‬ا٘ذٖ یب ٘‪ٛ‬ؿشٗ ثبؿ‪ ٝ‬ثبیذ اص‬
‫والع ‪ QTextStream‬ی‪ ٕٝ٘ٛ٘ ٝ‬ای داؿش‪ ٝ‬ثبؿٓ ‪ٚ‬ظیف‪ ٝ‬ایٗ والع اسائ‪ ٝ‬یه ساثظ ٔ‪ٙ‬بػت ثشای خ‪ٛ‬ا٘ذٖ ‪ٚ‬‬
‫٘‪ٛ‬ؿشٗ دس فبیُ ‪ٞ‬ؼش‪ٙ‬ؾ ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫;)‪QTextStream in(&MyFile‬‬
‫كبال دس لؼٕز ثؼذ ٔیٍٓ سٕبْ ٔلش‪ٛ‬یبسی و‪ ٝ‬دس فبیُ ‪ٚ‬ػ‪ٛ‬د داس‪ ٜ‬س‪ ٚ‬ثشاْ ثٍیش ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫;)(‪QString MyText = in.readAll‬‬


‫دس لؼٕز ثؼذ دػش‪ٛ‬س ؿبح ٔلش‪ٛ‬ای فبیُ س‪ ٚ‬دادْ ‪ ٚ‬دس ٘‪ٟ‬بیشؾ ‪ ٓٞ‬دػش‪ٛ‬س ثؼشٗ فبیُ س‪ ٚ‬ثشاؽ اسػبَ وشدْ ث‪ٝ‬‬
‫ك‪ٛ‬سر صیش‪:‬‬

‫;‪qDebug() << MyText‬‬

‫;)(‪MyFile.close‬‬
‫سب ای‪ٙ‬ؼب ٔٗ ٘‪ ٝ‬فبیُ س‪ٔ ٝ٘ ٚ ٚ‬ؼیش فبیّٓ س‪ٔ ٚ‬ـخق ٘ىشدْ اِجش‪ ٝ‬ایٗ ٔیـذ ٔٗ دس داخُ خ‪ٛ‬د سبثغ ایٗ وبس س‪ ٚ‬و‪ٓٙ‬‬
‫‪ِٚ‬ی ثشای ث‪ٟ‬ی‪ ٝٙ‬ؿذٖ ٔبیّٓ ث‪ ٝ‬ك‪ٛ‬سر سبثغ ‪ ٚ‬فمظ ‪ٍٙٞ‬بْ كذا صدٖ سبثغ ٔـخق و‪ ٓٙ‬و‪ ٝ‬اص ؿ‪ٔ ٝ‬ؼیشی ؿ‪ ٝ‬فبیّی‬
‫ثبص و‪ٔ ٚ ٝٙ‬لش‪ٛ‬ای ا‪ ٖٚ‬س‪ ٚ‬ثشاْ ٕ٘بیؾ ثذ‪ ٜ‬ثشای ایٗ اس ث‪ ٝ‬ك‪ٛ‬سر صیش ػُٕ ٔیى‪:ٓٙ‬‬

‫;)"‪Read("C:/TEST/test.txt‬‬
‫اثشذا ٘بْ سبثؼی و‪ ٝ‬ػبخشٓ ‪ ٚ‬ثؼذ ٔؼیشؽ ‪ٕٞ‬شا‪ ٜ‬ثب ٘بْ ‪ ٚ‬دؼ‪٘ٛ‬ذ فبیّٓ س‪ٔ ٚ‬ـخق وشدْ‪.‬‬

‫وذ وبُٔ ثشای خ‪ٛ‬ا٘ذٖ یه فبیُ دس یه ٔؼیش ٔـخق ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫>‪#include <QCoreApplication‬‬
‫>‪#include <QDebug‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 52

#include <QFile>
#include <QString>
#include <QTextStream>

void Read(QString Filename)


{
QFile MyFile(Filename);

if(!MyFile.open(QFile::ReadOnly | QFile::Text))
{
qDebug() << "could not open file for reading";
return;
}

QTextStream in(&MyFile);
QString MyText = in.readAll();

qDebug() << MyText;

MyFile.close();
}

int main(int argc, char *argv[])


{
QCoreApplication a(argc, argv);

Read("C:/TEST/test.txt");

return a.exec();
}

(Write)‫ ٍ ًَضتي در داخل فایل‬C++/Qt ‫در ایي قسوت هیرین سراغ کار تا فایل ّا در‬

:‫سر صیش‬ٛ‫ ك‬ٝ‫ٓ ث‬ٙ‫ا٘ی ٔیى‬ٛ‫ فشاخ‬ٚ‫سد ٘ظشْ س‬ٛٔ ‫بی‬ٞ ‫اثشذا والع‬

#include <QFile>

#include <QString>

#include <QTextStream>
ٝ‫ ٔیؼبصْ ث‬Write ‫ سبثغ‬ٝ‫س ی‬ٛ‫ظ‬ٙٔ ٗ‫٘ٓ ثشای ای‬ٛ‫ ثخ‬ٚ‫ٖ س‬ٚ‫یبر داخُ ا‬ٛ‫ ٔلش‬ٚ ٓٙ‫ فبیّی ایؼبد و‬ٝ‫كبال دس ٘ظش داسْ ی‬
...‫سر صیش‬ٛ‫ك‬

void Write(QString Filename)


{
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 53‬‬

‫;)‪QFile MyFile(Filename‬‬

‫))‪if(!MyFile.open(QFile::WriteOnly | QFile::Text‬‬
‫{‬
‫;"‪qDebug() << "could not open file for reading‬‬
‫;‪return‬‬
‫}‬

‫;)‪QTextStream out(&MyFile‬‬
‫;"‪out << "Hello my friend :D‬‬
‫;"!‪std::cout << "The text is written‬‬

‫;)(‪MyFile.flush‬‬
‫;)(‪MyFile.close‬‬
‫}‬
‫كبال دس ایٗ لؼٕز سبثؼی و‪ٛ٘ ٝ‬ؿشٓ س‪ ٚ‬فشاخ‪ٛ‬ا٘ی ٔیى‪ ٚ ٓٙ‬آدسع ٔؼیش ‪ ٚ‬فبیّٓ س‪ٔ ٚ‬ـخق ٔیى‪ ٓٙ‬سب ٔلش‪ٛ‬یبر‬
‫ا‪ ٖٚ‬س‪ ٚ‬ثشاْ ٕ٘بیؾ ثذ‪ ٜ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫)][‪int main(int argc, char *argv‬‬


‫{‬
‫;)‪QCoreApplication a(argc, argv‬‬

‫;)"‪Write("C:/TEST/test.txt‬‬

‫;)(‪return a.exec‬‬
‫}‬
‫خش‪ٚ‬ػی ؿذ ث‪ ٝ‬ك‪ٛ‬سر صیش ‪ٞ‬ش ؿیضی و‪ ٝ‬دس داخُ فبیُ ‪ٞ‬ؼشؾ‪:‬‬

‫!‪The text is written‬‬


‫‪ ٚ‬اٌش داخُ فبیُ خ‪ٛ‬دس‪ ٖٛ‬سا ثبص و‪ٙ‬یذ خ‪ٛ‬ا‪ٞ‬یذ دیذ و‪ٔ ٝ‬شٗ صیش دس دس‪ ٖٚ‬اٖ ٘‪ٛ‬ؿش‪ ٝ‬ؿذ‪ ٜ‬اػز‪:‬‬

‫‪Hello my friend :D‬‬


‫كبال ثشیٓ ػشاؽ س‪ٛ‬ضیلبر‪ ....‬دس ٔشكّ‪ ٝ‬ا‪ َٚ‬دس ساثغ‪ ٝ‬ثب سبثغ ‪ Write‬س‪ٛ‬ضیق ثذْ‪....‬‬

‫ٔٗ اثشذا ثشای ٘‪ٛ‬ؿشٗ ‪ ٚ‬یب خ‪ٛ‬ا٘ذٖ دس داخُ یه فبیُ ثبیذ اص والع ‪ QFile‬یه ٕ٘‪ ٝ٘ٛ‬ثٍیشْ سب ثش‪ ٓ٘ٛ‬ایٗ وبس‬
‫س‪ ٚ‬ا٘ؼبْ ثذْ دغ ث‪ ٝ‬ك‪ٛ‬سر صیش اثشذا ی‪ٌ ٕٝ٘ٛ٘ ٝ‬شفشٓ‪:‬‬

‫;)‪QFile MyFile(Filename‬‬
‫دس خظ ثؼذی ی‪ ٝ‬دػش‪ٛ‬س ؿشعی آ‪ٚ‬سدْ ‪ٌ ٚ‬فشٓ و‪ ٝ‬اٌش فبیّٓ س‪ ٚ‬اص ٘‪ٛ‬ع ٔش‪ٙ‬ی ‪ ٚ‬دس كبِز فمظ ٘‪ٛ‬ؿش‪ٙ‬ی دس ٘ظش ثٍیش‬
‫اٌش فبیُ ٔٗ س‪ ٚ‬ثش اػبع ایٗ ؿشایظ سـخیق ‪ ٚ‬لبدس ث‪ٛ٘ ٝ‬ؿشٗ ٔلش‪ٛ‬یبر آٖ ٘ـذ دیغبْ ػذْ س‪ٛ‬ا٘بیی دس ثبص وشدٖ‬
‫‪ٛ٘ ٚ‬ؿشٗ فبیُ س‪ ٚ‬ث‪ ٟٓ‬ثذ‪.ٜ‬‬

‫ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫))‪if(!MyFile.open(QFile::WriteOnly | QFile::Text‬‬
‫{‬
‫;"‪qDebug() << "could not open file for writing‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 54‬‬

‫;‪return‬‬
‫}‬
‫دس لؼٕز ثؼذ ٔٗ ثشای ای‪ٙ‬ى‪ ٝ‬ثش‪ ٓ٘ٛ‬ثب یه فبیُ ٔش‪ٙ‬ی ‪ ٚ‬سؿش‪ ٝ‬ای وبس و‪ ٓٙ‬و‪ٔ ٝ‬یش‪ ٝ٘ٛ‬خ‪ٛ‬ا٘ذٖ یب ٘‪ٛ‬ؿشٗ ثبؿ‪ ٝ‬ثبیذ اص‬
‫والع ‪ QTextStream‬ی‪ ٕٝ٘ٛ٘ ٝ‬ای داؿش‪ ٝ‬ثبؿٓ ‪ٚ‬ظیف‪ ٝ‬ایٗ والع اسائ‪ ٝ‬یه ساثظ ٔ‪ٙ‬بػت ثشای خ‪ٛ‬ا٘ذٖ ‪ٚ‬‬
‫٘‪ٛ‬ؿشٗ دس فبیُ ‪ٞ‬ؼش‪ٙ‬ؾ ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫;)‪QTextStream out(&MyFile‬‬
‫كبال دس لؼٕز ثؼذ ٔیٍٓ ٔشٗ ٔ‪ٛ‬سد ٘ظش س‪ ٚ‬دس داخُ فبیُ ٔٗ ث‪ٛٙ‬یغ ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫;"‪out << "Hello my friend :D‬‬


‫دس لؼٕز ثؼذ دػش‪ٛ‬س ؿبح دیغبْ ٘‪ٛ‬ؿش‪ ٝ‬ؿذ س‪ ٚ‬دادْ ‪ ٚ‬دس ٘‪ٟ‬بیشؾ ‪ ٓٞ‬دػش‪ٛ‬س ثؼشٗ فبیُ س‪ ٚ‬ثشاؽ اسػبَ وشدْ ث‪ٝ‬‬
‫ك‪ٛ‬سر صیش‪:‬‬

‫;"‪out << "Hello my friend :D‬‬


‫;"!‪std::cout << "The text is written‬‬

‫;)(‪MyFile.flush‬‬
‫;)(‪MyFile.close‬‬
‫لجُ اص ثؼشٗ فبیُ ٌفشٓ و‪ٞ ٝ‬شٌ‪ٔ ٝ٘ٛ‬ش‪ٙ‬ی س‪ ٚ‬و‪ ٝ‬دس فبیُ ٔیخ‪ٛ‬ای ث‪ٛٙ‬یؼی لجّؾ دس كبفظ‪ Buffer ٝ‬لشاس ثذ‪ ٜ‬دس‬
‫ایٗ ك‪ٛ‬سر ٔمذاس ‪ 1‬س‪ ٚ‬ثشاْ ثبصٌـز ٔیذ‪ ٚ ٜ‬فبیُ س‪ٔ ٚ‬یج‪ٙ‬ذ‪ ٜ‬دس غیش ای‪ٙ‬ل‪ٛ‬سر ‪ ٚ 0‬خغب!‬

‫سب ای‪ٙ‬ؼب ٔٗ ٘‪ ٝ‬فبیُ س‪ٔ ٝ٘ ٚ ٚ‬ؼیش فبیّٓ س‪ٔ ٚ‬ـخق ٘ىشدْ اِجش‪ ٝ‬ایٗ ٔیـذ ٔٗ دس داخُ خ‪ٛ‬د سبثغ ایٗ وبس س‪ ٚ‬و‪ٓٙ‬‬
‫‪ِٚ‬ی ثشای ث‪ٟ‬ی‪ ٝٙ‬ؿذٖ ٔبیّٓ ث‪ ٝ‬ك‪ٛ‬سر سبثغ ‪ ٚ‬فمظ ‪ٍٙٞ‬بْ كذا صدٖ سبثغ ٔـخق و‪ ٓٙ‬و‪ ٝ‬اص ؿ‪ٔ ٝ‬ؼیشی ؿ‪ ٝ‬فبیّی‬
‫ثبص و‪ٔ ٚ ٝٙ‬ش‪ٙ‬ی س‪ ٚ‬دس داخُ ا‪ ٖٚ‬ث‪ٛٙ‬یؼ‪ ٝ‬ثشای ایٗ اس ث‪ ٝ‬ك‪ٛ‬سر صیش ػُٕ ٔیى‪:ٓٙ‬‬

‫;)"‪[CPP]Write("C:/TEST/test.txt‬‬

‫اثشذا ٘بْ سبثؼی و‪ ٝ‬ػبخشٓ ‪ ٚ‬ثؼذ ٔؼیشؽ ‪ٕٞ‬شا‪ ٜ‬ثب ٘بْ ‪ ٚ‬دؼ‪٘ٛ‬ذ فبیّٓ س‪ٔ ٚ‬ـخق وشدْ‪.‬‬

‫وذ وبُٔ ثشای ٘‪ٛ‬ؿشٗ دس یه فبیُ دس یه ٔؼیش ٔـخق ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬


‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 55

#include <QCoreApplication>
#include <QDebug>
#include <QFile>
#include <QString>
#include <QTextStream>

void Write(QString Filename)


{
QFile MyFile(Filename);

if(!MyFile.open(QFile::WriteOnly | QFile::Text))
{
qDebug() << "could not open file for reading";
return;
}

QTextStream out(&MyFile);
out << "Hello my friend :D";
std::cout << "The text is written!";

MyFile.flush();
MyFile.close();
}

int main(int argc, char *argv[])


{
QCoreApplication a(argc, argv);

Write("C:/TEST/test.txt");

return a.exec();
}
Label‫ب‬ٞ ‫ وبس ثب ثشؿؼت‬ٚ ‫ ٔؼشفی‬: ‫هرحلِ دٍازدّن‬

.ْ‫ضیق ثذ‬ٛ‫ س‬QLabel ٖ‫ٕب‬ٞ ‫( یب‬label) ‫ششَ ثشؿؼت‬ٙ‫ ثب و‬ٝ‫اْ دس ساثغ‬ٛ‫ٔیخ‬


‫ ساكشی ثب‬ٝ‫ر ث‬ٛ‫ دس وی‬ٝ‫ و‬ٝ‫ ٔیـ‬ٜ‫اٖ ٌضاسی دس عشاكی اص ِیجُ اػشفبد‬ٛٙ‫ ػ‬ٚ ٗ‫٘یذ ثشای ٕ٘بیؾ ٔش‬ٚ‫ ٔیذ‬ٝ‫س و‬ٛ‫٘غ‬ٕٛٞ
.‫یذ‬ٙ‫٘یذ ایؼبد و‬ٛ‫ ٔیش‬ٚ‫ٖ س‬ٚ‫ی فشْ ا‬ٚ‫دسي دساح وشدٖ ایٗ ؿیئ س‬

‫ سغییش‬ٚ‫ اػٕؾ س‬objectName ‫٘یذ دس لؼٕز‬ٛ‫ؼز ؿٕب ٔیش‬ٞ label ‫سر دیـفشم‬ٛ‫ ك‬ٝ‫اػٓ ایٗ ِیجُ ث‬
.ٗ‫ثذی‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 56‬‬

‫ٔٗ ِیجّٓ س‪ ٚ‬لشاس دادْ ‪ِٚ‬ی كبال ٔیخ‪ٛ‬اْ ٔشٗ ِیجُ س‪ ٚ‬ثش اػبع ػّیم‪ ٝ‬سغییش ثذْ دس ٔلیظ عشاكی ؿٕب ٔیش‪٘ٛ‬یذ ثب‬
‫د‪ٚ‬ثبس‪ ٜ‬وّیه س‪ٚ‬ی ٔشٗ دیـفشم ِیجُ ا‪ ٖٚ‬س‪ ٚ‬سغییش ثذیٗ ‪ ٚ‬یب ای‪ٙ‬ى‪ ٝ‬اص لؼٕز ‪ Property‬خبكیز ‪ Text‬س‪ٚ‬‬
‫سغییش ثذیٗ ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫و‪ ٝ‬دس ایٗ كبِز ؿٕب ٔیش‪٘ٛ‬یذ أىبٖ سغییش ف‪٘ٛ‬ز س‪ ٚ‬دس ػشیؼششیٗ كبِز دس دػز داؿش‪ ٝ‬ثبؿیذ ‪ٕٞ ٚ‬ـ‪ٙ‬یٗ ػ‪ٛ‬سع‬
‫‪HTML‬س‪ ٚ‬دس اخشیبس داؿش‪ ٝ‬ثبؿیذ ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 57‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 58‬‬

‫‪ ٚ‬یب سا‪ ٜ‬ػ‪ ْٛ‬ای‪ ٝٙ‬و‪ ٝ‬س‪ٛ‬ػظ وذ ٘‪ٛ‬یؼی ایٗ وبس س‪ ٚ‬ا٘ؼبْ ثذیٗ دس داخُ فبیُ ‪ mainwindow.cpp‬ث‪ٝ‬‬
‫ك‪ٛ‬سر صیش‪:‬‬

‫;)"‪ui->label->setText("<b>Hello</b> , My name is Kambiz‬‬


‫خت دس س‪ٚ‬ؽ وذ ٘‪ٛ‬یؼی اٌشؿ‪ ٝ‬ؿٕب دس كبِز عشاكی سغییشاسی دادیٗ ‪ ٚ‬ثؼذ اص وذ اػشفبد‪ ٜ‬وشدیٗ ثبیذ ث‪ ٝ‬ایٗ‬
‫س‪ٛ‬ػ‪ ٝ‬و‪ٙ‬یذ و‪ ٝ‬وذ ٘‪ٛ‬ؿش‪ ٝ‬ؿذ‪ ٜ‬دس ٘ظش ٌشفش‪ٔ ٝ‬یـ‪ٞ ٚ ٝ‬ش ؿیضی و‪ ٝ‬س‪ٛ‬ػظ وذ ٘‪ٛ‬ؿشیٗ ‪ ٚ‬اػشبیُ دادیٗ دس خش‪ٚ‬ػی‬
‫ٕ٘بیؾ داد‪ ٜ‬خ‪ٛ‬ا‪ٞ‬ذ ؿذ‪.‬‬

‫‪ٞ‬ش ؿ‪ٙ‬ذ دس كبِز دػشی لبثّیز ‪ٚ‬یشایؾ ‪ ٚ‬اػشبیُ ث‪ٙ‬ذی ػشیغ دس اخشیبس ٌزاؿش‪ٔ ٝ‬یـ‪ِٚ ٝ‬ی ثشای اػشبیُ ٘‪ٛ‬یؼی‬
‫‪ٕٞ‬ب٘غ‪ٛ‬س و‪ ٝ‬لجال ٌفشٓ ٔیش‪٘ٛ‬یذ اص لبثّیز ‪ CSS ٚ HTML‬اػشفبد‪ ٜ‬و‪ٙ‬یذ‪.‬‬

‫وذ وّی ‪:‬‬

‫"‪#include "mainwindow.h‬‬
‫"‪#include "ui_mainwindow.h‬‬

‫‪MainWindow::MainWindow(QWidget *parent) :‬‬


‫‪QMainWindow(parent),‬‬
‫)‪ui(new Ui::MainWindow‬‬
‫{‬
‫;)‪ui->setupUi(this‬‬
‫;)"‪ui->label->setText("<b>Hello</b> , My name is Kambiz‬‬

‫}‬

‫)(‪MainWindow::~MainWindow‬‬
‫{‬
‫;‪delete ui‬‬
‫}‬
‫خش‪ٚ‬ػی ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 59‬‬

‫هرحلِ سیسدّن ‪ٔ :‬ؼشفی ‪ ٚ‬وبس ثب‪Button‬‬

‫دس ساثغ‪ ٝ‬ثب ‪ Button‬ثبیذ ثٍٓ یىی اص دش وبسثشد سشیٗ ؿیئ ‪ٞ‬بیی ‪ٞ‬ؼشؾ و‪ ٝ‬اصؽ اػشفبد‪ ٜ‬خ‪ٛ‬ا‪ٞ‬ذ ؿذ ‪ٚ‬‬
‫ٔخل‪ٛ‬كب سخذاد ‪ Event‬دس كبِز وّیه ؿذٖ ث‪ ٝ‬ك‪ٛ‬سر صیش دش‪ٚ‬ط‪ ٜ‬س‪ ٚ‬ایؼبد ‪ ٚ‬اص ‪QPushButton‬‬
‫اػشفبد‪ٔ ٜ‬ی و‪ٙ‬یٓ‪.‬‬

‫اص لؼٕز ‪ WidgetBox‬دوٕ‪ٛٔ ٝ‬سد ٘ظش س‪ ٚ‬ا٘شمبَ ٔیذیٓ ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫دس ایٗ ٔشكّ‪ ٝ‬ثب وّیه ساػز س‪ٚ‬ی دوٕ‪ ٚ ٝ‬ا٘شخبة ٌضی‪ٔ ٝٙ‬ـخق ؿذ‪ٔ Got to slot ٜ‬یش‪٘ٛ‬یٓ سخذاد ٔ‪ٛ‬سد‬
‫٘ظش س‪ ٚ‬ثشای دوٕ‪ ٝ‬دس ٘ظش ثٍیشیٓ‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 60‬‬

‫‪ ٚ‬دس ایٗ ٔشكّ‪ٔ ٝ‬یجی‪ٙ‬یذ و‪ ٝ‬ا٘‪ٛ‬اع سخذاد ‪ٞ‬ب ثشای ایٗ و‪ٙ‬ششَ ‪ٚ‬ػ‪ٛ‬د داس‪ ٜ‬و‪ ٗٔ ٝ‬اص سخذاد وّیه ؿذٖ اػشفبد‪ٜ‬‬
‫ٔیى‪.ٓٙ‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 61‬‬

‫ثؼذ اص ا٘ؼبْ ایٗ ٔشاكُ سبثغ ٔشث‪ٛ‬ط ث‪ ٝ‬ایٗ سخذاد ثشای ایٗ ؿ‪ٙ‬بػ‪ ٝ‬اص دوٕ‪ ٝ‬ایؼبد ٔی ؿ‪ٛ‬د ‪ ٚ‬ؿٕب ٔیش‪ٛ‬ا٘یذ وذ‬
‫ٔ‪ٛ‬سد ٘ظشس‪ ٖٛ‬س‪ ٚ‬ثشای ایٗ سخذاد اص وّیه ث‪ٛٙ‬یؼیذ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 62‬‬

‫ٔٗ وذ صیش س‪ ٚ‬ثشای ٕ٘بیؾ ی دیغبْ ‪ٚ‬اسد ٔیى‪ ٓٙ‬سب ثب وّیه ؿذٖ س‪ٚ‬ی دوٕ‪ ٝ‬دیغبْ ٕ٘بیؾ داد‪ ٜ‬ثـ‪.ٝ‬‬

‫;‪QMessageBox msgBox‬‬
‫;)"‪msgBox.setText("The document has been modified.‬‬
‫;)(‪msgBox.exec‬‬
‫هرحلِ چْاردّن ‪ٔ :‬ؼشفی ‪ ٚ‬وبس ثب‪LineEdit‬‬

‫و‪ٙ‬ششَ ‪ٕٞLineEdit‬بٖ و‪ٙ‬ششَ ‪ٔ TextBox‬ؼش‪ٚ‬ف ‪ٞ‬ؼشؾ و‪ٚ ٝ‬ظیف‪ ٝ‬ایٗ ٌشفشٗ اعالػبر اص وبسثش ‪ٞ‬ؼز‬
‫‪ٞProperty‬بی صیبدی ‪ ٓٞ‬داس‪ٕٞ ٚ ٜ‬ی‪ٙ‬غ‪ٛ‬س س‪ٚ‬یذاد ‪ٞ‬بی ٔخشّف‪.‬‬

‫ثؼىشٓ س‪ ٚ‬ایؼبد ٔیى‪ ٓٙ‬س‪ٚ‬ی فشْ ‪ ٚ‬ثؼذ ی‪ ٝ‬دوٕ‪ٔ ٝ‬یضاسْ ‪ٔ ٚ‬یخ‪ٛ‬اْ ثب وّیه س‪ٚ‬ی دوٕ‪ٔ ٝ‬ش‪ٙ‬ی س‪ ٚ‬و‪ ٝ‬س‪ٛ‬‬
‫‪ٔLineEdit‬ی‪ٛٙ‬یؼٓ ٕ٘بیؾ ثذْ‪.‬‬
‫لجُ اص ‪ٞ‬ش ؿیض ‪٘ ٓٞ‬بْ آثؼىشٓ س‪ ٚ‬ػ‪ٛ‬م ٔیى‪ٔ ٓٙ‬یضاسٔؾ ‪ MyLineEdit‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪...‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 63‬‬

‫كبال ٔیشْ ػشاؽ وذ ٘‪ٛ‬یؼی ‪ٔ ...‬ؼشمیٓ ٔیشْ س‪ ٛ‬س‪ٚ‬یذاد وّیه دوٕٓ ٔی‪ٛٙ‬یؼٓ وذ صیش س‪...ٚ‬‬

‫;‪QMessageBox msgBox‬‬
‫;))(‪msgBox.setText(ui->MylineEdit->text‬‬
‫;)(‪msgBox.exec‬‬
‫ثب ایٗ سفب‪ٚ‬ر و‪ ٝ‬ث‪ ٝ‬ػبی دیغبْ لجّی خبكیز ٔشٗ ٔ‪ٛ‬ػ‪ٛ‬د دس ‪ LineEdit‬س‪ ٚ‬فشاخ‪ٛ‬ا٘ی ٔیى‪ ٓٙ‬ثب دػش‪ٛ‬س صیش‪:‬‬

‫;)(‪ui->MylineEdit->text‬‬
‫ایٗ ث‪ ٝ‬ایٗ ٔؼ‪ٙ‬ی‪ ٝ‬و‪ٔ ٝ‬شٗ ٔ‪ٛ‬ػ‪ٛ‬د دس ؿیئ وبدس ‪ٚ‬س‪ٚ‬دی ٔشٗ ٔٗ س‪ ٚ‬ثٍیش‪.‬‬

‫٘شیؼ‪ ٝ‬ؿذ ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 64‬‬

‫هرحلِ پاًسدّن ‪ٔ :‬ؼشفی ‪ ٚ‬وبس ثب‪CheckBox‬‬

‫یىی اص و‪ٙ‬ششَ ‪ٞ‬بی ٔ‪ ٚ ٟٓ‬وبس آٔذ و‪ ٗٔ ٝ‬ؿخلب ػالل‪ ٝ‬خبكی ث‪ ٝ‬ایٗ و‪ٙ‬ششَ داسْ و‪ٙ‬ششَ ؿه ثبوغ ‪ٞ‬ؼشؾ‬
‫‪CheckBox‬‬

‫كبال ٔٗ ث‪ ٝ‬ك‪ٛ‬سر صیش ؿه ثبوؼٕ‪ٔ ٛ‬یبسْ س‪ٚ‬ی فشْ ‪ٔ ٚ‬یخ‪ٛ‬اْ ثب وّیه ثش س‪ٚ‬ی دوٕ‪ ٝ‬اٌ‪ٗٔCheckBox ٝ‬‬
‫سیه خ‪ٛ‬سد‪ ٜ‬ثبؿ‪ ٝ‬ث‪ ٟٓ‬دیغبْ ثذ‪ ٜ‬و‪ ٝ‬سیه خ‪ٛ‬سد‪ ٜ‬یب ٔشٗ ٔ‪ٛ‬سد ٘ظشْ س‪ٕ٘ ٚ‬بیؾ ثذ‪ ٜ‬یب اٌش سیه ٘خ‪ٛ‬سد‪ ٜ‬ثبؿ‪ ٝ‬ث‪ٟٓ‬‬
‫ثٍ‪ ٝ‬و‪ ٝ‬الب سیه ٘خ‪ٛ‬سد‪ ٜ‬ا٘شخبثؾ وٗ !یب ‪ٞ‬ش ؿیضی و‪ ٝ‬خ‪ٛ‬ؿش‪ٔ ٖٛ‬یبد‪.‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 65

:ٗٔ ٕٝ‫یذاد دو‬ٚ‫ وذ صیش دس س‬ٚ

if (ui->checkCPP->isChecked())
{
QMessageBox msgBox;
msgBox.setText("C++");
msgBox.exec();
}
else {
QMessageBox msgBox;
msgBox.setText("Please select your programming language !");
msgBox.exec();
}
:‫سر صیش‬ٚ‫ ف‬ٝ‫ ث‬.‫ٓ ثٍیشیذ‬ٞ ٚ‫س‬ CheckBox ‫د‬ٛ‫٘یذ ٔشٗ خ‬ٛ‫ب ٔیش‬ٞ ٗ‫ ػبی ایٗ ٔش‬ٝ‫ث‬

msgBox.setText(ui->checkCPP->text());
:‫ؼشؾ‬ٞ ‫سر صیش‬ٛ‫ ك‬ٝ‫ ث‬ٝ‫بیز ٘شیؼ‬ٟ٘ ‫ دس‬ٚ

:‫ صیش‬ٝ‫ ٘شیؼ‬ٝ‫ ثبؿ‬ٜ‫سد‬ٛ‫ سیه ٘خ‬ٝ‫سسی و‬ٛ‫دس ك‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 66‬‬

‫دس ك‪ٛ‬سسی و‪ ٝ‬سیه خ‪ٛ‬سد‪ ٜ‬ثبؿ‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 67‬‬

‫هرحلِ ضاًسدّن ‪ٔ :‬ؼشفی ‪ ٚ‬وبس ثب‪RadioBox‬‬

‫یىی اص وبسآٔذ سشیٗ آثؼىز ‪ٞ‬بی ا٘شخبثی و‪ٔ ٝ‬ؼٕ‪ٛ‬ال ثشای ٔـخق وشدٖ یىی اص ٌضی‪ٞ ٝٙ‬بی دیـ‪ٟٙ‬بدی ٔب٘‪ٙ‬ذ‬
‫ػ‪ٛ‬اِ‪ٟ‬بی ؿ‪ٙ‬ذ ٌضی‪ ٝٙ‬ای ‪ ... ٚ‬اػشفبد‪ ٜ‬اص ‪ٞ RadioBox‬ؼشؾ و‪ ٗٔ ٝ‬دس ایٗ ٔشكّ‪ ٝ‬ثب د‪ ٚ‬و‪ٙ‬ششَ سادی‪ٔ ٛ‬یخ‪ٛ‬اْ‬
‫٘شیؼ‪ ٝ‬ا٘شخبة ؿذ‪ ٜ‬س‪ٕ٘ ٚ‬شبیؾ ثذْ سمشیجب س‪ٚ‬ؿؾ ؿجی‪ ٝ‬ث‪ٞ CheckBox ٝ‬ؼز ‪ِٚ‬ی ثب وٕی سغییشار‪.‬‬

‫فشٔٓ س‪ ٚ‬ایؼبد ‪ ٚ‬و‪ٙ‬ششِٓ س‪ ٚ‬دسع ٔیى‪ ٚ ٓٙ‬ثشای و‪ٙ‬ششَ ‪ No ٚ Yes‬اػٓ ‪ٔ ٚ‬ـخل‪ ٝ‬خبكی ٔیذْ‪.‬‬

‫كبال ٔٗ ٔیخ‪ٛ‬اْ ‪ٚ‬لشی فشٔٓ ث‪ٛ‬د ٔیـ‪ ٝ‬یىی اص ایٗ د‪ ٚ‬و‪ٙ‬ششَ ث‪ ٝ‬ك‪ٛ‬سر دیـفشم ٔمذاس د‪ٞ‬ی ثـ‪ ٝ‬و‪ٔ ٝ‬مذاس ثشاثش‬
‫ایٗ و‪ٙ‬ششَ ‪ٞ‬ب ‪ٕٞ‬یـ‪ true ٝ‬یب ‪ false‬خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د یؼ‪ٙ‬ی دس كبِز ا٘شخبة ‪ ٚ true‬دس غیش ای‪ٙ‬ل‪ٛ‬سر‪false.‬‬

‫دس لؼٕز فشْ ِ‪ٛ‬د ٔٗ وذ صیش س‪ٔ ٚ‬ی‪ٛٙ‬یؼٓ‪.‬‬

‫;)‪ui->radioYES->setChecked(true‬‬
‫ٌضی‪ ui ٝٙ‬و‪ ٝ‬وال ٔشث‪ٛ‬ط ث‪ ٝ‬فشْ عشكٕ‪ٞ ٖٛ‬ؼشؾ یؼ‪ٙ‬ی ‪ ٚ ui‬ثؼذ ‪ٞ‬ش ؿیئی و‪ ٝ‬س‪ٚ‬ی ا‪ ٖٚ‬لشاس داس‪.ٜ‬‬

‫اػٓ ‪ ٚ‬یب ؿ‪ٙ‬بػ‪ ٝ‬و‪ٙ‬ششَ س‪ٔ ٚ‬ی‪ٛٙ‬یؼٓ ‪ ٚ‬ثؼذ ٔمذاس ‪ true‬س‪ ٚ‬ثشاؽ دس ٘ظش ٔیٍیشْ سب ‪ٚ‬لشی فشٔٓ ِ‪ٛ‬د ؿذ سادی‪ٛ‬یی‬
‫و‪ٞ Yes ٝ‬ؼز دس كبِز ا٘شخبة لشاس ثٍیش‪ ٜ‬اٌ‪ ٝ‬ایٗ وبس‪ ٚ‬ا٘ؼبْ ٘ذْ ‪ٞ‬یؾ یه اص ایٗ و‪ٙ‬ششَ ‪ٞ‬ب ٔمذاس د‪ٞ‬ی‬
‫٘خ‪ٛ‬ا‪ٙٞ‬ذ ؿذ یب ثبیذ ای‪ٙ‬ؼ‪ٛ‬سی س‪ٛ‬ػغض وذ ٔمذاس ا‪ِٚ‬ی‪ ٝ‬ثشای یىی اص ایٗ د‪ٚ‬سب ثذیٓ یب ثبیذ اص لؼٕز ‪properties‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 68

‫ؼز‬ٞ ‫ لبثُ ا٘شخبة‬ٚ‫ذ ؿذ !!! فمظ یىی اص ایٗ د‬ٙٞ‫ا‬ٛ‫ٓ ا٘شخبة ٘خ‬ٞ‫ ثب‬ٚ‫شد‬ٞ ‫لز‬ٛ‫یـ‬ٞ ‫ال‬ٕٛ‫ ٔؼ‬ٝ‫یٓ و‬ٙ‫ٔـخق و‬
.ٝ‫ی ٔیـ‬ٞ‫ ٔمذاس د‬false ‫ كبِز‬ٝ‫ ث‬true ‫ ثؼذیؾ اص كبِز‬ٝٙ‫یذ ٌضی‬ٙ‫ ا٘شخبة و‬ٚ‫لشی دیٍشی س‬ٚ

:‫سر صیش‬ٛ‫ ك‬ٝ‫د ث‬ِٛ ْ‫ فش‬ٝ‫٘شیؼ‬

No ‫لشی‬ٚ ٚ ْ‫ دیغب‬ٝ‫ ا٘شخبة ؿذ ی‬Yes ‫لشی‬ٚ ٝ‫یؼٓ و‬ٛٙ‫دْ وذی ث‬ٛ‫ خ‬ٕٝ‫یئذاد وّیه دو‬ٚ‫اْ دس س‬ٛ‫ أب االٖ ٔیخ‬ٚ
.ٜ‫ٖ ثذ‬ٛٔ‫ ثشا‬ٚ‫ س‬ٝ‫ٖ ثبؿ‬ٛٔ‫ ٔذ ٘ظش‬ٝ‫شؿیضی و‬ٞ ‫ دیغبْ یب‬ٝ‫ا٘شخبة ؿذ ی‬

void MainWindow::on_pushButton_clicked()
{

if (ui->radioYES->isChecked() == true)
{
QMessageBox msgBox;
msgBox.setText("Yes ! I like C++ programming languge! that's
powerfull and faster than ever !");
msgBox.exec();
}
else if (ui->radioNO->isChecked() == true)
{
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 69‬‬

‫;‪QMessageBox msgBox‬‬
‫;)"! ‪msgBox.setText("No ! I don't like C++‬‬
‫;)(‪msgBox.exec‬‬
‫}‬

‫}‬
‫ایٗ لؼٕز ٔٗ ٔیش‪٘ٛ‬ؼشٓ ٔـخق و‪ ٓٙ‬و‪ ٝ‬اٌ‪ٔ RadioYes ٝ‬مذاسؽ ‪ true‬ث‪ٛ‬د فالٖ وبس ‪ ٚ‬اٌش ٔمذاسؽ‬
‫‪false‬ث‪ٛ‬د فالٖ وبس ‪ِٚ‬ی خت خ‪ٛ‬اػشٓ اص ٔمذاس ٔ‪ٛ‬ػ‪ٛ‬د دس ‪ ٓٞ RadioNo‬اػشفبد‪ ٜ‬و‪ ٓٙ‬دس وُ ٔیـ‪ ٝ‬اص ‪ٞ‬ش‬
‫د‪ ٚ‬كبِز ‪ ٓٞ‬اػشفبد‪ ٜ‬وشد ث‪ٙ‬ب ثش ػّیم‪ ٝ‬خ‪ٛ‬دس‪... !ٖٛ‬‬

‫٘شیؼ‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د‪:‬‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 70‬‬

‫هرحلِ ّفذّن ‪ :‬هعرفی ٍ کار تا‪ComboBox‬‬

‫‪ ٚ‬أب وبس ثب ‪ ComboBox‬ث‪ ٝ‬ك‪ٛ‬سر صیش آثؼىز س‪ ٚ‬ا٘شخبة ‪٘ ٚ‬بْ ٌزاسی ٔیى‪...ٓٙ‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 71‬‬

‫ی‪ ٝ‬س‪ٛ‬ضیلی دس ساثغ‪ ٝ‬ثب خل‪ٛ‬كیبر ایٗ و‪ٙ‬ششَ ثذْ و‪ٔ ٝ‬ؼٕ‪ٛ‬ال دس كبِز ِیؼز داد‪ٞ ٜ‬بی خ‪ٛ‬دؽ س‪ٔ ٚ‬یٍیش‪ٚ ٜ‬‬
‫خش‪ٚ‬ػی س‪ ٓٞ ٚ‬ث‪ ٝ‬ك‪ٛ‬سر ِیؼز ٕ٘بیؾ ٔیذ‪ ٚ ٜ‬دس ٘‪ٟ‬بیز ثشای ٌشفشٗ ٔمذاس ا٘شخبة ؿذ‪ٔ ٓٞ ٜ‬یش‪٘ٛ‬یٓ اص كبِز‬
‫‪ٞ‬بی ٔخشّفی ٔظُ ثبصٌـز د‪ٙٞ‬ذ‪ ٜ‬اص عشیك ‪ ٚ CurrentText‬یب ‪ CurrentIndex‬اػشفبد‪ ٜ‬و‪ٙ‬یٓ ث‪ ٝ‬ك‪ٛ‬سر‬
‫صیش ٔٗ اثشذا دس فشْ ِ‪ٛ‬د خ‪ٛ‬دْ ٔمذاس ‪ٞ‬بیی س‪ ٚ‬و‪ٔ ٝ‬یخ‪ٛ‬اْ دس ِیؼز ثبوؼٓ ٕ٘بیؾ داد‪ ٜ‬ثـ‪ ٝ‬سب وبسثش ثش‪٘ٛ‬ی یىیـ‪ٛ‬‬
‫إ٘شخبة و‪ ٝٙ‬س‪ٔ ٚ‬ی‪ٛٙ‬یؼٓ‪.‬‬

‫‪/*Data*/‬‬
‫<< "‪QStringList Language = (QStringList() << "English" << "Perisan‬‬
‫;)"‪"Turkish" << "Russian‬‬
‫;)‪ui->ComboLang->addItems(Language‬‬
‫خت ث‪ ٝ‬ایٗ لؼٕز دلز و‪ٙ‬یذ ثش اػبع خبكیز ٔمذاس د‪ٞ‬ی ؿذ‪ ٜ‬دس ایٗ و‪ٙ‬ششَ یه ٘‪ٛ‬ع ػذیذ اص ٘‪ٛ‬ع‬
‫‪QStrinList‬ثب ٘بْ ‪ Language‬دس ٘ظش ٌشفشٓ ‪ ٚ‬ثؼذ ٔمبدیش ٔ‪ٛ‬سد ٘ظشْ س‪ ٚ‬دس داخُ ایٗ ِیؼز س‪ٛ‬ػظ‬
‫ػٍّٕش دسع >> ‪ٚ‬اسد وشدْ دس خظ ثؼذی س‪ٛ‬ػظ ‪ addItems‬و‪ٛ٘ ٝ‬ع آسای‪ ٝ‬ای یب ِیؼز ‪ٞ‬بی خبف س‪ٚ‬‬
‫ٔیٍیش‪ ٜ‬س‪ٛ‬ػظ ‪ٚ Language‬اسد ٔیى‪.ٓٙ‬‬

‫٘شیؼ‪ ٝ‬ثبیذ ث‪ ٝ‬ك‪ٛ‬سر صیش ثبؿ‪:ٝ‬‬

‫كبال دس ٘ظش داسْ اص خبكیز ‪ٞ‬بی ا٘شخبثی ایٗ و‪ٙ‬ششَ اػشفبد‪ ٜ‬و‪ٔ ٚ ٓٙ‬مذاس ‪ٞ‬بی ا٘شخبة ؿذ‪ ٜ‬س‪ ٚ‬ثشٌشد‪ ٓ٘ٚ‬ث‪ٝ‬‬
‫ك‪ٛ‬سر صیش‪:‬‬

‫;‪QString CurrentVal‬‬
‫;)(‪CurrentVal = ui->ComboLang->currentText‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 72‬‬

‫;‪QMessageBox msgBox‬‬
‫;)‪msgBox.setText(CurrentVal‬‬
‫;)(‪msgBox.exec‬‬

‫خت اثشذا ؿیىبس وشدْ ی‪ٛ٘ ٝ‬ع ٔش‪ٙ‬ی سؼشیف ٔیى‪ ٚ ٓٙ‬ثؼذ ؿ‪ ٖٛ‬اص ٘‪ٛ‬ع ٔشٗ ثشٌـشی یؼ‪ٙ‬ی ‪CurrentText‬‬
‫ٔیخ‪ٛ‬اْ اػشفبد‪ ٜ‬و‪ٛ٘ ٓٙ‬ع سؿشٓ س‪ٔ ٚ‬ؼشفی وشدْ ‪ ٚ‬ثؼذ ٔمذاس ایٗ ٔشغیشْ س‪ ٚ‬ثشاثش ٔمذاس ٔشٗ ا٘شخبة ؿذ‪ٜ‬‬
‫‪COmboBox‬خ‪ٛ‬دْ لشاس ٔیذْ ‪٘ ٚ‬شیؼ‪ٔ ٝ‬یـ‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫ثشای ٔمذاسی اص ٘‪ٛ‬ع ‪ٔ ٓٞ int‬یش‪٘ٛ‬یذ ٔشغیش خ‪ٛ‬دس‪ ٖٛ‬س‪ ٚ‬اص ٘‪ٛ‬ع ‪ int‬سؼشیف وشد‪ٔ ٚ ٜ‬مذاس ‪ CurrentIndex‬س‪ ٚ‬ث‪ٟ‬ؾ اخشلبف ثذیٗ ‪ٚ‬‬
‫وّی وبسای دیٍ‪...ٝ‬‬

‫هرحلِ ّجذّن ‪ :‬هعرفی ٍ کار تا‪ListWidget‬‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 73‬‬

‫ایٗ و‪ٙ‬ششَ ٔظُ ‪ ComboBox‬ػُٕ ٔیى‪ِٚ ٝٙ‬ی ثب ایٗ سفب‪ٚ‬ر و‪ٔ ٝ‬لش‪ٛ‬یبر ‪ ٚ‬آیشٓ ‪ٞ‬بی ایٗ و‪ٙ‬ششَ ث‪ ٝ‬ك‪ٛ‬سر‬
‫یىؼب دس دػششع ‪ٞ‬ؼشٗ ‪ٔ ٚ‬یـ‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر یه ِیؼز ث‪ ٝ‬آیشٓ ‪ٞ‬ب دػششػی داؿز ی‪ ٝ‬ؿیضی ٔظُ ‪DataGrid‬‬
‫‪ِٚ‬ی ثشای آیشٓ ‪ٞ‬بیی و‪ ٝ‬لشاس‪ ٜ‬ا٘شخبة ؿ‪٘ٛ‬ذ‪.‬‬

‫ث‪ ٝ‬ك‪ٛ‬سر صیش ایؼبدؽ ٔیى‪ٙ‬یٓ ‪ ٚ‬دس فشْ ِ‪ٛ‬د ‪ٕٞ‬ب٘‪ٙ‬ذ ‪ ComboBox‬ایشٓ ‪ٞ‬بی ٔ‪ٛ‬سد ٘ظش س‪ ٚ‬ث‪ٟ‬ؾ ٔیذیٓ‪.‬‬

‫‪/*Data*/‬‬
‫<< "‪QStringList C_Types = (QStringList() << "C++ Native" << "C++ CLI/.Net‬‬
‫;)"‪"C++ MFC" << "C++ Win32‬‬
‫;)‪ui->listWidget->addItems(C_Types‬‬

‫كبال ٔیخ‪ٛ‬اْ ٔمذاس ا٘شخبة ؿذ‪ ٜ‬س‪ٕ٘ ٚ‬بیؾ ثذْ و‪ ٝ‬یىٕی ٔشفب‪ٚ‬سش اص ‪ ComboBox‬خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د ث‪ ٝ‬ك‪ٛ‬سر صیش‬
‫‪:‬‬
‫;‪QString Val‬‬
‫;)(‪Val = ui->listWidget->currentItem()->text‬‬
‫;‪QMessageBox msgBox‬‬
‫;)‪msgBox.setText(Val‬‬
‫;)(‪msgBox.exec‬‬
‫خت ٔشغیشْ س‪ ٚ‬دس ٘ظش ٔیٍیشْ ‪ ٚ‬ثؼذ ثشاثشؽ ٔیى‪ ٓٙ‬ثب هتي هقذار آیتن اًتخاب ضذُ دس ِیؼز ثبوؼٓ!‬

‫‪ ٚ‬دس ٘‪ٟ‬بیز ٔمذاس سجذیُ ؿذ‪ ٜ‬ث‪ ٝ‬سؿش‪ ٝ‬س‪ٔ ٚ‬یفشػشٓ ث‪MSG.ٝ‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 74‬‬

‫٘شیؼ‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫هرحلِ ًَزدّن ‪ :‬هعرفی ٍ کار تا‪TreeWidget‬‬

‫ٔؼشفی ‪ ٚ‬وبس ثب ِیؼز ‪ٞ‬بی دسخشی ‪ / TreeWidget‬ث‪ ٝ‬ایٗ ك‪ٛ‬سر اػز و‪ ٝ‬دس ثؼیبسی اص ٔ‪ٛ‬الغ و‪ٔ ٝ‬مبدیش‬
‫لبثُ ا٘شخبة ٔب كب‪ٚ‬ی ؿبخ‪ٞ ٝ‬ب ‪ ٚ‬صیش ؿبخ‪ٞ ٝ‬بیی ‪ٞ‬ؼش‪ٙ‬ذ ‪ ٚ‬ثش٘بٔ‪ٛ٘ ٝ‬یغ ثبیذ أىبٖ ایٗ س‪ ٚ‬ثشای وبثش فشا‪ ٓٞ‬و‪ ٝٙ‬سب‬
‫وبسثش ‪ ٓٞ‬ؿبخ‪ٞ ٝ‬ب ‪ ٓٞ ٚ‬صیش ؿبخ‪ٞ ٝ‬بی ثخـی س‪ ٚ‬و‪ٔ ٝ‬یخ‪ٛ‬اد ا٘شخبة و‪ ٝٙ‬س‪ ٚ‬ثجی‪ ٝٙ‬ث‪ ٝ‬ع‪ٛ‬س وّی ِیؼز ا٘شخبة ث‪ٝ‬‬
‫ك‪ٛ‬سر دسخشی ٕ٘بیؾ داد‪ ٜ‬خ‪ٛ‬ا‪ٞ‬ذ ؿذ‪.‬‬

‫ث‪ ٝ‬ك‪ٛ‬سر صیش ٔٗ ِیؼشٓ س‪ ٚ‬ایؼبد ٔیى‪:ٓٙ‬‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 75‬‬

‫دس ساثغ‪ ٝ‬ثب ایٗ ؿیئ ثبیذ ای‪ٕٙ‬غ‪ٛ‬س س‪ٛ‬ضیق داد و‪ ٝ‬خبكیز ‪ٚ‬اِذ ‪ ٚ‬فشص٘ذ س‪ ٚ‬دس خ‪ٛ‬دؽ سخلیق داد‪ ٜ‬اػز ثشای‬
‫ٔظبَ ٔٗ ٕ٘‪ ٝ٘ٛ‬صیش س‪ ٚ‬ثخ‪ٛ‬اْ س‪ٚ‬ی ایٗ ِیؼز ٕ٘بیؾ ثذْ ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫کتاب‪C++ 11‬‬

‫‪ ‬فلُ ا‪َٚ‬‬
‫‪ ‬فلُ د‪ْٚ‬‬
‫‪...ٚ ‬‬

‫وال یه ‪ٚ‬اِذ یب صیش ؿبخ‪ ٝ‬داسیٓ ‪ ٚ‬ثمی‪ٛٔ ٝ‬اسد صیش ؿبخ‪ ٝ‬یب ‪ٕٞ‬بٖ فشص٘ذ ‪ٞ‬ؼش‪ٙ‬ذ دس اكُ ‪ٚ Parent ٖٕٛٞ‬‬
‫‪Child‬‬

‫كبال س‪ٚ‬ؿی و‪ٔ ٗٔ ٝ‬یخ‪ٛ‬اْ ثشای ایٗ ثىبس ثجشْ ث‪ ٝ‬ك‪ٛ‬سر صیش خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د اثشذا ثشای دػششػی ‪ ٚ‬ساكشی وبس ‪ 2‬سب‬
‫سبثغ سؼشیف ٔیى‪ ٓٙ‬ثشای ‪childٚ parent‬‬

‫دس لؼٕز ‪ mainwindow.h‬دبیی‪ٙ‬شش اص‪Q_OBJECT‬‬

‫;)‪void AddRoot(QString name, QString Discreption‬‬


‫;)‪void AddChild(QTreeWidgetItem * parent, QString name, QString Discreption‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 76

ٚ ْ‫اِذ ٘ب‬ٚ ٖ‫ٕب‬ٞ ‫ یب‬AddRoot ‫ ثشای‬ٝ‫ ٔـخق وشدْ و‬ٚ‫ع سبثغ س‬ٛ٘ ٚ ْ‫یٗ ٘ب‬ٙ‫ٕـ‬ٞ ٚ ‫ب‬ٞ ‫ؼب ٔٗ ٔشذ‬ٙ‫خت ای‬
ٝ‫بػ‬ٙ‫ش یه ؿ‬ٞ ‫ضیلبر‬ٛ‫ س‬ٚ ْ‫ ثش ٘ب‬ٜٚ‫ٕبٖ فشص٘ذ ػال‬ٞ ‫ یب‬AddChild ‫ ثشای‬ٚ ْ‫ دس ٘ظش ٔیٍیش‬ٚ‫ضیلالر س‬ٛ‫س‬
‫ لشاس‬QTreeWidgetItem ‫ع‬ٛ٘ ‫٘ٓ اص‬ٚ‫ ا‬ٚ ‫ؼشؾ‬ٞ ٝ‫سد ٘ظش ثشای ػش ؿبخ‬ٛٔ ٓ‫بػب٘ذٖ ایش‬ٙ‫ ثشای ؿ‬ٜ‫ذ‬ٙٙ‫سؼییٗ و‬
.ْ‫ٔیذ‬

‫سر صیش‬ٛ‫ ك‬ٝ‫ ٔیؼبصْ ث‬ٚ‫اثغ س‬ٛ‫ س‬ٝ٘‫ ثذ‬ٚ ٜ‫ كذا صد‬ٚ‫اثغ س‬ٛ‫ س‬mainwindow.cpp ٖٕٛ‫ ثؼذ دس فبیُ اكّی‬ّٝ‫ٔشك‬
:

void MainWindow::AddRoot(QString name, QString Discreption)


{

void MainWindow::AddChild(QTreeWidgetItem* parent, QString name, QString


Discreption)
{

}
:‫سر صیش‬ٛ‫ ك‬ٝ‫ سبثغ ٘یبص داسْ ث‬ٚ‫شیه اص ایٗ د‬ٞ ُ‫بی صیش دس داخ‬ٞ ‫ وذ‬ٝ‫كبال ٔٗ ث‬

void MainWindow::AddRoot(QString name, QString Discreption)


{

QTreeWidgetItem * MyItem = new QTreeWidgetItem(ui->MyTreeWidget);

MyItem->setText(0, name);
MyItem->setText(1, Discreption);
ui->MyTreeWidget->addTopLevelItem(MyItem);

AddChild(MyItem, "C++", "Native / Objective");


AddChild(MyItem, "Java", "Objective");

void MainWindow::AddChild(QTreeWidgetItem* parent, QString name, QString


Discreption)
{

QTreeWidgetItem * MyItem = new QTreeWidgetItem();


MyItem->setText(0, name);
MyItem->setText(1, Discreption);
parent->addChild(MyItem);

}
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 77‬‬

‫دس سبثغ ا‪ AddRoot َٚ‬اثشذا یه وذی اص ‪ٔ QTreeWidgetItem‬یؼبصْ سب ث‪ ٝ‬ػ‪ٛٙ‬اٖ آیشٓ ‪ٞ‬بی دسخشی‬
‫ثشاْ وبس و‪ ٚ ٝٙ‬دس ٔشكّ‪ ٝ‬ثؼذی ٌفشٓ و‪ ٝ‬دس ای‪ٙ‬ذوغ ا‪ َٚ‬یؼ‪ٙ‬ی ‪ٔ 0‬ش‪ٙ‬ی س‪ ٚ‬و‪ ٝ‬سبثغ ٔیٍیش‪ ٜ‬س‪ ٚ‬ػز وٗ ‪ ٚ‬دس خظ‬
‫ثؼذیؾ دلیمب ٔظُ ایٗ ٌفشٓ س‪ٛ‬ضیلبر س‪ ٚ‬دس ای‪ٙ‬ذوغ ‪ 1‬یؼ‪ٙ‬ی د‪ ْٚ‬ایٗ س‪ ٚ‬ػز وٗ ‪ ٚ‬ثؼذ اص ایٗ ٌفشٓ ِیؼز‬
‫دسخشی ٔٗ ایٗ د‪ٌ ٚ‬ضی‪ ٝٙ‬س‪ ٚ‬اص ٘‪ٛ‬ع آیشٓ ‪ٞ‬بی ػش ؿبخ‪ ٝ‬لشاس ثذ‪ ٜ‬ثب وذ ‪ : addTopLevelItem‬ایٗ وبس‬
‫س‪ ٚ‬ا٘ؼبْ ٔیذْ‪.‬‬

‫دس خظ ثؼذؽ ا‪ٔٚ‬ذْ ٌفشٓ ایشٓ ‪ٞ‬بی ‪ AddChild‬ثشاثش ثبؿ‪ ٝ‬اص آیشٓ ‪ٞ‬بی سؼشیف ؿذ‪ ٜ‬ث‪ ٝ‬ك‪ٛ‬سر ثبال و‪ ٝ‬اص سبثغ‬
‫‪AddChild‬فشاخ‪ٛ‬ا٘ی ٔیـ‪٘ٛ‬ذ ث‪ ٝ‬ك‪ٛ‬سر صیش‪...‬‬

‫ػ‪ ٝ‬خظ ا‪ َٚ‬دس سبثغ ‪ٔ AddChild‬ظُ سبثغ لجّی ثشای ػ‪ٛٙ‬اٖ ‪ ٚ‬ؿ‪ٙ‬بػبیی ای‪ٟٙ‬بػز ‪ ٚ‬دس خظ آخش ٌفشٓ و‪ ٝ‬آلب‬
‫آیشٓ ‪ٞ‬بی ‪ٚ‬اِذ ٔٗ صیش ٔؼٕ‪ٛ‬ػـ‪ ٖٛ‬ثشاثش ثبؿ‪ ٝ‬ثب آیشٓ ‪ٞ‬بی فشص٘ذی و‪ ٝ‬ایؼبد ٔیـ‪٘ٛ‬ذ‪.‬‬

‫دس ٔشكّ‪ ٝ‬ثؼذ دس لؼٕز فشْ ِ‪ٛ‬د الصٔ‪ ٝ‬و‪ ٝ‬سؼذاد ػش‪ٞ ٖٛ‬ب س‪ٕٞ ٚ‬شا‪ ٜ‬ثب ػ‪ٙ‬ب‪ٚ‬ی‪ٙ‬ؾ ٔـخق و‪ ٓٙ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫;)‪ui->MyTreeWidget->setColumnCount(2‬‬
‫;)"‪AddRoot("Language", "Features‬‬
‫ٔـخل‪ ٝ‬و‪ٌ ٝ‬فشٓ د‪ ٚ‬ػش‪ ٖٛ‬اص ٘‪ٛ‬ع صثبٖ ‪ٚ ٚ‬یظٌی ‪ٞ‬بی صثبٖ دسع وٗ ‪ ٚ‬ثؼذ اص ایٗ سبثغ ‪Addroot‬فشاخ‪ٛ‬ا٘ی‬
‫ؿذ‪ ٚ ٜ‬سبثغ ‪ٕٞ AddChild‬ی‪ٙ‬غ‪ٛ‬س ‪٘ ٚ‬شیؼ‪ٔ ٝ‬یـ‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪...‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 78‬‬

‫هرحلِ تیستن ‪ :‬هعرفی ٍ کار تا ‪ّ Action‬ا‬

‫دس ساثغ‪ ٝ‬ثب اوـٗ ‪ٞ‬ب ٔیش‪ ٓ٘ٛ‬ثٍٓ ‪ٞٛٙٔ ٖٕٛٞ‬بی ثش٘بٔ‪ٞ ٝ‬ؼشؾ و‪ ٝ‬س‪ٛ‬ػظ ‪ٞ‬ش اوـٗ ایؼبد ؿذ‪ ٜ‬یه ٔ‪ ٛٙ‬ثب ٔـخل‪ٝ‬‬
‫خبف سؼشیف ‪ ٚ‬لبثّیز ‪ٞ‬ب ‪ٕٞ ٚ‬ـ‪ٙ‬یٗ ‪ٞ Event‬بی خبف خ‪ٛ‬دؽ س‪ ٚ‬ایؼبد ٔیى‪ ٝٙ‬ثشای ٔظبَ ٔٗ ثشای ای‪ٙ‬ى‪ٝ‬‬
‫س‪ٚ‬ی فشٔٓ ٔ‪ٞ ٛٙ‬بی صیش س‪ ٚ‬ایؼبد ٔیى‪ ٓٙ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 79‬‬

‫ؿىبس ثبیذ ا٘ؼبْ ثذْ ‪ ...‬خیّی ساكز س‪ٚ‬ی فشٔٓ لؼٕز ٔ‪ ٛٙ‬س‪ٚ‬ی ‪ Type Here‬وّیه ٔیى‪ ٚ ٓٙ‬اػٓ ٔ‪ٛٙ‬س‪ٚ‬‬
‫ٔی‪ٛٙ‬یؼٓ ٔظُ سل‪ٛ‬یش صیش‪...‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 80‬‬

‫س‪ٛ‬ػ‪ ٝ‬و‪ٙ‬یذ و‪ٞ ٝ‬ش ‪ٚ‬اِذ ٔیش‪ ٝ٘ٛ‬صیش ؿبخ‪ٞ ٝ‬بی خ‪ٛ‬دؽ س‪ ٚ‬داؿش‪ ٝ‬ثبؿ‪ٕٞ ٝ‬ـ‪ٙ‬یٗ ٔیش‪٘ٛ‬یذ ثب وّیه س‪ٚ‬ی ‪Add‬‬
‫‪Separator‬خظ فبكّخ ثیٗ ٔ‪ٞٛٙ‬ب ث‪ ٝ‬ػ‪ٛٙ‬اٖ ػذا و‪ٙٙ‬ذ‪ ٜ‬ایؼبد و‪ٙ‬یذ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 81‬‬

‫‪ٞ‬شیه اص ٔ‪ٞ ٛٙ‬بیی و‪ ٝ‬ایؼبد ٔیـ‪ ٝ‬ث‪ ٝ‬ػ‪ٛٙ‬اٖ یه ‪ٞ Action‬ؼشؾ ٔظُ دیٍش و‪ٙ‬ششَ ‪ٞ‬بی داسای ‪ٞ Event‬ب ‪ٚ‬‬
‫‪ٞSlot‬بی خبف خ‪ٛ‬دؿ‪ٞ ٖٛ‬ؼش‪ٙ‬ذ‪ .‬كبال ثشای ای‪ٙ‬ى‪ٔ ٝ‬ظال ثب وّیه وشدٖ س‪ ٚ‬دوٕ‪ Exit ٝ‬یب ‪ٛٙٔ ٖٕٛٞ‬ی ػبخش‪ٝ‬‬
‫ؿذ‪ ٜ‬ثب ٘بْ ‪ Exit‬ی‪ ٝ‬وبسی ا٘ؼبْ ثذیٓ ؿىبس ثبیذ و‪ٙ‬یٓ ؟ خت ثبیذ دس سخذاد وّیه ؿذٖ یب ا٘شخبة ؿذٖ ایٗ‬
‫‪Action‬و‪ ٝ‬دس ای‪ٙ‬ؼب ثب ؿ‪ٙ‬بػ‪ actionExit ٝ‬دس دػششع ‪ٞ‬ؼشؾ ‪ٚ‬اسد ثـٓ ‪ ٚ‬وذ‪ٞ‬بی ٔ‪ٛ‬سد ٘ظش س‪ ٚ‬ثشای ا٘ؼبْ‬
‫وبس ٔ‪ٛ‬سد ٘ظش ث‪ٛٙ‬یؼیٓ ث‪ ٝ‬ك‪ٛ‬سر صیش لؼٕز اوؾ ‪ٞ‬ب ‪ ٚ‬اػشالر ‪ٞ‬ب ٔـخق ‪ٞ‬ؼز‪:‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 82‬‬

‫دس ادأ‪ ٝ‬خیّی ساكز ثب ‪ٚ‬اسد ؿذٖ ث‪ ٝ‬اػالر ٔ‪ٛ‬سد ٘ظش ‪ ٚ‬ایؼبد سبثغ سخذاد ‪ٔ triggered‬شاكُ صیش س‪ ٚ‬ادأ‪ٝ‬‬
‫ٔیذیٓ‪...‬‬

‫)(‪void MainWindow::on_actionExit_triggered‬‬
‫{‬

‫}‬
‫ثیٗ سبثغ ؿٕب ٔیش‪٘ٛ‬یذ ‪ٞ‬ش وذی س‪ ٚ‬و‪ ٝ‬الصٔ‪ ٝ‬ث‪ٛٙ‬یؼیذ كبال دس ایٗ ٔظبَ ٔٗ وذ ػبد‪ ٜ‬ای ثشای خش‪ٚ‬ع اص ثش٘بٔ‪ ٝ‬س‪ٚ‬‬
‫ٔی‪ٛٙ‬یؼٓ ‪ ٚ‬سٕبْ ! ث‪ ٝ‬ك‪ٛ‬سر صیش‪...‬‬

‫;)(‪QApplication::exit‬‬

‫‪ ٚ‬دس ٘‪ٟ‬بیز ثب وّیه ثش س‪ٚ‬ی ٔ‪ ٛٙ‬اوـٗ ‪ Exit‬ثش٘بٔ‪ ٝ‬ثبیذ اص دش‪ٚ‬ػ‪ ٝ‬خبسع ؿ‪ٛ‬د‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 83‬‬

‫هرحلِ تیست ٍ یکن ‪ :‬هعرفی ٍ کار تا ‪ّ Slider ٍ Progress‬ا‬

‫دس ساثغ‪ ٝ‬ثب و‪ٙ‬ششَ ‪ٞ‬بی ‪ Slider ٚ progress‬ؿ‪ ٖٛ‬دشادشسی ‪ٞ‬بی سمشیجب ٔـبث‪ٟ‬ی داس٘ذ ایٗ د‪ ٚ‬س‪ ٚ‬ثب‪ ٓٞ‬ادغبْ‬
‫ٔیى‪ٙ‬یٓ ث‪ ٝ‬ك‪ٛ‬سر صیش س‪ٚ‬ی فشٔٓ یه ‪ ٚ Progressbar‬یه ‪ Slider‬ایؼبد ٔیى‪.ٓٙ‬‬

‫خت لجُ اص ‪ٞ‬ش ؿیضی س‪ٛ‬ضیلی دس ساثغ‪ ٝ‬ثب ایٗ ثذْ و‪ ٝ‬آثؼىز ‪ٕٞ Progressbar‬یـ‪ ٝ‬ثش اػبع دشادشسی‬
‫‪ٔvalue‬مذاسد‪ٞ‬ی ٔیـ‪ ٝ‬یؼ‪ٙ‬ی اٌش ٔب ثشای ایٗ و‪ٙ‬ششَ ‪ Maximum value‬س‪ ٚ‬ثشاثش ‪ 100‬لشاس ثذیٓ ‪ٚ‬‬
‫دشادشسی ‪ value‬ایٗ ثشاثش ثبؿ‪ ٝ‬ثب ‪ 24‬ا‪ٛ٘ٚ‬لز اص ‪ 100‬دسكذ ‪ 24‬دسكذ ٔمذاس ایٗ و‪ٙ‬ششَ اسصؽ د‪ٞ‬ی ٔیـ‪ٛ‬د‪.‬‬

‫ث‪ ٝ‬ك‪ٛ‬سر صیش ٔیش‪٘ٛ‬یذ س‪ٙ‬ظیٕبسؾ س‪ ٚ‬اخشلبف ثذیٗ‪...‬‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 84‬‬

‫كبال ٔیبییٓ ػشاؽ وذ ٘‪ٛ‬یؼی‪ ...‬لجُ اص ‪ٞ‬ش ؿیض ؿ‪ٙ‬بػ‪ٞ ٗٔ Progresbar ٝ‬ؼشؾ ‪ٚ MyprogressBar‬‬
‫ؿ‪ٙ‬بػ‪ٞ ٗٔ Slider ٝ‬ؼشؾ ‪MyhorizontalSlider‬‬
‫ٔیخ‪ٛ‬اْ دلیمب ‪ٚ‬لشی ٔمذاس ‪ Sliderbar‬سغییش ٔیى‪ٔ ٝٙ‬مذاس ‪ ٓٞ Progressbar‬ثش اػبع ا‪ ٖٚ‬سغییش و‪ ٝٙ‬ث‪ ٝ‬ؿ‪ٝ‬‬
‫س‪ٚ‬ؿی ٔیـ‪ ٝ‬ایٗ وبس س‪ ٚ‬ا٘ؼبْ داد ؟!‬

‫دس ‪ٔ Qt‬ب ثلض ‪ٞ Slot ٚ Signal‬بس‪ ٚ‬داسیٓ و‪ ٝ‬ث‪ ٝ‬ع‪ٛ‬س خالك‪ ٝ‬ثخ‪ٛ‬اْ خیّی ػبد‪ ٜ‬س‪ٛ‬ضیق ثذْ ایٗ خ‪ٛ‬ا‪ٞ‬ذ‬
‫ث‪ٛ‬د ‪ :‬فشم و‪ٙ‬یذ ٔٗ ی‪ ٝ‬یه ؿخلی ایٕیُ ٔیض٘ٓ ‪ ٚ‬دس لجبَ ا‪ ٖٚ‬ایٕیُ ا٘شظبس دسیبفز ػ‪ٛ‬اثؾ س‪ ٚ‬داسْ كبال ٔٗ‬
‫ای‪ٙ‬ؼب ث‪ ٝ‬ػ‪ٛٙ‬اٖ ‪ ٚ Signal‬ؿخق دسیبفز و‪ٙٙ‬ذ‪ ٜ‬ایٕیُ ٔٗ ‪ٞ‬ؼشؾ ‪ ٚSlot‬اسسجبط ثیٗ ایٗ د‪ٛٔ ٚ‬سد س‪ٛ‬ػظ ؿ‪ٝ‬‬
‫ؿیضی ا٘ؼبْ دزیش‪ ٜ‬؟ سبثؼی داسیٓ ث‪٘ ٝ‬بْ ‪ connect‬و‪ٚ ٝ‬ظیف‪ ٝ‬ایٗ سبثغ ثشلشاسی اسسجبط ثبیٗ ‪ٚ Signal‬‬
‫‪ٞSlot‬ؼشؾ ث‪ ٝ‬ك‪ٛ‬سر صیش ػُٕ خ‪ٛ‬ا‪ٞ‬یٓ وشد‪:‬‬

‫ایٗ وذ ٔٗ ‪ٞ‬ؼز ‪:‬‬

‫‪connect(ui->MyhorizontalSlider, SIGNAL(valueChanged(int)), ui-‬‬


‫;)))‪>MyprogressBar, SLOT(setValue(int‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 85‬‬

‫دس ایٗ وذ ٔٗ سبثغ ‪ connect‬س‪ ٚ‬فشاخ‪ٛ‬ا٘ی وشدْ ایٗ سبثغ اثشذا ‪ Signal‬س‪ٔ ٚ‬یٍیش‪ٚ ٜ‬س ثؼذ ‪ Slot‬س‪ ٚ‬ثشای‬
‫ػیٍ‪ٙ‬بِی و‪ ٝ‬اسػبَ وشد‪ ٜ‬ػشؾ ٔیى‪ ٝٙ‬خیّی ساكز ثخ‪ٛ‬ا‪ ٜ‬ػبد‪ ٜ‬سش ثٍٓ ‪ٚ‬ظیفؾ ‪ٕٞ‬ی‪ٙ‬ی‪ ٝ‬و‪ٔ ٝ‬یجی‪ٙ‬یذ ػیٍ‪ٙ‬بَ س‪ٚ‬‬
‫اسػبَ ٔیى‪ ٚ ٝٙ‬اػالر س‪ ٚ‬ثشای ػیٍ‪ٙ‬بَ اسػبَ ؿذ‪ ٜ‬دسیبفز ٔیى‪ ٝٙ‬كبال ای‪ٙ‬ؼب ٔمذاس اسصؿی و‪ٔ ٝ‬ب اسػبَ ٔیى‪ٙ‬یٓ ‪ٚ‬‬
‫دسیبفز ٔیى‪ٙ‬یٓ اص ٘‪ٛ‬ع ‪ٞ int‬ؼشؾ و‪ ٝ‬دس ‪ٞ‬ش د‪ ٚ‬ؿیئ ٔب ٔمذاس ‪ value‬اسػبَ ‪ ٚ‬دسیبفز ٔیـ‪.ٝ‬‬

‫كبال ثؼذ اص اػشا وشدٖ ثش٘بٔ‪ٞ ٝ‬ش ثبس ٔٗ ٔمذاس ‪ Slider‬س‪ ٚ‬سغییش ثذْ ٔمذاس ‪ ٓٞ Progressbar‬سغییش خ‪ٛ‬ا‪ٞ‬ذ‬
‫یبفز ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫خت ایٗ ی‪ ٝ‬خالك‪ ٝ‬ای اص ٔف‪ ْٟٛ‬ػیٍ‪ٙ‬بَ ‪ ٚ‬اػالر ثیٗ ایٗ د‪ ٚ‬و‪ٙ‬ششَ یىٓ س‪ٛ‬ضیق ثذْ دس ساثغ‪ ٝ‬ثب ػز وشدٖ‬
‫ػذاٌب٘‪ٔ ٝ‬مذاس دس و‪ٙ‬ششَ‪Progressbar‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 86‬‬

‫ثشای ایٗ وبس اص دشادشسی ‪ setValue‬ثبیذ اػشفبد‪ ٜ‬و‪ٙ‬یٓ ٔٗ ثشای ٔظبَ ؿ‪ٟ‬بس ٔمذاس ٔشفب‪ٚ‬سر س‪ ٚ‬ثب اػشفبد‪ ٜ‬اص‬
‫و‪ٙ‬ششَ ‪ Button‬ایؼبد ‪ ٚ‬اسػبَ ٔیى‪ ٓٙ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫;)‪[/CPP][CPP]ui->MyprogressBar->setValue(75‬‬

‫ایٗ وذ ٔمذاس ‪ 75‬س‪ ٚ‬اص ‪ 100‬دسكذ ظشفیز ‪ progressbar‬اسػبَ ٔیى‪.ٝٙ‬‬

‫هرحلِ تیست ٍ دٍم ‪ :‬هعرفی ٍ کار تا ‪ّ Statusbar‬ا‬

‫یىی اص أىب٘بر دیٍ‪ ٝ‬دس ٘شْ افضاس ‪ٞ‬ب و‪ ٝ‬دس عشاكی اصؽ ٔیـ‪ ٝ‬اػشفبد‪ ٜ‬وشد ایؼبد ٘‪ٛ‬اس ‪ٚ‬ضؼیز ‪ٞ‬ؼشؾ و‪ ٝ‬خ‪ٛ‬د‬
‫٘‪ٛ‬اس ‪ٚ‬ضؼیز ٔیش‪ ٝ٘ٛ‬ؿبُٔ ‪ٞ‬ش ٘‪ٛ‬ع و‪ٙ‬ششِی ثبؿ‪ ٝ‬ثشای ٔظبَ ث‪ ٝ‬ك‪ٛ‬سر صیش ٘شْ افضاس ‪ TeamViewer‬س‪ٔ ٚ‬ظبَ‬
‫ٔیض٘ٓ صیشؽ دس لؼٕز دبییٗ و‪ ٝ‬ث‪ ٝ‬سً٘ لشٔض ٔـخق وشدْ ٔشٗ ‪ٚ ٚ‬ضؼیز ثش٘بٔ‪ ٝ‬س‪ٔ ٚ‬ـخق ٔیى‪ ٝٙ‬و‪ ٝ‬اك‪ٛ‬ال‬
‫دس ایٗ ٔ‪ٛ‬اسد اص ‪ StatusBar‬اػشفبد‪ٔ ٜ‬یى‪ٙٙ‬ذ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 87‬‬

‫خت كبال ؿغ‪ٛ‬س ایٗ وبس س‪ٔ ٚ‬یـ‪ ٝ‬ا٘ؼبْ داد ای‪ٙ‬غ‪ٛ‬س ثبیذ ثٍٓ و‪ ٝ‬خیّی ساكشش اص وبس دس دار ٘ز ‪ٞ‬ؼز ! ‪ٚ‬الؼب‬
‫ساكش‪ ٝ‬ا‪ٚ‬ال خ‪ٛ‬د ‪ Qt‬ؿ‪ٟ‬بسؿ‪ٛ‬ة اػشب٘ذاسدی س‪ ٚ‬داس‪ ٜ‬و‪ ٝ‬اك‪ٛ‬ال ‪ٞ Widget ٕٝٞ‬ب ث‪ ٝ‬ك‪ٛ‬سر دیـفشم اص ایٗ‬
‫أىب٘بر دـشیجب٘ی ٔیى‪ٙٙ‬ذ كبال ٔٗ ٔیخ‪ٛ‬اْ یه ٘‪ٛ‬ع ثشؿؼت ث‪ ٝ‬ػ‪ٛٙ‬اٖ خ‪ٛ‬ؽ آٔذ ٌ‪ٛ‬یی س‪ٚ‬ی ‪ٚ‬یؼشٓ دسػز و‪ٓٙ‬‬
‫ث‪ ٝ‬ك‪ٛ‬سر صیش‪...‬‬

‫اثشذا یه ٘‪ٛ‬ع ‪ٔ label‬یؼبصْ‪:‬‬

‫;)(‪QLabel *Mylbl = new QLabel‬‬


‫;)"‪Mylbl->setText("Welcome to C++ Qt Designer tutorial‬‬

‫خت كبال ثشای ای‪ٙ‬ى‪ ٝ‬ایٗ ثشؿؼت ایؼبد ؿذ‪ ٜ‬س‪ ٚ‬س‪ٚ‬ی ‪ٕ٘ Statusbar‬بیؾ ثذْ ثبیذ ث‪ ٝ‬ك‪ٛ‬سر صیش ػُٕ و‪ٓٙ‬‬
‫‪:‬‬
‫;)‪ui->statusBar->addWidget(Mylbl‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 88‬‬

‫خیّی ػبد‪ ٚ ٜ‬ساكز ثب ی‪ ٝ‬دػش‪ٛ‬س ‪ addWidget‬اص ‪ Statusbar‬آثؼىز ‪ Label‬س‪ ٚ‬ث‪ٟ‬ؾ اكبف‪ٔ ٝ‬یى‪ٚ ٓٙ‬‬
‫٘شیؼ‪ٔ ٝ‬یـ‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫هرحلِ تیست ٍ سَم‪ :‬هعرفی ٍ کار تا‪MessageBox‬‬

‫خت یىی اص ٔ‪ٛ‬اسدی و‪ ٝ‬خیّی دش وبسثشد ‪ٞ‬ؼشؾ ٔخل‪ٛ‬كب ثشای ٕ٘بیؾ دیغبْ ‪ٞ‬بی خبف ٔظُ ‪$‬اخغبس ‪/‬‬
‫اعالػبر ‪ /‬ػ‪ٛ‬اَ ‪ ٚ‬ػ‪ٛ‬اة ‪ #... ٚ‬اػشفبد‪ ٜ‬اص ‪ٞ MessageBox‬ؼشؾ و‪ ٝ‬دس ‪ C++‬دس كبِز ‪ٞ‬بی ٔخشّفی‬
‫ٔیـ‪ ٝ‬اصؽ اػشفبد‪ ٜ‬وشد ‪ ٗٔ ٚ‬دس ایٗ آٔ‪ٛ‬صؽ ثشای ‪Qt‬ایٗ ٔظبَ س‪ ٚ‬سمشیجب ػؼی ٔیى‪ ٓٙ‬وبُٔ ثض٘ٓ سب ث‪ٟ‬شش ‪ٚ‬‬
‫ٔفیذسش ثبؿ‪.ٝ‬‬

‫ثشای ای‪ٙ‬ى‪ ٝ‬دس ثش٘بٔش‪ ٖٛ‬اص ‪ MessageBox‬اػشفبد‪ ٜ‬و‪ٙ‬یذ اثشذای فبیّش‪ ٖٛ‬ثبیز ایٗ والع س‪ ٚ‬فشاخ‪ٛ‬ا٘ی و‪ٙ‬یذ ‪:‬‬
‫‪QmessageBox‬‬

‫ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫"‪#include "QMessageBox‬‬
‫خت كبال ٔٗ ٔیش‪ ٓ٘ٛ‬اص ایٗ والع اػشفبد‪ ٜ‬و‪ ٓٙ‬اثشذا اصؽ ی‪ ٝ‬ؿیئ ػذیذ ٔیؼبصْ‪:‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 89‬‬

‫;‪QMessageBox MyMSG‬‬
‫;)")‪MyMSG.setText("Welcome to C++ Tutorial :‬‬
‫;)(‪MyMSG.exec‬‬
‫دس خظ ا‪ َٚ‬اص والع ‪ QMessageBox‬یه ٕ٘‪ ٝ٘ٛ‬ػبخشٓ ‪ ٚ‬دس خظ د‪ٔ ْٚ‬ش‪ٙ‬ی س‪ ٚ‬دس‪ ٖٚ‬ایٗ آثؼىز ‪ٚ‬اسد‬
‫وشدْ ‪ ٚ‬دس خظ ثؼذی اص ٔشذ ‪ exec‬ثشای ٕ٘بیؾ ‪ Dialog‬ثشای دیغبْ اػشفبد‪ ٜ‬وشدْ و‪٘ ٝ‬شیؼؾ ثبیذ ثبؿ‪ ٝ‬ث‪ٝ‬‬
‫ك‪ٛ‬سر صیش‪:‬‬

‫خت كبال ٔٗ للذ داسْ یىٕی دیـشفش‪ ٝ‬سش وبس و‪ ٓٙ‬ثب ٔ‪ٛ‬اسدی و‪ٔ ٝ‬یـ‪ ٝ‬دس ایٗ والع اصؿ‪ ٖٛ‬ث‪ٟ‬ش‪ٕٙٞ‬ذ ؿذ آؿ‪ٙ‬ب‬
‫ٔیـیٓ ‪ ...‬ثشای ٔظبَ ٔٗ ٔیخ‪ٛ‬اْ اص ایٗ لبثّیز ثشای دشػؾ ػ‪ٛ‬اَ اػشفبد‪ ٜ‬و‪٘ ٚ ٓٙ‬شیؼؾ س‪ ٚ‬ثب اػشفبد‪ ٜ‬اص ‪ Yes‬یب‬
‫‪ٔNo‬ـخق و‪ ٓٙ‬ث‪ ٝ‬ك‪ٛ‬سر صیش وذ س‪ٔ ٚ‬ی‪ٛٙ‬یؼٓ‪:‬‬

‫;‪QMessageBox msgBox‬‬
‫;)"‪msgBox.setText("Welcome to C++ Tutorial‬‬
‫;)"?‪msgBox.setInformativeText("Do you want to save your changes‬‬
‫| ‪msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard‬‬
‫;)‪QMessageBox::Cancel‬‬
‫;)‪msgBox.setDefaultButton(QMessageBox::Save‬‬
‫;)(‪int ret = msgBox.exec‬‬
‫خت خظ ا‪ ٚ َٚ‬د‪ ْٚ‬و‪ٔ ٝ‬ـخل‪ ٚ ٝ‬دس خظ ػ‪ٔ ْٛ‬ش‪ٙ‬ی س‪ ٚ‬ثشای ٕ٘بیؾ ث‪ ٝ‬ػ‪ٛٙ‬اٖ ػ‪ٛ‬اَ دشػی س‪ٛ‬ػظ دشادشسی‬
‫‪setInformativeText‬اسػبَ ٔیى‪ ٓٙ‬دس خظ ثؼذیؾ س‪ٛ‬ػظ دشادشسی ‪setStandardButtons‬دوٕ‪ٝ‬‬
‫‪ٞ‬بیی س‪ ٚ‬و‪ٔ ٝ‬یخ‪ٛ‬اْ وبسثش ‪ٍٙٞ‬بْ ػ‪ٛ‬اَ دشػی ثجی‪ ٝٙ‬س‪ٔ ٚ‬ـخق ٔیى‪ ٓٙ‬و‪ ٝ‬دس ای‪ٙ‬ؼب ػ‪ٌ ٝ‬ضی‪Save / ٝٙ‬‬
‫‪Cancel / Discard‬س‪ ٗٔ ٚ‬ا٘شخبة ٔیى‪ ٚ ٓٙ‬دس خظ ثؼذ ٔـخق وشدْ و‪ ٝ‬دوٕ‪ Save ٝ‬ث‪ ٝ‬ػ‪ٛٙ‬اٖ دوٕ‪ٝ‬‬
‫دیـفشم دس كبِز ا٘شخبة ؿذ‪ ٜ‬لشاس ثٍیش‪.ٜ‬‬

‫‪ ٚ‬دس ٘‪ٟ‬بیز دیغبْ س‪ٕ٘ ٚ‬بیؾ ٔیذْ ‪ٔ ٚ‬مذاس ثبصٌـشی كبكُ اص ا٘شخبة وبسثش س‪ ٚ‬ث‪ٔ ٝ‬شغیش ‪ ret‬و‪ ٝ‬اص ٘‪ٛ‬ع ‪int‬‬
‫‪ٞ‬ؼشؾ اسػبَ ٔیى‪.ٓٙ‬‬

‫ث‪ ٝ‬ك‪ٛ‬سر صیش ٕ٘بیؾ داد‪ ٜ‬خ‪ٛ‬ا‪ٞ‬ذ ؿذ‪:‬‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 90‬‬

‫خت كبال ػ‪ٛ‬اِی ایٗ ‪ٚ‬ػظ ‪ٞ‬ؼشؾ و‪ ٝ‬اٌ‪ ٝ‬وبسثش ‪ٞ‬ش وّیذی و‪ ٝ‬ا٘شخبة وشد س‪ٔ ٚ ٚ‬مذاسؽ س‪ ٚ‬ثبصٌـز داد‬
‫ثٍیش‪ ٚ ٜ‬ی‪ ٝ‬وبسی ا٘ؼبْ ثذ‪ٔ ٜ‬ظال اٌ‪ Save ٝ‬س‪ ٚ‬صد ی‪ ٝ‬وبسی ‪ ٚ‬اٌ‪ ٝ‬ثمی‪ ٝ‬س‪ ٚ‬صد وبس‪ٞ‬بی ٔشفب‪ٚ‬ر دیٍشی س‪ ٚ‬ا٘ؼبْ‬
‫ثذ‪ ... ٜ‬ثشای ایٗ وبس ث‪ ٝ‬س‪ٚ‬ؽ صیش ػُٕ ٔیى‪:ٓٙ‬‬

‫{ )‪switch (ret‬‬
‫‪case QMessageBox::Save:‬‬
‫‪// Save was clicked‬‬
‫;‪break‬‬
‫‪case QMessageBox::Discard:‬‬
‫‪// Don't Save was clicked‬‬
‫;‪break‬‬
‫‪case QMessageBox::Cancel:‬‬
‫‪// Cancel was clicked‬‬
‫;‪break‬‬
‫‪default:‬‬
‫‪// should never be reached‬‬
‫;‪break‬‬
‫}‬

‫دػش‪ٛ‬س ‪ Switch‬یىی اص دػش‪ٛ‬سار ٔؼش‪ٚ‬فی ‪ٞ‬ؼز و‪ ٝ‬دس ٔ‪ٛ‬الغ دیـیذ‪ ٜ‬سش ‪ ٚ‬ؿ‪ٙ‬ذ ٌضی‪ ٝٙ‬ای سش ث‪ٟ‬شش ػ‪ٛ‬اة ٔیذ‪.ٜ‬‬

‫عشص وبسؽ ؿغ‪ٛ‬سی‪ ٝ‬؟ خت ٔشغیش ‪ ret‬و‪ ٝ‬داؿشیٓ ا‪ ٖٚ‬ثبال ‪ٞ‬ش دوٕ‪ ٝ‬ای س‪ ٚ‬و‪ٔ ٝ‬ب ا٘شخبة و‪ٙ‬یٓ س‪ٛ‬ػظ دػش‪ٛ‬س‬
‫‪switch‬اسصیبثی ٔیـ‪٘ ٚ ٝ‬شیؼ‪ ٝ‬ثش اػبع ػّیم‪ٔ ٝ‬ـخق خ‪ٛ‬ا‪ٞ‬ذ ؿذ‪.‬‬

‫ٔظال ٔٗ دس ٔظبِی و‪ ٝ‬صدْ ث‪ ٝ‬ك‪ٛ‬سر صیش ‪ٞ‬ش ا٘شخبثی دیغبٔؾ س‪ ٚ‬اسػبَ خ‪ٛ‬ا‪ٞ‬ذ وشد ث‪ ٝ‬یه ‪ Label‬و‪ ٝ‬س‪ٚ‬ی‬
‫فشٔٓ ‪ٞ‬ؼز‪.‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 91

switch (ret) {
case QMessageBox::Save:
// Save was clicked
ui->MyLabel->setText("Save");
break;
case QMessageBox::Discard:
// Don't Save was clicked
ui->MyLabel->setText("Discard");

break;
case QMessageBox::Cancel:
// Cancel was clicked
ui->MyLabel->setText("Cancel");

break;
default:
// should never be reached
break;
}
: ‫یذ‬ٙ‫سر صیش ػُٕ و‬ٛ‫ ك‬ٝ‫ٓ ث‬ٞ ‫ ثشای ایٗ وبس‬ٝ‫ و‬ICON ٖ‫ا‬ٛٙ‫ ػ‬ٝ‫ٓ داسیٓ ث‬ٞ ‫ ای‬ٍٝ‫ٓ دی‬ٟٔ Property ٝ‫ی‬

msgBox.setIcon(QMessageBox::Question);

:‫سر صیش‬ٛ‫ ك‬ٝ‫ ث‬ٝ‫٘شیؼؾ ٔیـ‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 92‬‬

‫هرحلِ تیست ٍ چْارم‪ :‬هعرفی ٍ کار تا‪Timer / Qtimer‬‬

‫دس ثبس‪ٕ٘ٛٞ ٓٞ Timer ٜ‬غ‪ٛ‬س و‪ٔ ٝ‬یذ‪٘ٚ‬یذ یىی اص ٔ‪ٛ‬اسدی ‪ٞ‬ؼشؾ و‪ ٝ‬دس ػبد‪ ٜ‬سشیٗ كبِز ٔیـ‪ ٝ‬اصؽ ػبػز‬
‫و‪٘ٛٙ‬ی ػیؼشٓ س‪ٌ ٚ‬شفز ‪ ٚ‬سغییش ػبػز ‪ /‬دلیم‪ / ٝ‬طب٘ی‪ ٝ‬س‪ ٚ‬ث‪ ٝ‬ك‪ٛ‬سر ‪ٕ٘ Update‬بیؾ داد‪ .‬ثشای ایٗ وبس ٔب‬
‫ٔیش‪٘ٛ‬یٓ والع وبُٔ ‪ ٚ‬ػبٔؼی س‪ ٚ‬ثشای یه ‪ Timer‬اخشلبكی دس ثش٘بٔ‪ ٝ‬ث‪ٛٙ‬یؼیٓ و‪ ٝ‬ثش اػبع ‪ٚ Signal‬‬
‫‪ٞSlot‬بی سؼشیف ؿذ‪ ٜ‬اصؽ اػشفبد‪ ٜ‬وشد‪.‬‬

‫ٔٗ دس ایٗ ٔشكّ‪٘ ٝ‬ل‪ٕ٘ ٜٛ‬بیؾ سغییشار ِلظ‪ ٝ‬صٔبٖ ػبسی ػیؼشٕٓ س‪٘ ٚ‬ـ‪ٔ ٖٛ‬یذْ و‪ ٝ‬ػبػز ‪ /‬دلیم‪ / ٝ‬طب٘ی‪ ٝ‬س‪ٚ‬‬
‫س‪ٚ‬ی فشٔٓ ٕ٘بیؾ خ‪ٛ‬ا‪ ٓٞ‬داد دس كبِشی و‪ٞ ٝ‬ش طب٘ی‪ ٝ‬ث‪ ٝ‬طب٘ی‪ ٝ‬ػُٕ ‪ Update‬ك‪ٛ‬سر ثٍیش‪.ٜ‬‬

‫اثشذا والع ‪ QTimer‬س‪ ٚ‬كذا ٔیض٘ٓ‪:‬‬

‫>‪#include <QTimer‬‬
‫دس فشْ ِ‪ٛ‬د وذ صیش س‪ٔ ٚ‬ی‪ٛٙ‬یؼٓ ‪:‬‬

‫‪//Start to get System time.‬‬

‫;)‪QTimer *timer = new QTimer(this‬‬


‫;)‪timer->setInterval(1000‬‬
‫;)(‪timer->start‬‬
‫‪connect(timer, SIGNAL(timeout()),‬‬
‫;)))(‪SLOT(updateClock‬‬
‫دس ایٗ وذ ٔٗ اثشذا یه ٘‪ٛ‬ع وذی اص سبیٕش یؼ‪ٙ‬ی ‪ QTimer‬ایؼبد ٔیى‪ ٓٙ‬دس خظ ثؼذی ٔمذاس ‪ٔ 1000‬یّی‬
‫طب٘ی‪ ٝ‬یب ‪ 1 ٖٕٛٞ‬طب٘ی‪ ٝ‬س‪ ٚ‬ث‪ٟ‬ؾ ٔیذْ دس خظ ػ‪ ْٛ‬اػشبسر ٔیض٘ٓ ‪ ٚ‬دس خظ ثؼذی اص سبثغ‪ connect‬ثشای اسػبَ‬
‫‪ ٚSignal‬دسیبفز ػ‪ٛ‬اة اص عشف ‪ Slot‬س‪ٔ ٚ‬ی‪ٛٙ‬یؼٓ و‪ ٝ‬ثشای ایؼبد اػالر ٘یبص داسْ ی‪ ٝ‬سبثؼی ث‪ٝ‬‬
‫٘بْ ‪ updateClock‬و‪ ٝ‬صٔبٖ ػیؼشٓ س‪ ٚ‬ثشای ٔٗ ثٍیش‪ ٚ ٜ‬ثشٌـز ثذ‪.ٜ‬‬

‫دس فبیُ ‪ mainwindow.h‬اػالر )‪ٔ (Slot‬شث‪ٛ‬ط ث‪ ٝ‬ایٗ سبثغ س‪ٔ ٚ‬ؼشفی ٔیى‪ ٓٙ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫‪//System Clock update‬‬


‫‪private slots:‬‬
‫;)(‪void updateClock‬‬
‫٘‪ٛ‬ع سبثغ س‪ ٚ‬اص ٘‪ٛ‬ع سبثغ ثب دػششػی ‪ private‬ث‪ ٝ‬ػ‪ٛٙ‬اٖ ‪ Slot‬دس ٘ظش ٔیٍیشْ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 93‬‬

‫كبال ثش ٔیٍشدْ فبیُ ‪ ٚ mainwindow.cpp‬سبثغ س‪ٔ ٚ‬ی‪ٛٙ‬یؼٓ ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫)(‪void MainWindow::updateClock‬‬
‫{‬
‫;)"‪QString timeString = QTime::currentTime().toString("hh:mm:ss‬‬
‫;)‪ui->LCurrenTtime->setText(timeString‬‬
‫}‬

‫خت ای‪ٙ‬ؼب ٔٗ ثذ٘‪ ٝ‬سبثغ س‪ ٚ‬سـىیُ ٔیذْ ‪ ٚ‬یه ٔشغیشی اص ٘‪ٛ‬ع سؿش‪ QString ٝ‬ایؼبد وشد‪ ٚ ٜ‬ثؼذ س‪ٛ‬ػظ سبثغ ٔ‪ٛ‬ػ‪ٛ‬د دس‬
‫والع ‪ QTime‬دلز و‪ٙ‬یذ ایٗ ‪ٞ QTime‬ؼشؾ ثب ‪ QTimer‬فشق ٔیى‪ ٝٙ‬ث‪ ٝ‬ایٗ ‪ r‬س‪ٛ‬ػ‪ ٝ‬و‪ٙ‬یذ !!! ‪ٚ‬ظیف‪ ٝ‬ایٗ والع ثشٌـز دادٖ صٔبٖ‬
‫ػبسی ػیؼشٓ ‪ٞ‬ؼز و‪ ٝ‬س‪ٛ‬ػظ ٔمذاس ثبصٌـشی طبثز )‪ (Static‬ث‪ ٝ‬ك‪ٛ‬سر ‪ currentTime‬س‪ٚ ٚ‬اسد ٔشغیشْ اص ٘‪ٛ‬ع سؿش‪ٔ ٝ‬یى‪ ٓٙ‬اِجش‪ ٝ‬لجّؾ‬
‫سجذیُ ث‪ ٝ‬سؿش‪ٔ ٝ‬یـ‪ ٚ ٝ‬س‪ٛ‬ػظ اٍِ‪ٛ‬ی ‪ : hh:mm:ss‬ػبػز ‪ :‬دلیم‪: ٝ‬طب٘ی‪ ٝ‬اسػبَ ٔیـ‪ ٝ‬ث‪ ٝ‬داخُ ٔشغیش‪.‬‬

‫دس خظ ثؼذی ‪ ٓٞ‬و‪ٔ ٝ‬ـخل‪ٔ ٝ‬مذاس ٔشٗ ‪ٛٔ label‬ػ‪ٛ‬د س‪ٚ‬ی فشٔٓ س‪ ٚ‬و‪ ٝ‬اػٕؾ س‪ٌ LCurrenTtime ٚ‬زاؿشٓ ثشاثش ٔیى‪ ٓٙ‬ثب ٔشغیشی و‪ٝ‬‬
‫صٔبٖ ػبسی ػیؼشٓ دس ا‪ ٖٚ‬رخیش‪ٔ ٜ‬یـ‪.ٝ‬‬

‫فمظ ی‪٘ ٝ‬ىش‪ ٝ‬و‪ ٝ‬ثبیذ ثشای اػشفبد‪ ٜ‬اص ‪ ٓٞ QTime‬والػؾ س‪ٚ ٚ‬اسد فبیُ ٔى‪ٙ‬یذ ث‪ ٝ‬ك‪ٛ‬سر صیش ‪٘ ٚ‬شیؼ‪ٟ٘ ٝ‬بیی‪...‬‬

‫"‪#include "QTime‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 94‬‬

‫هرحلِ تیست ٍ پٌجن ‪ :‬هعرفی ٍ کار تا ‪ّ Thread‬ا‬

‫‪ Thread‬ؿیؼز ‪ ٚ‬ؿ‪ ٝ‬وبس‪ٞ‬بی ا٘ؼبْ ٔیذ‪ ٜ‬؟ دس وُ ث‪ ٝ‬ؿ‪ ٝ‬دسدی ٔیخ‪ٛ‬س‪ ٚ ٜ‬ؿشا ثبیذ اصؽ اػشفبد‪ ٜ‬و‪ٙ‬یٓ ؟‬

‫س‪ٛ‬ضیق س‪ ٚ‬خیّی ٔخشلش ‪ ٚ‬خیّی ػبد‪ ٜ‬ث‪ ٝ‬صث‪ ٖٛ‬خ‪ٛ‬دٔ‪ٔ ٖٛ‬یٍٓ سب وؼبیی و‪ ٝ‬سبكبال ایٗ ٔ‪ٛ‬ض‪ٛ‬ع س‪ ٚ‬دسن ٘ىشدٖ‬
‫ؿفبفشش ‪ ٚ‬س‪ٚ‬ؿ‪ٙ‬شش دسوؾ و‪ٙٙ‬ذ‪.‬‬

‫ث‪ ٝ‬ع‪ٛ‬س وّی دس ٘ظش ثٍیشیذ یه دػشٍب‪ٞ ٜ‬بی ك‪ٛ‬سی یب ٘‪ٛ‬اس ‪ٞ‬بی ‪ٚ‬یذئ‪ٛ‬یی لذیٕی س‪ ٚ‬و‪ ٝ‬اص ف‪ٙ‬ب‪ٚ‬سی ‪Caset‬‬
‫اػشفبد‪ٔ ٜ‬یى‪ٙٙ‬ذ دس ایٗ كبِز ؿٕب ‪ٚ‬لشی ٔ‪ٛ‬صیه یب فیّٕی س‪ ٚ‬سٕبؿب ٔیى‪ٙ‬یذ اٌ‪ ٝ‬ثیٗ فیّٓ و‪٘ٛٙ‬ی ٘یبص داؿش‪ ٝ‬ثبؿیذ سب‬
‫ؿ‪ٙ‬ذ سشن اص ا‪ ٖٚ‬س‪ ٚ‬ث‪ ٝ‬ػّ‪ ٛ‬ثذیٗ ‪ ٚ‬ؿ‪ٙ‬ذ فیّٓ دیٍ‪ ٝ‬س‪ ٚ‬ثجی‪ٙ‬یذ ٔؼج‪ٛ‬س ‪ٞ‬ؼشیذ سب ا‪ ٖٚ‬فیّٓ س‪ ٚ‬ثیخیبَ ثـیذ ‪ ٚ‬كبِز‬
‫‪ Seek‬س‪ ٚ‬ا٘ؼبْ ثذیٗ یؼ‪ٙ‬ی ثىـیذؽ ػّ‪ ٛ‬سب ث‪ ٝ‬فیّٓ ٔ‪ٛ‬سد ٘ظشس‪ ٖٛ‬ثشػیذ دس ایٗ كبِز ػُٕ سشسیجی ثشای سػیذٖ‬
‫ث‪ٞ ٝ‬ذف ك‪ٛ‬سر ٌشفش‪ ٝ‬یؼ‪ٛ‬س ػؼشؼ‪ٛ‬ی سشسیجی ثشای سػیذٖ ث‪ٞ ٝ‬ذف ‪ ٚ‬اػشای ا‪ٞ ٖٚ‬ؼشؾ كبال ٔب ‪ٚ‬لشی دـز‬
‫وبٔذی‪ٛ‬سش ٔیـی‪ٙ‬یٓ ‪ ٚ‬ا٘شغبس داسیٓ ‪ٚ‬اسد ػیؼشٓ ػبُٔ و‪ ٝ‬ؿذیٓ ؿ‪ٙ‬ذیٗ وبس س‪ ٓٞ ٚ‬صٔبٖ ا٘ؼبْ ثذیٓ ثشای ٔظبَ ٔٗ‬
‫ٔبیّٓ ی‪ ٝ‬عشف ثش٘بٔ‪ ٝ‬وبٔذبیُ و‪ ٓٙ‬ی‪ ٝ‬عشف ٔ‪ٛ‬صیىٕ‪ٌٛ ٛ‬ؽ ثذْ ی‪ ٝ‬عشفٓ ثش٘بٔ‪ٞ ٝ‬بی ‪ Messenger‬آ٘الیٗ‬
‫و‪ ... ٚ ٓٙ‬دیٍ‪ ٝ‬ای‪ٙ‬ؼب ‪ٞ‬یؾ وغ كبَ ‪ ٚ‬ك‪ٛ‬كّ‪ ٝ‬ای‪٘ ٛٙ‬ذاس‪ ٜ‬ثیبد ثـی‪ ٝٙ‬د‪ ٝ٘ٚ‬د‪ ٝ٘ٚ‬وبس و‪ٔ ٝٙ‬ظال ا‪ َٚ‬دیغبْ ثذ‪ٙٔ ٜ‬شظش‬
‫ثـ‪ ٝ‬سٕ‪ ْٛ‬ؿ‪ ٚ ٝ‬ثؼذ ثش‪ ٜ‬ثش٘بٔـ‪ ٛ‬وبٔذبیُ و‪ ٚ ٝٙ‬ثؼذ اص ا‪ ٓٞ ٖٚ‬سبص‪ ٜ‬ثیبد ٔ‪ٛ‬صیه ٔ‪ٛ‬سد ػاللـ‪ Play ٛ‬و‪ٌٛ ٚ ٝٙ‬ؽ‬
‫ثذ‪ ! ٜ‬ایٗ ن ٘ـذ ص٘ذٌی ػضیض ٔٗ ثشای ‪ٕٞ‬ی‪ٔ ٓٙ‬ب ثلض ‪ Thread‬س‪ٔ ٚ‬یبسیٓ ‪ٚ‬ػظ و‪ ٝ‬سٕبْ ایٗ ‪ٚ‬ظبیف س‪ٚ‬‬
‫س‪ٛ‬ػظ ایٗ ٔ‪ٛ‬سد كّؾ ٔیى‪ٙ‬یٓ‪.‬‬

‫اال ثشای ؿش‪ٚ‬ع وبس ٔٗ دس ٔظبِی و‪ ٝ‬آٔ‪ٛ‬صؽ خ‪ٛ‬ا‪ ٓٞ‬داد دلیمب س‪ٛ‬ضیق ٔیذْ و‪ ٝ‬ؿی ث‪ ٝ‬ؿی‪ِٚ ٝ‬ی ػشػز وبٔذی‪ٛ‬سش‬
‫‪ٞ‬ب ا٘مذس صیبد‪ ٜ‬و‪ ٝ‬ایٗ دش‪ٚ‬ػ‪ٞ ٝ‬ب دس ‪ background‬ك‪ٛ‬سر ٔیٍیش٘ذ ‪ ٚ‬ؿٕب اكؼبع ٘خ‪ٛ‬ا‪ٞ‬یذ وشد و‪ ٝ‬وذ‪ْٚ‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 95‬‬

‫‪Thread‬وی ‪ ٚ‬ؿ‪ ٝ‬صٔب٘ی اػشا ؿذ ! ‪ِٚ‬ی ٘شیؼ‪ ٝ‬ای و‪ ٝ‬خ‪ٛ‬ا‪ٞ‬یذ دیذ ای‪ ٝٙ‬و‪ٛٔ ٝ‬اسدی و‪ ٝ‬دسخ‪ٛ‬اػز دشداصؽ‬
‫فشػشبدیٓ ث‪ٕٞCPU ٝ‬ـ‪ ٖٛ‬دس كبَ اػشا ‪ٞ‬ؼش‪ٙ‬ذ ؿ‪ ٖٛ‬دس وُ ‪ CPU‬ثش اػبع ‪ٞ Thread‬ب ثش٘بٔ‪ٞ ٝ‬بس‪ٚ‬‬
‫ا‪ِٛٚ‬یز ث‪ٙ‬ذی ٔیى‪ ٝٙ‬ثشای ٔظبَ ث‪ ٝ‬دش‪ٚ‬ػ‪ٞ ٝ‬بی صیش دلز و‪ٙ‬یذ‬

‫عجك سل‪ٛ‬یش اٌ‪ ٝ‬دلز و‪ٙ‬یذ وّی ثش٘بٔ‪ ٝ‬دس كبَ اػشا ‪ٞ‬ؼش‪ٙ‬ذ و‪ٞ ٝ‬ش وذ‪ٔٚ‬ـ‪ ٖٛ‬وّی ث‪ٙ‬ذ‪ ٚ‬ثؼبط ثشای خ‪ٛ‬دؿ‪ٖٛ‬‬
‫د‪ ٟٗ‬وشدٖ ػش ‪ CPU‬و‪ ٝ‬اٌ‪ ٝ‬ؿ‪ٙ‬یٗ ٔ‪ٛ‬اسد س‪ ٚ‬س‪ٛ‬ػظ ‪ٞ Thread‬ب ٔذیشیز ٘ى‪ٙ‬یٓ ‪ CPU‬لبدس ث‪ ٝ‬دشداصؽ‬
‫‪ٞ‬شیه اص دسخ‪ٛ‬اػز ‪ٞ‬بی ٔشفب‪ٚ‬ر ‪ٔ ٚ‬خشق ‪ ٕٝٞ‬ایٗ ثش٘بٔ‪ٞ ٝ‬بی دس كبَ اػشا ث‪ ٝ‬ك‪ٛ‬سر ‪ ٓٞ‬صٔبٖ س‪٘ ٚ‬خ‪ٛ‬ا‪ٞ‬ذ‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 96‬‬

‫داؿز دس كیٗ اػشا دش‪ٚ‬ػ‪ ٝ‬ؿٕب ثش٘بٔش‪ ًٙٞ ٖٛ‬خ‪ٛ‬ا‪ٞ‬ذ وشد ! ث‪ٙ‬بثشایٗ اػشفبد‪ ٜ‬اص ‪ٞ Thread‬ب دس ثش٘بٔ‪ٞ ٝ‬ب خیّی‬
‫‪ٚ‬اػج‪ ٝ‬دس وُ یؼ‪ٙ‬ی ثش٘بٔ‪ ٝ‬ای و‪ٔ ٝ‬ی‪ٛٙ‬یؼیذ اٌ‪ Thread ٝ‬س‪ٛ‬ؽ ثىبس ثشد‪٘ ٜ‬ـذ‪ ٜ‬ثبؿ‪ ٝ‬یه سیبَ ‪ ٓٞ‬اسصؽ ٘ذاس‪ٜ‬‬
‫اِجش‪ ٝ‬ایٗ ٘ظش ؿخلی ٔٗ ‪ٞ‬ؼز!‬

‫خت كبال ی‪ ٝ‬ثلض دیٍ‪ ٝ‬ثشای س‪ٚ‬ؿ‪ٙ‬شش وشدٖ یىی دیٍ‪ ٝ‬اص ف‪ٛ‬ایذ ‪ٞ Thread‬ب ‪ ...‬ث‪ ٝ‬ع‪ٛ‬س وّی ‪ٞ‬شوذ‪ ْٚ‬اص ثش٘بٔ‪ٝ‬‬
‫‪ٞ‬بی دس كبَ اػشا ثش اػبع ا‪ِٛٚ‬یز ث‪ٙ‬ذی ‪ Thread‬ا‪ ٖٚ‬ثش٘بٔ‪ ٝ‬دس اخشیبس ‪ CPU‬لشاس ٔیٍیش‪ ٜ‬یؼ‪ٙ‬ی اٌش ا‪ِٛٚ‬یز‬
‫ثش٘بٔ‪ ٗٔ Visual Studio ٝ‬ثیـشش اص ثش٘بٔ‪ٔ ٝ‬ظال ‪ ٗٔ Qt Creator‬ثبؿ‪ ٚ ٝ‬دس ایٗ ك‪ٛ‬سر اٌش ‪ٕٞ‬ضٔبٖ س‪ٚ‬ی‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 97‬‬

‫‪ٞ‬ش د‪ٚ‬سبی ای‪ٟٙ‬ب ثش٘بٔ‪ ٝ‬ای س‪ ٚ‬وبٔذبیُ و‪ ٓٙ‬ا‪٘ٚ‬ی و‪ ٝ‬ا‪ِٛٚ‬یز دشداصؽ س‪ٚ‬ؽ ثبالسش ‪ٞ‬ؼز ػشیؼشش ‪ ٚ‬اثشذا دس اخشیبس‬
‫دشداصؽ ثشای ‪ CPU‬اسػبَ ٔیـ‪ٛ‬د و‪ ٝ‬ای‪ ٓٙ‬یىی دیٍ‪ ٝ‬اص ف‪ٛ‬ایذ ‪ٞ Thread‬ؼشؾ دغ ثجی‪ٙ‬یذ خیّی ٔ‪ ٕٟٝ‬دس‬
‫ثش٘بٔ‪ٞ ٝ‬بیی و‪ ٝ‬دش اص ؿشایظ س‪ ٛ‬دس س‪ ٚ ٛ‬س‪ٛ‬اثغ اػشایی دائٕب دس كبَ اػشا ‪ٞ‬ؼشٗ اص ‪ٞ Thread‬ب اػشفبد‪ ٜ‬و‪ٙ‬یٓ‪.‬‬

‫ث‪ ٝ‬ع‪ٛ‬س وّی ‪ٞ‬ش صٔب٘یى‪ ٝ‬ثخ‪ٛ‬ا‪ٞ‬یٓ دس ثیؾ اص یه وبس سا ث‪ ٝ‬ع‪ٛ‬س ‪ ٓٞ‬صٔبٖ دیؾ ثجشیٓ ث‪ٟ‬شش اػز اػشفبد‪ٜ‬‬
‫‪ٞ‬ب س‪ ٚ‬فشأ‪ٛ‬ؽ ٘ى‪ٙ‬یٓ‪.‬‬ ‫اص ‪Thread‬‬

‫خت ثشای ؿش‪ٚ‬ع ایٗ وبس ث‪ٟ‬شش اػز یه والػی ایؼبد و‪ٙ‬یٓ اثشذا یه دش‪ٚ‬ط‪ ٜ‬اص ٘‪ٛ‬ع ‪QConsole‬‬
‫‪ ٚApplication‬ثؼذ ث‪ ٝ‬ك‪ٛ‬سر صیش س‪ٚ‬ی دش‪ٚ‬ط‪ ٜ‬ساػز وّیه و‪ٙ‬یذ ‪ ٚ Add new ٚ‬ثؼذ لؼٕز ‪C++‬‬
‫ٌضی‪ C++ Class ٝٙ‬س‪ ٚ‬ا٘شخبة ٔیى‪ٙ‬یٓ ث‪ ٝ‬ك‪ٛ‬سر صیش ‪ ٚ‬ادأ‪ ٝ‬آٖ‪....‬‬

‫كبال اعالػبر والع س‪ٔ ٚ‬یذیٓ ث‪ ٝ‬ك‪ٛ‬سر صیش ‪٘ ...‬بٔؾ س‪ٔ ٚ‬یضاسْ‪MyThread‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 98

MyThread.cpp ٚ MyThread.h ‫بی‬ٞ ُ‫ ثب فبی‬ٜ‫ٕشا‬ٞ MyThread ْ‫ ٔیذیٓ سب والع ٔب ثب ٘ب‬ٝٔ‫ ادا‬ٚ


.ٝ‫ایؼبد ثـ‬

:‫سر صیش‬ٛ‫ ك‬ٝ‫یذس ٔٗ ؿذ ث‬ٞ ُ‫فبی‬

#ifndef MYTHREAD_H
#define MYTHREAD_H

class MyThread
{
public:
MyThread();
};

#endif // MYTHREAD_H
.cppُ‫ٓ اص فبی‬ٙ‫ ای‬ٚ

#include "mythread.h"
MyThread::MyThread()
{

}
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 99‬‬

‫والع ٔٗ اػٕؾ ‪ٞ‬ؼز ‪ MyThread‬اص ٘‪ٛ‬ع ‪ِٚ public‬ی ٔٗ ثشای ؿش‪ٚ‬ع وبس ثب والع ‪ٞ‬بی ‪Thread‬ث‪ٝ‬‬
‫والع ‪٘ Thread‬یبص داسْ ثبیذ ث‪ ٝ‬ك‪ٛ‬سر صیش فشاخ‪ٛ‬ا٘یؾ و‪:ٓٙ‬‬

‫>‪#include <QThread‬‬
‫‪ ٚ‬ثؼذ والػٓ س‪ ٚ‬ث‪ ٝ‬ع‪ٛ‬س وّی ‪ ٚ‬ػٕ‪ٔٛ‬ی اص ٘‪ٛ‬ع یه والع ‪ٔ Thread‬ـخق و‪ ٓٙ‬ث‪ ٝ‬ك‪ٛ‬سر صیش والػٓ س‪ٚ‬‬
‫سغییش ٔیذْ‪:‬‬

‫‪class MyThread : public QThread‬‬


‫{‬
‫‪public:‬‬
‫;)(‪MyThread‬‬

‫‪//Function run‬‬
‫;)(‪void Run‬‬

‫;}‬
‫‪ٛ٘ ٓٞ‬ع والع س‪ ٚ‬اص ٘‪ٛ‬ع ‪ٔ Thread‬ـخق وشدْ ‪ٕٞ ٚ‬ی‪ٙ‬غ‪ٛ‬س یه سبثغ ثشای اػشای ‪ٛ٘ Thread‬ؿشٓ‪.‬‬

‫‪ ٕٝٞ‬ایٗ وبس‪ٞ‬ب دس فبیُ ‪ .h‬یؼ‪ٙ‬ی ‪ٞ‬یذس والع ‪ MyThread‬ث‪ٛ‬د‪ .‬كبال ٔٗ ثذ٘‪ ٝ‬سبثغ خ‪ٛ‬دْ س‪ ٚ‬دس فبیُ ‪.cpp‬‬
‫ٔیؼبصْ ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫)(‪void MyThread::Run‬‬
‫{‬
‫;"! ‪qDebug() << "My Thread is running‬‬
‫}‬
‫كذا صدٖ سبثغ ثشٌشفش‪ ٝ‬ؿذ‪ ٜ‬اص والع ‪ ٚ MyThread‬ایؼبد ثذ٘‪ ٝ‬سبثغ ثب ٔلش‪ٛ‬یبر ؿبح ایٗ ثش٘بٔ‪ ٝ‬دس كبَ‬
‫اػشا ٔی ثبؿذ!‬

‫اِجش‪ ٝ‬اٌ‪ ٝ‬اص ‪ qDebug‬اػشفبد‪ٔ ٜ‬یى‪ٙ‬یذ ث‪ٟ‬شش‪ ٜ‬والع ‪ qDebug‬س‪ ٓٞ ٚ‬فشاخ‪ٛ‬ا٘ی و‪ٙ‬یذ‪.‬یب ای‪ٙ‬ى‪ ٝ‬ثب‬
‫‪ٔ ٓٞstd::cout‬یش‪٘ٛ‬یذ ایٗ وبس س‪ ٚ‬ا٘ؼبْ ثذیٗ‪.‬‬

‫كبال ثشای ای‪ٙ‬ى‪ ٝ‬ثجی‪ٙ‬یٓ ایٗ سبثغ ػبد‪ ٜ‬و‪ ٝ‬وبسؽ ػُٕ ؿبح یه ٔشٗ ػبد‪ٞ ٜ‬ؼز س‪ٛ‬ػظ والع ‪ٞ‬بی ‪Thread‬‬
‫وبس ٔیى‪ ٝٙ‬یب ٘‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش دس فبیُ ‪ main‬اثشذا فبیُ ‪mythread.h‬س‪ ٚ‬فشاخ‪ٛ‬ا٘ی و‪ٙ‬یذ‪:‬‬

‫"‪#include "mythread.h‬‬
‫س‪ ٚ‬كذا ٔیض٘ٓ‪.‬‬ ‫كبال اصؽ یه وذی ٔیٍیشْ ‪ ٚ‬سبثغ ‪Run‬‬

‫;‪MyThread iThread‬‬
‫;)(‪iThread.start‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 100

: ‫وذ وّی ایٗ ثخؾ‬

#include <QCoreApplication>
#include "mythread.h"

int main(int argc, char *argv[])


{
QCoreApplication a(argc, argv);

MyThread iThread;
iThread.start();

return a.exec();
}
:‫سر صیش‬ٛ‫ ك‬ٝ‫ ث‬ٝ‫ػی ٔیـ‬ٚ‫خش‬

‫سی‬ٛ‫ ؿغ‬ٝ‫ اسػبَ ثـ‬CPU ٝ‫ ث‬Thread ‫ػظ‬ٛ‫ س‬ٝ‫ٓ و‬ٙ‫ ایؼبد و‬ٝ‫ػ‬ٚ‫ذ سب دش‬ٙ‫اْ ؿ‬ٛ‫ اص وبس ٔیخ‬ّٝ‫خت دس ایٗ ٔشك‬
...ٛ‫ ٔیذْ ٔغّج‬ٝٔ‫سر صیش ادا‬ٛ‫ ك‬ٝ‫؟ ث‬
:‫سر صیش‬ٛ‫ ك‬ٝ‫ٓ ث‬ٙ‫سؼشیف ٔیى‬ QString ‫ع‬ٛ٘ ‫ یه ٔشغیش اص‬mythread.h ُ‫ثشای والػٓ دس فبی‬

QString Value;
:ْ‫ سغییش ٔیذ‬.ٚ‫سر صیش دیجبي س‬ٛ‫ ك‬ٝ‫ ث‬.cpp ُ‫دس لؼٕز ثؼذی فبی‬

cout << this->Value.toStdString() << "Thread is running !" << endl;


.ْ‫ ا٘ؼبْ ٔیذ‬ٚ‫ ایٗ وبس س‬Thread ‫ وٕه‬ٝ‫ِی ث‬ٚ ٓ٘‫ كذا ٔیض‬ٚ‫ذ ثبس سبثغ س‬ٙ‫سر صیش ؿ‬ٛ‫ ك‬ٝ‫ دس فبیُ اكّی ث‬ٚ
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 101‬‬

‫;‪MyThread iTH1‬‬
‫;‪MyThread iTH2‬‬
‫;‪MyThread iTH3‬‬

‫;"‪iTH1.Value = "T1‬‬
‫;"‪iTH2.Value = "T2‬‬
‫;"‪iTH3.Value = "T3‬‬

‫;)(‪iTH1.start‬‬
‫;)(‪iTH2.start‬‬
‫;)(‪iTH3.start‬‬
‫خت ٘شیؼ‪ٔ ٝ‬یـ‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫خت سمشیجب ٔف‪ٞ Thread ْٟٛ‬ب ٔـخق ؿذ كبال ٔٗ ٔیخ‪ٛ‬اْ یه سبثغ س‪ٚ ٚ‬اسد ‪ Thread‬و‪ ٓٙ‬ی‪ ٝ‬ؿیض خبف‬
‫‪ ٚ‬ػ‪ٍٙ‬ی‪ٙ‬ی ث‪ ٝ‬ر‪ٕ٘ ٓٙٞ‬یشػ‪ ٝ‬و‪ ًٙٞ ٝ‬و‪ِٚ ٝٙ‬ی فشم و‪ٙ‬یذ اٌش ٔٗ سبثغ سبیٕش س‪ ٚ‬س‪ٛ‬ػظ ‪ Thread‬فشاخ‪ٛ‬ا٘ی و‪ٓٙ‬‬
‫‪ ٚ‬اصؽ اػشفبد‪ ٜ‬و‪ ٓٙ‬ؿی ٔیـ‪ ٝ‬؟ فشم و‪ٙ‬یذ ‪ٞ‬ش سبثغ دیٍشی و‪ٛ٘ ٝ‬ؿشیٗ ‪ ٚ‬وبس ا‪ ٖٚ‬سبثغ ثبسٌضاسی یب ٔظال ‪ٚ‬كُ‬
‫ؿذٖ ث‪ ٝ‬ی‪ ٝ‬ػش‪ٚ‬س ‪ ٚ‬آدّ‪ٛ‬د وشدٖ ی‪ ٝ‬ؿیضی ‪ٞ‬ؼشؾ ا‪ٛ٘ٚ‬لز ‪ "100‬ثذ‪ ٖٚ‬ؿ‪ ٛ٘ٛ‬ؿشا ثش٘بٔش‪ٍٙٞ ٖٛ‬بْ اػشای ‪ٖٕٛٞ‬‬
‫سبثغ ‪ٔ ًٙٞ‬یى‪ ٝٙ‬ثشای ای‪ٙ‬ى‪ ٝ‬اص ٔـىُ ‪ ًٙٞ‬وشدٖ خالف ثـیٓ ثبص‪ ٓٞ‬ؿبس‪ ٜ‬وبس اػشفبد‪ ٜ‬اص ‪ٞ Thread‬ؼز ٔب‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 102‬‬

‫ثب اػشفبد‪ ٜ‬اص ایٗ والع سبثؼی و‪ ٝ‬الصٔ‪ ٝ‬اػشا ثـ‪ ٝ‬س‪ ٚ‬ث‪ ٝ‬داخُ ‪ Thread‬اسػبَ ٔیى‪ ٓٙ‬سب كیٗ اػشا س‪ٛ‬ػظ‬
‫‪Thread‬ث‪CPU ٝ‬ثشای دشداصؽ اسػبَ ؿ‪ٛ‬د‪.‬‬

‫ث‪ ٝ‬ك‪ٛ‬سر صیش ٔٗ س‪ٚ‬ی ‪ ٖٕٛٞ‬دش‪ٚ‬ط‪ Timer ٜ‬وبس ٔیى‪ِٚ ٓٙ‬ی ای‪ٙ‬جبس كشوشؾ ٔیذْ داخُ یه‪Thread‬‬

‫ا‪ َٚ‬اص ‪ ٕٝٞ‬والع ‪ Thread‬س‪ ٚ‬داخُ ‪ ٖٕٛٞ‬فبیُ ‪ MainWindow.cpp‬فشاخ‪ٛ‬ا٘ی ٔیى‪:ٓٙ‬‬

‫"‪#include "QThread‬‬
‫وذ صیش دس داخُ فشْ ِ‪ٛ‬د دس ‪ ٖٕٛٞ‬دش‪ٚ‬ط‪ Timer ٜ‬ثب سغییشار صیش‪:‬‬

‫‪//Start to get System time.‬‬


‫;)‪QTimer *timer = new QTimer(this‬‬
‫;)‪timer->setInterval(1000‬‬
‫;‪QThread * iTH = new QThread‬‬
‫;)‪timer->moveToThread(iTH‬‬
‫;)(‪timer->start‬‬
‫;)))(‪connect(timer, SIGNAL(timeout()), SLOT(updateClock‬‬
‫;)(‪iTH->start‬‬
‫دس خظ ؿ‪ٟ‬بسْ یه ٕ٘‪ ٝ٘ٛ‬اص ‪ Thread‬دسػز وشدْ‪:‬‬

‫;‪QThread * iTH = new QThread‬‬


‫دس خظ ثؼذی س‪ٛ‬ػظ وذ صیش ‪ Timer‬س‪ ٚ‬اسػبَ وشدْ داخُ‪Thread‬‬

‫;)‪timer->moveToThread(iTH‬‬
‫س‪ ٚ‬اػشا وشدْ ثب دػش‪ٛ‬س صیش‪:‬‬ ‫‪ ٚ‬دس خظ آخش ‪Thread‬‬

‫;)(‪iTH->start‬‬

‫كبال ایٗ ثش٘بٔ‪ٍٙٞ ٝ‬بْ اػشا ‪ٚ‬اسد ‪ٔThread‬یـ‪ٔ ٚ ٝ‬ـىُ ‪ ًٙٞ‬وشدٖ دیؾ ٘خ‪ٛ‬ا‪ٞ‬ذ آٔذ‪.‬‬

‫ث‪ٕٞ ٝ‬یٗ ػبدٌی ! دس كبِی و‪ ٝ‬دس دار ٘ز ‪ٞ‬ضاس‪ ٚ‬یه سب وبس خ‪ٛ‬د ٔٗ ا٘ؼبْ دادْ سب ‪ٕٞ‬یٗ سبیٕش ٔٗ ‪ٍٙٞ‬بٔی و‪ٝ‬‬
‫دی‪ٔ ًٙ‬یٍشفشٓ ث‪ ٝ‬دسػشی ثذ‪ ًٙٞ ٖٚ‬وشدٖ وبس و‪ِٚ ! ٝٙ‬ی ای‪ٙ‬ؼب ػٕؼب ‪ 3‬خظ وذ ثشای خ‪ٛ‬د ‪Thread‬‬
‫٘‪ٛٙ‬ؿشیٓ‪.‬‬

‫هرحلِ تیست ٍ ضطن‪ :‬هعرفی ٍ کار تا‪Qmap‬‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 103‬‬

‫‪ ٚ‬أب دس ساثغ‪ ٝ‬ثب ‪ QMap‬یه ٘‪ٛ‬ع لبِت ثب اٍِ‪ٛ‬ی خبكی ‪ٞ‬ؼشؾ و‪ ٝ‬لبثّیز سؼشیف ِیؼشی ٔشـىُ اص ؿ‪ٙ‬ذیٗ‬
‫سؿش‪ ٛ‬وّیذ ‪ٞ‬بی اخشلبكی سا داسد ثش فشم ٔظبَ ث‪ ٝ‬ك‪ٛ‬سر صیش اٌش ثبؿذ‪...‬‬

‫>‪QMap<Key, T‬‬
‫ثشای سؼشیف وشدٖ ایٗ اٍِ‪ٛ٘ ٛ‬ع والع ‪ ٚ QMap‬ثؼذ وّیذ ‪ ٚ‬ثؼذ سؿش‪ٛٔ ٝ‬سد ٘ظش ‪ ,‬دس وذ صیش ٔٗ ػ‪ٙ‬ب‪ٚ‬ی‪ٙ‬ی س‪ٚ‬‬
‫سؼشیف وشدْ و‪ٞ ٝ‬ش وذاْ ثشاثش اػز ثب وّیذ ‪ٞ‬بی اخشلبكی ‪:‬‬

‫ا‪ َٚ‬اص ‪ ٕٝٞ‬والع ‪ QMap‬س‪ ٚ‬فشاخ‪ٛ‬ا٘ی ٔیى‪: ٓٙ‬‬

‫>‪#include <QMap‬‬

‫;‪QMap<int, QString> Languages‬‬

‫;)" ‪Languages.insert(1, "C++‬‬


‫;)" ‪Languages.insert(2, "Java‬‬
‫;)" ‪Languages.insert(3, "PHP‬‬
‫;)" ‪Languages.insert(4, "C#‬‬
‫;)" ‪Languages.insert(5, "VB.NET‬‬

‫))(‪foreach(int i, Languages.keys‬‬

‫{‬
‫;]‪qDebug() << Languages[i‬‬
‫}‬
‫كبال دس خظ ا‪ َٚ‬والع ‪ QMap‬س‪ ٚ‬كذا ٔیض٘ٓ ‪ ٚ‬اصؽ یه وذی ٔیٍیشْ ثب ؿ‪ٙ‬بػ‪ ٝ‬اص ٘‪ٛ‬ع ‪ ٚint‬لبِت آٖ اص‬
‫٘‪ٛ‬ع سؿش‪ ٚ ٝ‬ثؼذ س‪ٛ‬ػظ سبثغ ‪ insert‬وّیذ ‪ ٚ‬سؿش‪ ٝ‬س‪ٚ ٚ‬اسد ٔیى‪ ٚ ٓٙ‬دس ٘‪ٟ‬بیز س‪ٛ‬ػظ ‪ foreach‬وّیذ ‪ٞ‬ب ‪ٚ‬‬
‫سؿش‪ٞ ٝ‬بس‪ ٚ‬ثب‪ ٓٞ‬ؿبح ٔیى‪٘ ٓٙ‬شیؼ‪ٔ ٝ‬یـ‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 104

:ٓ‫یؼی‬ٛٙ‫ ٔی‬ٚ‫سر صیش وذ س‬ٛ‫ ك‬ٝ‫ٖ ث‬ٛ‫دؿ‬ٛ‫بی خ‬ٞ ٝ‫ ثب سؿش‬ٜ‫ٕشا‬ٞ ‫ب‬ٞ ‫ا٘ی وّیذ‬ٛ‫خت كبال ٔیشیٓ ػشاؽ فشاخ‬

QMapIterator<int, QString> ILTH(Languages);


while (ILTH.hasNext())
{
ILTH.next();
qDebug() << ILTH.value() << " Key is = " << ILTH.key();
}
ٚ‫ٖ س‬ٚ‫بی ا‬ٞ ‫ وّیذ‬ٚ ‫ػظ ایٗ ٔمبدیش‬ٛ‫ س‬ٝ‫ داسْ و‬QMapIterator ‫ی‬ٙ‫ یؼ‬ٜ‫ذ‬ٙٙ‫ والع سىشاس و‬ٝ‫ؼب ٔٗ ٘یبص ث‬ٙ‫ای‬
....‫د‬ٛ‫ذ ث‬ٞ‫ا‬ٛ‫سر صیش خ‬ٛ‫ ك‬ٝ‫ ث‬ٝ‫ ٘شیؼ‬ٚ ٓٙ‫ ؿبح ٔیى‬ٚ ‫دسیبفز‬

: ‫بیی‬ٟ٘ ‫وذ‬

QMap<int, QString> Languages;

Languages.insert(1, "C++ ");


Languages.insert(2, "Java ");
Languages.insert(3, "PHP ");
Languages.insert(4, "C# ");
Languages.insert(5, "VB.NET ");

foreach(int i, Languages.keys())

{
qDebug() << Languages[i];
}

QMapIterator<int, QString> ILTH(Languages);


while (ILTH.hasNext())
{
ILTH.next();
qDebug() << ILTH.value() << " Key is = " << ILTH.key();
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 105‬‬

‫}‬

‫هرحلِ تیست ٍ ّفتن ‪ :‬هعرفی ٍ کار تا‪Qhash‬‬

‫سؼشیف ایٗ والع دلیمب ‪ٕٞ‬ب٘‪ٙ‬ذ والع ‪ٞ QMap‬ؼشؾ ثب سفب‪ٚ‬ر ‪ٞ‬بی صیش ٘ؼجز ث‪Qmapٝ‬‬

‫‪ ‬لبثّیز ػؼشؼ‪ ٚ ٛ‬دػششػی ثؼیبس ػشیؼشش سا ٘ؼجز ث‪ QMap ٝ‬داسد‪.‬‬


‫‪ ‬دس ك‪ٛ‬سسی و‪ِ ٝ‬یؼز سؼشیف ؿذ‪ ٜ‬كب‪ٚ‬ی اعالػبر ثؼیبس صیبدی ثبؿذ دس ‪ِ QMap‬یؼز ‪ٞ‬بی سؿش‪ ٝ‬ای‬
‫ثش اػبع وّیذ ‪ٞ‬بی سؼشیف ؿذ‪ٔ ٜ‬شست ٔی ؿ‪٘ٛ‬ذ ‪ِٚ‬ی دس ‪ QHash‬ث‪ ٝ‬ك‪ٛ‬سر خ‪ٛ‬دوبس سٕبٔی ِیؼز‬
‫‪ٞ‬ب ثذ‪ ٖٚ‬لبػذ‪ ٜ‬وّیذی ٔشست ٔی ٌشد٘ذ‪.‬‬
‫‪ ٚ ‬سفب‪ٚ‬ر ػضئی دس ٘‪ٛ‬ع وّیذ ‪ٞ‬بی ایٗ د‪ ٚ‬والع و‪ ٝ‬ثب ػٍّٕش ‪ٞ‬بی >‪ٔ == ٚ‬ـخق اػز‪.‬‬

‫ثشای اػشفبد‪ ٜ‬والع ‪ QHash‬س‪ٚ ٚ‬اسد ٔیى‪ٙ‬یٓ‪...‬‬

‫>‪#include <QHash‬‬
‫ثمی‪ٔ ٝ‬شاكُ ‪ٕٞ‬ب٘‪ٙ‬ذ‪QMap...‬‬

‫;‪QHash<int, QString> Languages‬‬

‫;)" ‪Languages.insert(1, "C++‬‬


‫;)" ‪Languages.insert(2, "Java‬‬
‫;)" ‪Languages.insert(3, "PHP‬‬
‫;)" ‪Languages.insert(4, "C#‬‬
‫;)" ‪Languages.insert(5, "VB.NET‬‬

‫))(‪foreach(int i, Languages.keys‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 106‬‬

‫{‬
‫;]‪qDebug() << Languages[i‬‬
‫}‬

‫;)‪QHashIterator<int, QString> ILTH(Languages‬‬


‫))(‪while (ILTH.hasNext‬‬
‫{‬
‫;)(‪ILTH.next‬‬
‫;)(‪qDebug() << ILTH.value() << " Key is = " << ILTH.key‬‬

‫}‬
‫هرحلِ تیست ٍ ّطتن ‪ :‬هعرفی ٍ کار تا‪QstringList‬‬

‫ایٗ والع اص سؿش‪ٞ ٝ‬ب أىبٖ ایؼبد ِیؼشی اص سؿش‪ٞ ٝ‬بس‪ ٚ‬دس اخشیبس ٔب ٔیٍزاسد ثشای ٔظبَ اٌش ثخ‪ٛ‬ا‪ٞ‬یٓ ٔشغیشی‬
‫سؼشیف و‪ٙ‬یٓ و‪ ٝ‬كش‪ٚ‬ف اِفجب س‪ ٚ‬ثشأ‪ ٖٛ‬ث‪ ٝ‬سشسیت ٘ـ‪ ٖٛ‬ثذ‪ ٜ‬اص ایٗ والع ٔیش‪٘ٛ‬یٓ وٕه ثٍیشیٓ‪.‬‬

‫ثشای فشاخ‪ٛ‬ا٘ی اص والع ِیؼز سؿش‪ ٝ‬ای ث‪ ٝ‬ك‪ٛ‬سر صیش ػُٕ ٔیى‪ٙ‬یٓ‪:‬‬

‫>‪#include <QStringList‬‬
‫دس وذ صیش اثشذا ٕ٘‪ ٝ٘ٛ‬ای اص ‪ٔ QStringList‬یؼبصْ ‪ ٚ‬یه ٔشغیش اص ٘‪ٛ‬ع سؿش‪ ٝ‬و‪ ٝ‬كب‪ٚ‬ی ثخـی اص كش‪ٚ‬ف اِفجب‬
‫‪ٞ‬ؼشؾ ٔـخق ٔیى‪.ٓٙ‬‬

‫;‪QStringList MyList‬‬
‫;"‪QString MyLine = "A,B,C,D,E,F,G‬‬
‫;)"‪MyList = MyLine.split(",‬‬
‫)‪foreach(QString Item, MyList‬‬
‫{‬
‫;‪qDebug() << Item‬‬
‫}‬
‫دس خظ ثؼذی ٔشغیشی و‪ ٝ‬اص ٘‪ٛ‬ع ‪ٔ QStringList‬ـخق وشدْ س‪ٔ ٚ‬مذاسد‪ٞ‬ی ٔیى‪ ٚ ٓٙ‬دس كیٗ ٔمذاس د‪ٞ‬ی‬
‫س‪ٛ‬ػظ ‪ٔ split‬لش‪ٛ‬یبر سؿش‪ ٝ‬س‪ ٚ‬ػذا ٌب٘‪ ٝ‬دس داخُ ‪ MyList‬لشاس ٔیذْ ‪ ٚ‬ثؼذ س‪ٛ‬ػظ دػش‪ٛ‬س ‪foreach‬‬
‫ٔشغیشی س‪ ٚ‬ث‪ ٝ‬ػ‪ٛٙ‬اٖ آیشٓ اص ٘‪ٛ‬ع سؿش‪ ٝ‬دس ٘ظش ٌشفش‪ ٚ ٝ‬ؿبح ٔیى‪٘ ٚ ٓٙ‬شیؼ‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د‪...‬‬

‫"‪"A‬‬
‫"‪"B‬‬
‫"‪"C‬‬
‫"‪"D‬‬
‫"‪"E‬‬
‫"‪"F‬‬
‫"‪"G‬‬
‫یب ٔظال ٔٗ ٔیخ‪ٛ‬اْ ٔمذاس كشف ‪ C‬س‪ ٚ‬ثشاثش ثب ‪ C++‬سغییشؽ ثذْ یؼ‪ٙ‬ی كشف ‪ C‬س‪ ٚ‬ثب ‪ C++‬ػبیٍضیٗ و‪ٓٙ‬‬
‫ث‪ ٝ‬ساكشی س‪ٛ‬ػظ دػش‪ٛ‬س صیش‪:‬‬

‫;)"‪MyList.replaceInStrings("C", "C++‬‬

‫وذ وّی ‪:‬‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 107‬‬

‫;‪QStringList MyList‬‬
‫;"‪QString MyLine = "A,B,C,D,E,F,G‬‬
‫;)"‪MyList = MyLine.split(",‬‬

‫;)"‪MyList.replaceInStrings("C", "C++‬‬

‫)‪foreach(QString Item, MyList‬‬


‫{‬

‫;‪qDebug() << Item‬‬


‫}‬
‫٘شیؼ‪: ٝ‬‬

‫"‪"A‬‬
‫"‪"B‬‬
‫"‪"C++‬‬
‫"‪"D‬‬
‫"‪"E‬‬
‫"‪"F‬‬
‫"‪"G‬‬
‫هرحلِ تیست ٍ ًْن‪ :‬هعرفی ٍ کار تا الگَریتن ّای هرتة سازی‬

‫‪ٕ٘ٛٞ‬غ‪ٛ‬س و‪ٔ ٝ‬یذ‪٘ٚ‬یذ دس ‪ C++‬اٍِ‪ٛ‬سیشٓ ‪ٞ‬بی ٔشست ػبصی ٔشفب‪ٚ‬سی ‪ٚ‬ػ‪ٛ‬د داس‪ ٜ‬و‪ ٝ‬دس ایٗ ٔیبٖ ‪ Qt‬دس والع‬
‫‪ٞ‬بی خ‪ٛ‬دؽ اٍِ‪ٛ‬سیشٓ ‪ٞ‬بی ٔشست ػبصی خ‪ٛ‬دؽ س‪ ٚ‬اسائ‪ ٝ‬داد‪ ...ٜ‬و‪ ٝ‬یىی اص ػبد‪ ٜ‬سشیٗ ای‪ٟٙ‬ب‬
‫سبثغ ‪ٞ qSort‬ؼشؾ‪.‬‬

‫ثشای ٔظبَ ٔٗ اػذاد صیش س‪ ٚ‬و‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش ا‪ٔٚ‬ذ‪ٔ ٜ‬یخ‪ٛ‬اْ ٔشست و‪:ٓٙ‬‬

‫‪4‬‬
‫‪8‬‬
‫‪2‬‬
‫‪1‬‬
‫‪6‬‬
‫‪3‬‬
‫خت وذ س‪ ٚ‬ث‪ ٝ‬ك‪ٛ‬سر صیش ٔی‪ٛٙ‬یؼیٓ‪...‬‬

‫;‪QList<int> MyList‬‬

‫;‪MyList << 4 << 8 << 2 << 1 << 6 << 3‬‬


‫;)‪qSort(MyList‬‬

‫{ )‪foreach(int i, MyList‬‬

‫;‪qDebug() << i‬‬


‫}‬
‫دس خظ ا‪ٔ َٚ‬شغیش س‪ ٚ‬اص ٘‪ٛ‬ع ِیؼز دس ٘ظش ٌشفشٓ ‪ ٚ‬دس خظ ثؼذی ا‪ٔ ٖٚ‬مبدیشْ س‪ٚ ٚ‬اسد ِیؼشٓ وشدْ ‪ ٚ‬دس خظ‬
‫ثؼذی ا‪ ٖٚ‬س‪ٛ‬ػظ سبثغ ‪ٔ qSort‬مبدیش س‪ٔ ٚ‬شست ٔیى‪ ٚ ٓٙ‬ثؼذ س‪ٛ‬ػظ ‪ qDebug ٚ foreach‬ؿبدؾ ٔیى‪.ٓٙ‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 108‬‬

‫٘شیؼ‪ ٝ‬ؿذ ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪6‬‬
‫‪8‬‬
‫هرحلِ سی ام ‪ :‬هعرفی ٍ کار تا الگَریتن ّای جستجَ کٌٌذُ‬

‫یىی اص ٔ‪ٛ‬اسدی و‪ ٝ‬ث‪ ٝ‬دسد ٔیخ‪ٛ‬س‪ ٜ‬اٍِ‪ٛ‬سیشٓ ػؼشؼ‪ٞ ٛ‬ؼز و‪ ٝ‬دس ای‪ٙ‬ؼب س‪ٛ‬ػظ سبثغ ‪ٔ qFind‬یش‪٘ٛ‬یٓ ث‪ ٝ‬ساػشی‬
‫ٔمذاس ٔ‪ٛ‬سد ٘ظش س‪ ٚ‬دس ك‪ٛ‬سر ‪ٚ‬ػ‪ٛ‬د دس ِیؼز داد‪ٞ ٜ‬ب دیذا و‪ٙ‬یٓ‪.‬‬

‫ث‪ ٝ‬ك‪ٛ‬سر صیش وذ س‪ٔ ٚ‬ی‪ٛٙ‬یؼیٓ‪:‬‬

‫;‪QList<int> MyList‬‬
‫;‪MyList << 12 << 0 << 133 << 64 << 512 << 128‬‬
‫‪QList<int>::const_iterator MyIterator = qFind(MyList.begin(), MyList.end(),‬‬
‫;)‪64‬‬

‫))(‪if (MyIterator != MyList.end‬‬


‫{‬
‫;‪qDebug() << "Found = " << *MyIterator‬‬
‫}‬

‫‪else‬‬

‫{‬
‫;"!‪qDebug() << "Not found‬‬

‫}‬
‫اثشذا ٔشغیشْ س‪ ٚ‬اص ٘‪ٛ‬ع یه ٘‪ٛ‬ع ِیؼز ػذدی دس ٘ظش ٔیٍیشْ ‪ ٚ‬دس خظ ثؼذ ٔمبدیش ٔ‪ٛ‬سد ٘ظشْ س‪ٚ ٚ‬اسد ِیؼز‬
‫ٔیى‪.ٓٙ‬‬
‫كبال دس خظ ثؼذی ػُٕ ػؼشؼ‪ ٛ‬یؼ‪ٙ‬ی س‪ٛ‬ػظ یه ِیؼز ػذیذی اص اػذاد ایؼبد وشد‪ ٚ ٜ‬س‪ٛ‬ػظ‬
‫سبثغ ‪ٔ qFind‬مذاس ‪ 64‬س‪ ٚ‬اص ٘مغ‪ ٝ‬آغبص ٔمبدیش ٔ‪ٛ‬ػ‪ٛ‬د دس ِیؼز سب ا٘ش‪ٟ‬بی ا‪ ٖٚ‬س‪ ٚ‬ثشسػی ٔیى‪.ٓٙ‬‬

‫دس خظ ثؼذی یه دػش‪ٛ‬س ؿشعی ثشػىغ آ‪ٚ‬سدْ و‪ ٝ‬دس ای‪ٙ‬ؼب ٔـخق وشدْ اٌش ٔمذاس ٔ‪ٛ‬سد ٘ظش ٔٗ دس ِیؼز‬
‫ٔ‪ٛ‬ػ‪ٛ‬د ث‪ٛ‬د دیغبْ ‪ Found‬س‪ٕٞ ٚ‬شا‪ ٜ‬ثب ٔمذاس یبفز ؿذ‪ ٜ‬ؿبح وٗ دس غیش ای‪ٙ‬ل‪ٛ‬سر دیغبْ ‪ Not found‬س‪ٚ‬‬
‫ؿبح خ‪ٛ‬ا‪ٞ‬ذ وشد ‪ ٚ‬دس ٘‪ٟ‬بیز ٘شیؼ‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د‪...‬‬

‫‪Found = 64‬‬
‫هرحلِ سی یکن ‪ :‬هعرفی ٍ کار‪ToolTip‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 109‬‬

‫‪ٞToolTip‬ب ؿی ‪ٞ‬ؼشٗ ‪ ٚ‬ث‪ ٝ‬ؿ‪ ٝ‬دسدی ٔیخ‪ٛ‬سٖ ؟ دس وُ ثیـششیٗ وبسثشد ایٗ ٔ‪ٛ‬سد دس ‪ٍٙٞ‬بْ ‪Mouse‬‬
‫‪ Hover‬ثش س‪ٚ‬ی اؿیبء ٔ‪ٛ‬ػ‪ٛ‬د س‪ٚ‬ی ساثظ وبسثشی ‪ ٚ‬فشْ ‪ٞ‬بی ؿٕبػز و‪ ٝ‬ثشای اػشفبد‪ ٜ‬اص ایٗ أىب٘بر ث‪ ٝ‬س‪ٚ‬ؽ‬
‫‪ٞ‬بی صیش ػُٕ خ‪ٛ‬ا‪ٞ‬یٓ وشد‪...‬‬

‫دس ایٗ ثخؾ ٔٗ ٔیخ‪ٛ‬اْ یه اػشبیُ صیجب ‪ٕٞ‬شا‪ ٜ‬ثب ٔشٗ ٔ‪ٛ‬سد ٘ظش ثشای ‪ ToolTip‬و‪ٙ‬ششِٓ س‪ٚ‬ی فشْ اخشلبف‬
‫ثذْ س‪ٛ‬ػظ دػش‪ٛ‬س ‪ٔ setStyleSheet‬یش‪ ٓٙ٘ٛ‬اػشبِٓ س‪ ٚ‬ثش اػبع وذ ‪ٞ‬بی ‪ CSS‬ث‪ ٝ‬ؿیئ ٔ‪ٛ‬سد ٘ظشْ اخشلبف‬
‫ثذْ‪.‬‬

‫‪ ٚ‬س‪ٛ‬ػظ دشادشسی ‪ٔ setToolTip‬یش‪ٔ ٓ٘ٛ‬لش‪ٛ‬یبٖ ‪ ToolTip‬س‪ ٚ‬ث‪ ٝ‬و‪ٙ‬ششِٓ اخشلبف ثذْ ث‪ ٝ‬ك‪ٛ‬سر صیش‪...‬‬

‫داخُ فشْ ِ‪ٛ‬د وذ صیش س‪ٔ ٚ‬ی‪ٛٙ‬یؼٓ اِجش‪ ٝ‬اػٓ و‪ٙ‬ششِٓ س‪ٔ ٚ‬یضاسْ‪MyButton.‬‬

‫‪ui->MyButton->setStyleSheet(" QToolTip{text-align:left;color:‬‬
‫‪#ffffff;background-color: #006700;font-family: Tahoma ,'PT Sans',‬‬
‫‪'Helvetica', arial, serif; border: 2px solid #d5def2;padding: 2px;opacity:‬‬
‫;)"};‪200‬‬
‫‪ui->MyButton->setToolTip("<br><font‬‬
‫;)"!‪color='#C90'><b>C++</b></font><br>Welcome to C++ Qt Tutorial‬‬

‫٘شیؼؾ ‪ٚ‬لشی ٔب‪ٚ‬ع س‪ ٚ‬س‪ٚ‬ی و‪ٙ‬ششَ ٔیجشیٓ ٔیـ‪ ٝ‬عشف صیش‪:‬‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 110‬‬

‫اكال ٕ٘یخ‪ٛ‬اْ آٔ‪ٛ‬صؽ ‪ CSS‬ثذْ ؿ‪ٚ ٖٛ‬الؼب كبِـ‪٘ ٛ‬ذاسْ ‪ِٚ‬ی ثبیذ ث‪ ٝ‬ی‪٘ ٝ‬ىش‪ٕٟٔ ٝ‬ی اؿبس‪ ٜ‬و‪ ٓٙ‬و‪ٚ ٝ‬لشی اػشبیّی‬
‫س‪ ٚ‬س‪ٚ‬ی و‪ٙ‬ششَ یب فشٔش‪ ٖٛ‬ػز ٔیى‪ٙ‬یذ كشٕب سخلیلؾ ثذیٗ ث‪ٞ ٝ‬ذفی و‪ ٝ‬داسیذ ! ٔظال ٔٗ دس اػشبیُ ایٗ ثخؾ‬
‫ٌفشٓ }{‪ٞ ٚ QToolTip‬ش وذی و‪ ٝ‬داخّؾ ث‪ٛٙ‬یؼٓ ٔخشق ‪ ToolTip‬خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د دس غیش ای‪ٙ‬ل‪ٛ‬سر اٌش‬
‫ثذ‪ٔ ٖٚ‬ـخق وشدٖ آثؼىز ‪ٞ‬بی ٔ‪ٛ‬سد ٘ظشس‪ ٖٛ‬اػشبیّی س‪ ٚ‬اخشلبف ثذیٗ دس آٖ ك‪ٛ‬سر ‪ ٕٝٞ‬لؼٕز ‪ٞ‬بی‬
‫و‪ٙ‬ششَ اص اػشبیُ ؿٕب اسص خ‪ٛ‬ا‪ٙٞ‬ذ ثشد‪.‬‬

‫ی‪ ٝ‬س‪ٛ‬ضیلی ثذْ دس ساثغ‪ ٝ‬ثب عشف ‪ ٚ‬اػشبیُ ایٗ ٔ‪ٛ‬سد و‪ ٝ‬سٕبٔی ای‪ٟٙ‬ب ٔشث‪ٛ‬ع‪ ٝ‬ث‪ ٝ‬وذ‪ٞ‬بی ‪ CSS‬اٌ‪ ٝ‬اؿخبكی و‪ٝ‬‬
‫دس عشاكی ‪ٚ‬ة ‪ ٚ‬وبس ثب ‪ٟٔ CSS‬بسر ‪ ٚ‬سؼشث‪ ٝ‬وبفی داسٖ ٔیذ‪ ٗ٘ٚ‬و‪ ٝ‬ؿ‪ ٝ‬وبس‪ٞ‬بیی ٔیـ‪ ٝ‬وشد ثب ایٗ!!! ‪CSS‬‬

‫هرحلِ سی دٍم ‪ :‬هعرفی ٍ کار تا ضثکِ ‪ /‬استفادُ از پرٍتکل ّای ‪FTPٍ HTTP‬‬

‫دس ای‪ٙ‬شش٘ز ‪ٕٞ‬ب٘‪ٙ‬ذ ػبیش ؿجى‪ٞ ٝ‬بی وبٔذی‪ٛ‬سشی اص دش‪ٚ‬سىُ ‪ٞ‬بی ٔشؼذد ‪ ٚ‬ثب ا‪ٞ‬ذاف ٔخشّف اػشفبد‪ٔ ٜ‬ی ٌشدد‪ٞ .‬ش‬
‫دش‪ٚ‬سىُ اص یه ػبخشبس خبف ثشای اسػبَ ‪ ٚ‬دسیبفز اعالػبر ‪$‬ثؼش‪ٞ ٝ‬بی اعالػبسی ‪ #‬اػشفبد‪ٕٛ٘ ٜ‬د‪ ٚ ٜ‬سشافیه‬
‫ٔخشق ث‪ ٝ‬خ‪ٛ‬د سا دس ؿجى‪ ٝ‬ایؼبد ٔی ٕ٘بیذ ( ‪ . HTTP‬ثشٌشفش‪ ٝ‬اص ‪Hyper Text Transfer‬‬
‫) ‪ ،Protocol‬یىی اص ٔشذا‪ِٚ‬ششیٗ دش‪ٚ‬سىُ ‪ٞ‬بی الی‪ application ٝ‬اػز و‪ٔ ٝ‬ؼئ‪ِٛ‬یز اسسجبط ثیٗ‬
‫ػش‪ٚ‬یغ ٌیش٘ذٌبٖ ‪ ٚ‬ػش‪ٚ‬یغ د‪ٙٞ‬ذٌبٖ ‪ٚ‬ة سا ثشػ‪ٟ‬ذ‪ ٜ‬داسد‪.‬‬

‫ث‪ ٝ‬ع‪ٛ‬س وّی دس ایٗ لؼٕز ٔیشػیٓ ث‪ٛٔ ٝ‬اسد ؿجى‪ ٚ ٝ‬وبس ثب دش‪ٚ‬سىُ ‪ٞ‬ب ‪...ٚ‬‬

‫دس ‪ C++‬وشبثخب٘‪ٞ ٝ‬بی ‪ Qt‬والع ‪ٞ‬بیی س‪ ٚ‬ثشای ؿجى‪ ٝ‬داس٘ذ و‪ ٝ‬ثشای فشاخ‪ٛ‬ا٘ی والع ‪ٞ‬ب ث‪ ٝ‬ثش٘بٔ‪ ٝ‬اثشذا‬
‫الصٔ‪ ٝ‬دس فبیُ ‪ٛٔ .pro‬ػ‪ٛ‬د دس دش‪ٚ‬ط‪ ٜ‬وذ صیش س‪ ٚ‬اضبف‪ ٝ‬و‪ٙ‬یٓ‪:‬‬

‫‪QT += network‬‬
‫اِجش‪ٔ ٝ‬یش‪٘ٛ‬یذ دس ادأ‪ٛٔ QT += ٖٕٛٞ ٝ‬ػ‪ٛ‬د ث‪ ٝ‬ایٗ ك‪ٛ‬سر ػُٕ و‪ٙ‬یذ‪:‬‬

‫‪QT += core network‬‬


‫اِجش‪ ٝ‬دلز و‪ٙ‬یذ ثبیذ فبكّ‪ ٝ‬ثیٗ سفش٘غ ‪ٞ‬ب ‪ٚ‬ػ‪ٛ‬د داؿش‪ ٝ‬ثبؿذ‪.‬‬

‫یه س‪ٛ‬ضیلی ثذْ و‪ ٝ‬ؿشا اص ٕ٘بد ‪ٞ‬بی =‪ +‬اػشفبد‪ٔ ٜ‬یى‪ٙ‬یٓ دِیّؾ ای‪ٔ ٚ ٝٙ‬ـخل‪ ٝ‬و‪ ٝ‬دػش‪ٛ‬س افض‪ٚ‬دٖ س‪ ٚ‬دادیٓ‬
‫ث‪ QT ٝ‬سب سفش٘غ ٔ‪ٛ‬سد ٘ظش س‪ٚ ٚ‬اسد دش‪ٚ‬ط‪ٔ ٜ‬یى‪ٙ‬ذ ‪ِٚ‬ی اٌ‪ ٝ‬ثخ‪ٛ‬اْ سفش٘غ ٔ‪ٛ‬سد ٘ظش س‪ ٚ‬كزف یب اص دش‪ٚ‬ط‪ ٜ‬ثیش‪ٖٚ‬‬
‫و‪ ٓٙ‬ؿغ‪ٛ‬س ؟ ایٗ ٔ‪ٛ‬لز ثبیذ ثٍٓ =‪ -‬ث‪ٔ ٝ‬ظبَ صیش س‪ٛ‬ػ‪ ٝ‬و‪ٙ‬یذ‪:‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 111

QT += core network
QT -= gui
ٝ‫ش ساثظ وبسثشی ث‬ٞ ‫ یب‬ٚ ‫ب‬ٞ widget ُٔ‫ ؿب‬ٝ‫ و‬gui ٝ‫ط ث‬ٛ‫بی ٔشث‬ٞ ‫ سفش٘غ‬ٝ‫ْ ٔـخق وشدْ و‬ٚ‫دس خظ د‬
.ٓ‫ ٘ذاسی‬gui ‫ سفش٘غ‬ٝ‫ی ٘یبصی ث‬ٙ‫ كزف وٗ یؼ‬ٜ‫ط‬ٚ‫ اص دش‬ٚ‫ؼشؾ س‬ٞ Console ‫ػض‬

.ٓٙ‫ ٔیى‬ٝ‫طْ اضبف‬ٚ‫ دش‬ٝ‫ ث‬ٚ‫ س‬network ‫ضیلبر دس دؼز لجّی سفش٘غ‬ٛ‫ سلز س‬ٚ ٓٙ‫ ایؼبد ٔیى‬ٚ‫طْ س‬ٚ‫خت دش‬
C++ ٝٙ‫ ٌضی‬File and Classes ‫ لؼٕز‬ٚ Add New ٚ ٓٙ‫طْ ساػز وّیه ٔیى‬ٚ‫ی دش‬ٚ‫كبال س‬
.ٓٙ‫سر صیش ٔـخق ٔیى‬ٛ‫ ك‬ٝ‫ ث‬ٚ‫ اعالػبسؾ س‬ٚ ٓٙ‫ ا٘شخبة ٔیى‬ٚ‫س‬Class

ٚ ‫یذس‬ٞ ُ‫ فبی‬ٚ ٓٙ‫سر صیش ایؼبد ٔیى‬ٛ‫ ك‬ٝ‫ٓ ث‬ٙ‫ ایؼبد و‬HTTP ُ‫سى‬ٚ‫اثشذا ٔٗ ٘یبص داسْ یه والع ثشای دش‬
.ٓٙ‫ ٔیى‬ٜ‫ آٔبد‬ٚ‫اكّی س‬

#ifndef MYHTTP_H
#define MYHTTP_H

#include <QObject>

#include <QtGlobal>
#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QFile>
#include <QTimer>

class MyHttp : public QObject


{
Q_OBJECT

public:
explicit MyHttp(QObject *parent = 0);
virtual ~MyHttp();

signals:
void addLine(QString qsLine);
void downloadComplete();
void progress(int nPercentage);

public slots:
void download(QUrl url);
void pause();
void resume();
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 112

private slots:
void download();
void finishedHead();
void finished();
void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);
void error(QNetworkReply::NetworkError code);
void timeout();

private:
QUrl _URL;
QString _qsFileName;
QNetworkAccessManager* _pManager;
QNetworkRequest _CurrentRequest;
QNetworkReply* _pCurrentReply;
QFile* _pFile;
int _nDownloadTotal;
bool _bAcceptRanges;
int _nDownloadSize;
int _nDownloadSizeAtPause;
QTimer _Timer;
};

#endif // MYHTTP_H
‫بی‬ٞ ‫ سلز والع‬ٚ‫سد ٘یبص س‬ٛٔ ‫اثغ‬ٛ‫ س‬ٚ ‫ والع‬HTTP ‫خت دس ایٗ والع ٔٗ ثشای‬
.ْ‫ایؼبد وشد‬QNetworkAccessManager / QNetworkRequest / QNetworkReply
: ‫سر صیش اػز‬ٛ‫ ك‬ٝ‫شوذاْ ث‬ٞ ٝ‫ظیف‬ٚ ٝ‫و‬

َ‫ ثشای ٔب لبثّیز اسػب‬ٝ‫ؼشؾ و‬ٞ ٗ‫ ایٗ والع ای‬ٝ‫ظیف‬ٚ QNetworkAccessManager : ‫والع‬


ٝٙ‫ٓ ٔیى‬ٞ‫س فشا‬ٚ‫ اص ػش‬ٚ‫ دسیبفز اعالػبر س‬ٚ ‫اعالػبر‬
ٝ‫ؼشؾ و‬ٞ ‫ داسی اعالػبسی‬ٍٝ٘ ٚ ‫ دسیبفز‬ٝ‫ ایٗ والع و‬ٝ‫ظیف‬ٚ QNetworkRequest : ‫والع‬
.‫ذ داؿز‬ٞ‫ا‬ٛ‫ب ٘یبص خ‬ٟ٘‫ آ‬ٝ‫ ث‬QNetworkAccessManager ‫والع‬
ٝ‫ؼشؾ و‬ٞ ‫بیی‬ٞ ‫یذس‬ٞ ٚ ‫ب‬ٞ ٜ‫ داسی داد‬ٍٝ٘ ٓٞ ‫ ایٗ والع‬ٝ‫ظیف‬ٚ QNetworkReply : ‫والع‬
.ٜ‫اػز ؿذ‬ٛ‫دسخ‬

Qt ‫اثغ اػبػی‬ٛ‫ س‬ٚ ‫ب‬ٞ ‫یذس‬ٞ ‫یٓ صیشا‬ٙ‫ا٘ی و‬ٛ‫ فشاخ‬ٚ‫ ایٗ والع س‬ٝٔ‫ب الص‬ٟ‫لش‬ٚ ‫ ثؼضی‬QtGlobal : ‫والع‬
‫س وّی اص‬ٛ‫ ع‬ٝ‫ؼز سب ث‬ٞ ٓٞ ‫بی دیٍشی‬ٞ ‫ؽ‬ٚ‫ س‬ٝ‫ اِجش‬ٝ‫ؼشؾ و‬ٞ ‫بػبیی‬ٙ‫د وشدٖ ایٗ والع لبثُ ؿ‬ّٛ‫ى‬ٙ‫ػظ ای‬ٛ‫س‬
ٓ‫ی‬ٞ‫ا‬ٛ‫ضیلبسی خ‬ٛ‫ب س‬ٞ ‫ ثؼذ‬ٝ‫یٓ و‬ٙ‫ٌیشی و‬ّٛ‫ ػ‬ٜ‫ط‬ٚ‫بی ٔخشّف دش‬ٞ ‫اسد دس لؼٕز‬ٛٔ ٗ‫ی‬ٙ‫د وشدٖ ؿ‬ّٛ‫ى‬ٙ‫ش ثبس ای‬ٞ
.‫داد‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 113‬‬

‫والع ‪ٔ QObject :‬ـخل‪ ٝ‬و‪ ٝ‬ثشای ایؼبد ‪ ٚ‬ؿ‪ٙ‬بػبیی آثؼىز ‪ٞ‬ب اػشفبد‪ٔ ٜ‬یـ‪ٛ‬د‪.‬‬
‫والع ‪ QFile :‬ثشای وبس ثب فبیّ‪ٟ‬ب ٔ‪ٛ‬سد ٘یبص ‪ٞ‬ؼشؾ ث‪ ٝ‬ػ‪ٛٙ‬اٖ ٔظبَ اٌ‪ ٝ‬لشاس ‪ٞ‬ؼز فبیّی س‪ ٚ‬داّ٘‪ٛ‬د و‪ٙ‬یٓ ‪ٚ‬‬
‫ػُٕ ٔظال وذی س‪ ٚ‬س‪ٚ‬ی فبیُ داّ٘‪ٛ‬د ؿذ‪ ٜ‬ا٘ؼبْ د‪ٞ‬یٓ ث‪ ٝ‬ایٗ والع ٘یبص اػبػی خ‪ٛ‬ا‪ٞ‬یٓ داؿز‪.‬‬

‫والع ‪ QTimer :‬ثشا وبس ثب صٔبٖ ٔ‪ٛ‬سد اػشفبد‪ ٜ‬لشاس ٔیٍیش‪ ٜ‬و‪ ٝ‬دس ایٗ ٔظبَ اصؽ ثشای ٔـخق ػبصی صٔبٖ‬
‫دسیبفز ‪ ٚ‬اسػبَ اػشفبد‪ ٜ‬خ‪ٛ‬ا‪ٞ‬یٓ وشد‪.‬‬

‫خت اثشذا ٔٗ والػٓ س‪ ٚ‬اص ٘‪ٛ‬ع ػٕ‪ٔٛ‬ی ‪ ٚ‬آثؼىز ٔـخق وشدْ ث‪ ٝ‬ك‪ٛ‬سر صیش‪:‬‬

‫‪class MyHttp : public QObject‬‬


‫ثشای ای‪ٙ‬ى‪ ٝ‬سٕبٔی ‪ٞ‬یذس فبیُ ‪ٞ‬بی آثؼىز ٔب س‪ٛ‬ػظ صثبٖ ‪ C++‬لبثُ ؿ‪ٙ‬بػبیی ثبؿ‪ ٝ‬الصٔ‪ ٝ‬وبس ای‪ ٝٙ‬اص ٔبوش‪ٚ‬‬
‫ٔخل‪ٛ‬ف آثؼىز دس ‪ Qt‬اػشفبد‪ ٜ‬و‪ٙ‬یٓ و‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر صیش دس والع اصؽ اػشفبد‪ ٜ‬خ‪ٛ‬ا‪ٞ‬ذ ؿذ‪.‬‬

‫‪Q_OBJECT‬‬
‫دس خظ ثؼذی سؼشیف وّی والع ٔـخق ؿذ‪ ٚ ٜ‬ثؼذ ػیٍ‪ٙ‬بَ ‪ /‬اػالر ‪ٞ‬ب ‪ٔ ٚ‬شغیش ‪ٞ‬بی ٔ‪ٛ‬سد ٘یبص اػٕبَ ٌشدیذ‪ٜ‬‬
‫اػز‪.‬‬

‫سب ای‪ٙ‬ؼب وبس ٔب ثب فبیُ ‪ MyHttp.h‬سٕ‪ٔ ٝ٘ٛ‬یشیٓ دس دؼز ثؼذی وبس ثب فبیُ‪MyHttp.cpp‬‬

‫خت فبیُ ‪ٔ cpp‬ب كب‪ٚ‬ی وذ ‪ٞ‬بی صیش خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د و‪ ٝ‬دس ایٗ فبیُ ٔب ثذ٘‪ ٝ‬س‪ٛ‬اثغ خ‪ٛ‬دٔ‪ ٖٛ‬س‪ ٚ‬وبُٔ وشدیٓ ‪ٚ‬‬
‫ثشای داّ٘‪ٛ‬د فبیّٕ‪ٕٞ ٖٛ‬شا‪ ٜ‬ثب اعالػبر دلیك اسػبَ ‪ ٚ‬دسیبفز الصْ داسیٓ ! اؿبس‪ ٜ‬و‪ ٓٙ‬و‪ ٝ‬خیّی ػبد‪ ٜ‬سش اص ای‪ٟٙ‬ب‬
‫ٔیـ‪ ٝ‬وذ داّ٘‪ٛ‬د فبیُ س‪ ٚ‬س‪ٛ‬ػظ ‪ٛ٘ http‬ؿز ‪ِٚ‬ی ٘یبص د‪٘ٚ‬ؼشٓ وٕی دش‪ٚ‬ط‪ ٜ‬دیـیذ‪ ٜ‬سش س‪ ٚ‬ا٘شخبة و‪ ٓٙ‬سب ٘شیؼ‪ٝ‬‬
‫كبكُ اص فبیُ داّ٘‪ٛ‬د ؿذ‪ٕٞ ٜ‬شا‪ ٜ‬ثب دىیغ ‪ٞ‬بی اسػبِی ‪ ٚ‬دسیبفشی ‪ٕٞ‬ب٘‪ٙ‬ذ ػیؼشٓ اسػبَ ‪ ٚ‬دسیبفز و‪ٙٙ‬ذ‪ٜ‬‬
‫‪ٔTeamViewer‬ـخق ثـ‪ ٝ‬و‪ٕٔ ٝ‬ى‪ ٝٙ‬خیّی ‪ٞ‬ب ث‪ ٝ‬ایٗ ٘یبص داؿش‪ ٝ‬ثبؿ‪ٙ‬ذ‪.‬‬

‫‪#include‬‬ ‫"‪"myhttp.h‬‬
‫‪#include‬‬ ‫>‪<QFileInfo‬‬
‫‪#include‬‬ ‫>‪<QDateTime‬‬
‫‪#include‬‬ ‫>‪<QDebug‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 114

MyHttp::MyHttp(QObject *parent) :
QObject(parent)
, _pManager(NULL)
, _pCurrentReply(NULL)
, _pFile(NULL)
, _nDownloadTotal(0)
, _bAcceptRanges(false)
, _nDownloadSize(0)
, _nDownloadSizeAtPause(0)
{
}

MyHttp::~MyHttp()
{
if (_pCurrentReply != NULL)
{
pause();
}
}

void MyHttp::download(QUrl url)


{
qDebug() << "download: URL=" << url.toString();

_URL = url;
{
QFileInfo fileInfo(url.toString());
_qsFileName = fileInfo.fileName();
}
_nDownloadSize = 0;
_nDownloadSizeAtPause = 0;

_pManager = new QNetworkAccessManager(this);


_CurrentRequest = QNetworkRequest(url);

_pCurrentReply = _pManager->head(_CurrentRequest);

_Timer.setInterval(5000);
_Timer.setSingleShot(true);
connect(&_Timer, SIGNAL(timeout()), this, SLOT(timeout()));
_Timer.start();

connect(_pCurrentReply, SIGNAL(finished()), this, SLOT(finishedHead()));


connect(_pCurrentReply, SIGNAL(error(QNetworkReply::NetworkError)), this,
SLOT(error(QNetworkReply::NetworkError)));
}
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 115

void MyHttp::pause()
{
qDebug() << "pause() = " << _nDownloadSize;
if (_pCurrentReply == NULL)
{
return;
}
_Timer.stop();
disconnect(&_Timer, SIGNAL(timeout()), this, SLOT(timeout()));
disconnect(_pCurrentReply, SIGNAL(finished()), this, SLOT(finished()));
disconnect(_pCurrentReply, SIGNAL(downloadProgress(qint64, qint64)), this,
SLOT(downloadProgress(qint64, qint64)));
disconnect(_pCurrentReply, SIGNAL(error(QNetworkReply::NetworkError)),
this, SLOT(error(QNetworkReply::NetworkError)));

_pCurrentReply->abort();
// _pFile->write( _pCurrentReply->readAll());
_pFile->flush();
_pCurrentReply = 0;
_nDownloadSizeAtPause = _nDownloadSize;
_nDownloadSize = 0;
}

void MyHttp::resume()
{
qDebug() << "resume() = " << _nDownloadSizeAtPause;

download();
}

void MyHttp::download()
{
qDebug() << "download()";

if (_bAcceptRanges)
{
QByteArray rangeHeaderValue = "bytes=" +
QByteArray::number(_nDownloadSizeAtPause) + "-";
if (_nDownloadTotal > 0)
{
rangeHeaderValue += QByteArray::number(_nDownloadTotal);
}
_CurrentRequest.setRawHeader("Range", rangeHeaderValue);
}

_pCurrentReply = _pManager->get(_CurrentRequest);

_Timer.setInterval(5000);
_Timer.setSingleShot(true);
connect(&_Timer, SIGNAL(timeout()), this, SLOT(timeout()));
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 116

_Timer.start();

connect(_pCurrentReply, SIGNAL(finished()), this, SLOT(finished()));


connect(_pCurrentReply, SIGNAL(downloadProgress(qint64, qint64)), this,
SLOT(downloadProgress(qint64, qint64)));
connect(_pCurrentReply, SIGNAL(error(QNetworkReply::NetworkError)), this,
SLOT(error(QNetworkReply::NetworkError)));
}

void MyHttp::finishedHead()
{
_Timer.stop();
_bAcceptRanges = false;

QList<QByteArray> list = _pCurrentReply->rawHeaderList();


foreach(QByteArray header, list)
{
QString qsLine = QString(header) + " = " + _pCurrentReply-
>rawHeader(header);
addLine(qsLine);
}

if (_pCurrentReply->hasRawHeader("Accept-Ranges"))
{
QString qstrAcceptRanges = _pCurrentReply->rawHeader("Accept-Ranges");
_bAcceptRanges = (qstrAcceptRanges.compare("bytes", Qt::CaseInsensitive) ==
0);
qDebug() << "Accept-Ranges = " << qstrAcceptRanges << _bAcceptRanges;
}

_nDownloadTotal = _pCurrentReply-
>header(QNetworkRequest::ContentLengthHeader).toInt();

// _CurrentRequest = QNetworkRequest(url);
_CurrentRequest.setRawHeader("Connection", "Keep-Alive");
_CurrentRequest.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribut
e, true);
_pFile = new QFile(_qsFileName + ".part");
if (!_bAcceptRanges)
{
_pFile->remove();
}
_pFile->open(QIODevice::ReadWrite | QIODevice::Append);

_nDownloadSizeAtPause = _pFile->size();
download();
}

void MyHttp::finished()
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 117

{
qDebug() << __FUNCTION__;

_Timer.stop();
_pFile->close();
QFile::remove(_qsFileName);
_pFile->rename(_qsFileName + ".part", _qsFileName);
_pFile = NULL;
_pCurrentReply = 0;
emit downloadComplete();
}

void MyHttp::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)


{
_Timer.stop();
_nDownloadSize = _nDownloadSizeAtPause + bytesReceived;
qDebug() << "Download Progress: Received=" << _nDownloadSize << ": Total="
<< _nDownloadSizeAtPause + bytesTotal;

_pFile->write(_pCurrentReply->readAll());
int nPercentage =
static_cast<int>((static_cast<float>(_nDownloadSizeAtPause + bytesReceived)
* 100.0) / static_cast<float>(_nDownloadSizeAtPause + bytesTotal));
qDebug() << nPercentage;
emit progress(nPercentage);

_Timer.start(5000);
}

void MyHttp::error(QNetworkReply::NetworkError code)


{
qDebug() << __FUNCTION__ << "(" << code << ")";
}

void MyHttp::timeout()
{
qDebug() << __FUNCTION__;
}
‫د یه‬ّٛ٘‫د دس عی دا‬ٛ‫ػ‬ٛٔ ‫بی‬ٞ ‫ سٕبٔی سخذاد‬ٚ ‫ دسیبفز اعالػبر‬/ َ‫دس ایٗ والع سٕبٔی اسفبلب٘ی ٔظُ اسػب‬
.‫ذ داؿز‬ٞ‫ا‬ٛ‫ خ‬ٚ‫دؽ س‬ٛ‫ خبف خ‬ٝ‫ظیف‬ٚ ْ‫ش وذا‬ٞ ٝ‫ ایؼبد وشدیٓ و‬ٚ‫فبیُ س‬

...ٜ‫ خجش‬ٝ‫ؽ ؿ‬ٛ‫یٓ س‬ٙ‫ سلّیُ ایٗ والع ثجی‬ٝ‫خت كبال ثیبییٓ ػشاؽ سؼضی‬

:ٓ‫د وشدی‬ّٛ‫ى‬ٙ‫ ای‬ٚ‫اسد صیش س‬ٛٔ ‫اثشذا‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 118‬‬

‫‪#include‬‬ ‫"‪"myhttp.h‬‬
‫‪#include‬‬ ‫>‪<QFileInfo‬‬
‫‪#include‬‬ ‫>‪<QDateTime‬‬
‫‪#include‬‬ ‫>‪<QDebug‬‬
‫دِیّـ‪ٚ ٖٛ‬اظل‪ ! ٝ‬ا‪ِٚ‬یش‪ ٚ‬كشٕب ثبیذ ای‪ٙ‬ىّ‪ٛ‬د و‪ٙ‬یٓ ؿ‪ ٖٛ‬ثذ‪ ٖٚ‬ا‪ ٖٚ‬دػششػی ث‪ ٝ‬والع ‪ ٚ‬س‪ٛ‬اثغ اص دیؾ سؼشیف ؿذ‪ٜ‬‬
‫دس فبیُ ‪ .h‬أىب٘ذزیش ٘خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د‪.‬‬
‫‪QFileInfo‬ثشای وبس ثب اعالػبر فبیُ ‪ٞ‬ؼشؾ ‪ٌ ٚ‬ضی‪ ٓٞ QDateTime ٝٙ‬خت ثشای وبس ثب سبسیخ‪ ٛ‬صٔب٘‪ٛ‬‬
‫ای‪ٙ‬ؼ‪ٛ‬س ؿیضا ‪ ٚ‬دس ٘‪ٟ‬بیز ‪ QDebug‬ثشای وبس ‪ QDebug‬و‪ ٗٔ ٝ‬خ‪ٛ‬دْ ؿخلب اصؽ ٔش‪ٙ‬فشْ ؿ‪ ٖٛ‬خیّی‬
‫ضؼیفشش اص ‪ std::cout‬ػُٕ ٔیى‪ِٚ ٝٙ‬ی خت عی ایٗ آٔ‪ٛ‬صؽ ‪ٞ‬ب اص ‪ٕٞ‬یٗ س‪ٚ‬ؽ اػشفبد‪ٔ ٜ‬یى‪ٙ‬یٓ ‪ٞ‬شؿ‪ٙ‬ذ ‪ٞ‬یؾ‬
‫ٔ‪ٛ‬سدی ٘خ‪ٛ‬ا‪ٞ‬ذ داؿز اٌ‪ ٝ‬ؿٕب دس دش‪ٚ‬ط‪ٞ ٜ‬بس‪ ٖٛ‬ث‪ ٝ‬ػبی ‪ QDebug‬اص ‪ ٚ iostream‬فشاخ‪ٛ‬ا٘ی‬
‫‪std::cout‬ثشای ؿبح ٔ‪ٛ‬اسد ٔ‪ٛ‬سد ٘ظشس‪ ٖٛ‬اػشفبد‪ ٜ‬و‪ٙ‬یذ فمظ دس ثؼضی اص ٔ‪ٛ‬اسد ثبیذ ػُٕ سجذیُ ‪QString‬‬
‫ث‪ٞ StdString ٝ‬ب س‪ ٚ‬سػبیز و‪ٙ‬یذ ‪ ٚ‬دس ساثغ‪ ٝ‬ثب ٔمبدیش دیٍ‪ٕٞ ٓٞ ٝ‬ی‪ٙ‬غ‪ٛ‬س‪...ٜ‬‬

‫خت دس خظ ثؼذی ث‪ ٝ‬ك‪ٛ‬سر صیش‪...‬‬

‫‪MyHttp::MyHttp(QObject *parent) :‬‬


‫)‪QObject(parent‬‬
‫)‪, _pManager(NULL‬‬
‫)‪, _pCurrentReply(NULL‬‬
‫)‪, _pFile(NULL‬‬
‫)‪, _nDownloadTotal(0‬‬
‫)‪, _bAcceptRanges(false‬‬
‫)‪, _nDownloadSize(0‬‬
‫)‪, _nDownloadSizeAtPause(0‬‬
‫{‬
‫}‬
‫ای‪ٙ‬ؼب ٔب والػٕ‪ ٖٛ‬س‪ ٚ‬فشاخ‪ٛ‬ا٘ی وشدیٓ ‪ٕٞ‬شا‪ ٜ‬ثب آثؼىز ‪ٞ‬بؽ ‪ٞ ٚ‬ش یه اص والع ‪ٞ‬بی ٔـشك ؿذ‪ ٜ‬آٖ و‪ ٝ‬ث‪ٝ‬‬
‫٘‪ٛ‬ػی وذی اص والع ‪ٞ‬ب ثشای اػشفبد‪ ٜ‬اص آٖ ٌشفش‪ ٝ‬ؿذ‪ ٜ‬ا٘ذ دس ای‪ٙ‬ؼب آٔذ‪ ٜ‬اػز و‪ ٝ‬اثشذا ثشای ‪ٞ‬ش یه ٔمبدیش‬
‫دیـفشم ثش اػبع ٘‪ٛ‬ع آ٘‪ٟ‬ب ٔـخق ؿذ‪ ٜ‬اػز‪.‬‬

‫دس خظ ثؼذی ث‪ ٝ‬ك‪ٛ‬سر صیش‪...‬‬

‫)(‪MyHttp::~MyHttp‬‬
‫{‬
‫)‪if (_pCurrentReply != NULL‬‬
‫{‬
‫;)(‪pause‬‬
‫}‬
‫}‬
‫دس ثذ٘‪ ٝ‬والع ‪ٚ‬یشاٍ٘ش دػش‪ٛ‬س ؿشعی آٔذ‪ ٜ‬و‪ ٝ‬اٌش دبػخی اسػبَ ؿذ‪ ٜ‬اص عشف ػش‪ٚ‬س ث‪ ٝ‬ك‪ٛ‬سر ‪٘ NULL‬جبؿذ‬
‫سبثغ ‪ pause‬اػشا خ‪ٛ‬ا‪ٞ‬ذ ٌشدیذ‪.‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 119

....‫سر صیش‬ٛ‫ ك‬ٝ‫ ثؼذی ث‬ّٝ‫كبال دس ٔشك‬

void MyHttp::download(QUrl url)


{
qDebug() << "download: URL=" << url.toString();

_URL = url;
{
QFileInfo fileInfo(url.toString());
_qsFileName = fileInfo.fileName();
}
_nDownloadSize = 0;
_nDownloadSizeAtPause = 0;

_pManager = new QNetworkAccessManager(this);


_CurrentRequest = QNetworkRequest(url);

_pCurrentReply = _pManager->head(_CurrentRequest);

_Timer.setInterval(5000);
_Timer.setSingleShot(true);
connect(&_Timer, SIGNAL(timeout()), this, SLOT(timeout()));
_Timer.start();

connect(_pCurrentReply, SIGNAL(finished()), this, SLOT(finishedHead()));


connect(_pCurrentReply, SIGNAL(error(QNetworkReply::NetworkError)), this,
SLOT(error(QNetworkReply::NetworkError)));
}
‫ دس كیٗ اػشا اثشذا‬ٝ‫ؼشؾ و‬ٞ QUrl ‫ع‬ٛ٘ ‫ اص‬Url ‫ی دبسأشش‬ٚ‫ كب‬ٝ‫ا٘ی وشدیٓ و‬ٛ‫ فشاخ‬ٚ‫س‬download ‫سبثغ‬
...‫سر صیش‬ٛ‫ ك‬ٝ‫ ث‬ٚ ٜ‫ ٔیٍیش‬ٚ‫ؼشؾ س‬ٞ ‫د‬ّٛ٘‫ ٔخشق فبیُ لبثُ دا‬ٝ‫آدسػی و‬

qDebug() << "download: URL=" << url.toString();


.‫د‬ّٛ٘‫ اسػبَ وشدیٓ ثشای دا‬ٝ‫یه وذ ؿبح ثشای آدسػی و‬

_URL = url;
{
QFileInfo fileInfo(url.toString());
_qsFileName = fileInfo.fileName();
}
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 120‬‬

‫ای‪ٙ‬ؼب آدسع اسػبَ ؿذ‪ ٜ‬س‪ٛ‬ػظ وبسثش دسیبفز ‪ٔ ٚ‬ـخلبر آدسع س‪ٛ‬ػظ والع ‪ QFileInfo‬ثشسػی ‪٘ ٚ‬بْ‬
‫فبیُ اص آدسع ٌشفش‪ ٝ‬ؿذ‪ ٚ ٜ‬ث‪ٔ ٝ‬شغیش اص لجُ سؼشیف ؿذ‪ ٜ‬یؼ‪ٙ‬ی ‪_qsFileName‬اسػبَ ٔیـ‪ٛ‬د‪.‬‬

‫دس خظ ثؼذی وذ ‪ٞ‬بی صیش‪...‬‬

‫;‪_nDownloadSize = 0‬‬
‫;‪_nDownloadSizeAtPause = 0‬‬
‫ٔمذاس ‪ 0‬س‪ ٚ‬ث‪ٔ ٝ‬شغیش ‪ٞ‬بی ‪ٕٞ ٚ _nDownloadSize‬ـ‪ٙ‬یٗ ‪ _nDownloadSizeAtPause‬اخشلبف‬
‫ٔیذیٓ‪.‬‬

‫كبال ای‪ٙ‬ؼب والع اكّی ٔب و‪ ٝ‬اصؽ اػشفبد‪ ٜ‬خ‪ٛ‬ا‪ٞ‬یٓ وشد ‪ٚ‬اس وبس خ‪ٛ‬ا‪ٞ‬ذ ؿذ ث‪ ٝ‬ك‪ٛ‬سر صیش‪...‬‬

‫;)‪_pManager = new QNetworkAccessManager(this‬‬


‫;)‪_CurrentRequest = QNetworkRequest(url‬‬
‫ای‪ٙ‬ؼب ٔمذاس والع ٔـشك ؿذ‪ _pManager ٜ‬س‪ ٚ‬ثشاثش والع اكّی ‪QNetworkAccessManager‬‬
‫ٔـخق ٔیى‪ٙ‬یٓ ‪ٕٞ ٚ‬ـ‪ٙ‬یٗ والع ‪ٞ‬بی ‪ _CurrentRequest‬س‪ ٚ‬ثب دسخ‪ٛ‬اػز و‪ٙٙ‬ذ‪ ٜ‬آدسع یؼ‪ٙ‬ی‬
‫‪QNetworkRequest‬ثب دبسأشش ‪ url‬اخشلبف ٔیذیٓ‪.‬‬

‫دس ایٗ خظ ث‪ ٝ‬ك‪ٛ‬سر صیش‪...‬‬

‫;)‪_pCurrentReply = _pManager->head(_CurrentRequest‬‬
‫ٔمذاس ‪ _pCurrentReply‬س‪ ٚ‬ثشاثش ٔیى‪ٙ‬یٓ ثب ‪ٞ‬یذس )‪ (Header‬ای و‪ ٝ‬س‪ٛ‬ػظ والع‬
‫‪ٌ_CurrentRequest‬شفش‪ ٝ‬ؿذ‪.ٜ‬‬

‫خظ ‪ٞ‬بی صیش‪...‬‬

‫;)‪_Timer.setInterval(5000‬‬
‫;)‪_Timer.setSingleShot(true‬‬
‫خت ایؼب ٔب ٘یبص داسیٓ ث‪ٔ ٝ‬ذر صٔب٘ی و‪ ٝ‬ثبیذ س‪ٛ‬ػظ سبیٕشٔ‪ ٖٛ‬ایؼبد و‪ٙ‬یٓ ثشای ٔظبَ دس ای‪ٙ‬ؼب ٔیبٍ٘یٗ صٔب٘ی س‪ٚ‬‬
‫ثشاثش ‪ 5000‬هیلی ثاًیِ لشاس دادیٓ ‪ ٚ‬دس خظ ثؼذیؾ ٔمذاس ‪ SingleShot‬یب ‪ٕٞ‬بٖ سبیٕش ؿبر و‪ ٝ‬یىی اص‬
‫دشادشسی ‪ٞ‬بی ‪ٞ QTimer‬ؼشؾ س‪ ٚ‬ثشاثش ثب ‪ true‬لشاس دادیٓ‪.‬‬

‫‪ ٚ‬دس خظ ‪ٞ‬بی صیش‪...‬‬

‫;)))(‪connect(&_Timer, SIGNAL(timeout()), this, SLOT(timeout‬‬


‫;)(‪_Timer.start‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 121

َ‫ب‬ٍٙ‫ ٔؼذدا ػی‬ٚ َ‫ اسػب‬timeout ‫ػظ سبثغ‬ٛ‫ س‬ٚ‫ػظ سبیٕش س‬ٛ‫بَ اسػبِی س‬ٍٙ‫ ػی‬connect ‫ػظ سبثغ‬ٛ‫س‬
.ٓ‫ی‬ٙ‫ اسػبَ ٔیى‬timeout ‫ػظ سبثغ‬ٛ‫ س‬ٚ‫ٕبٖ اػالر س‬ٞ ‫ثبصٌـشی یب‬

connect(_pCurrentReply, SIGNAL(finished()), this, SLOT(finishedHead()));


connect(_pCurrentReply, SIGNAL(error(QNetworkReply::NetworkError)), this,
SLOT(error(QNetworkReply::NetworkError)));
ْ‫اٖ اسٕبْ وبس ا٘ؼب‬ٛٙ‫ ػ‬ٝ‫اة ث‬ٛ‫ دسیبفز ػ‬ٚ َ‫ اػالر ثشای اسػب‬ٚ َ‫ب‬ٍٙ‫بیی ػُٕ اسلبَ ثیٗ ػی‬ٟ٘ ‫ وذ‬ٚ‫ایٗ د‬
.ٓ‫ی‬ٙ‫ ایؼبد ٔیى‬ٝ‫ ثبؿ‬ٜ‫سد‬ٛ‫ اسسجبط ثب ٔـىُ ثشخ‬ٝ‫ ثشای صٔب٘ی و‬ٚ‫ٕیٗ وبس س‬ٞ ‫ دس خظ ثؼذی‬ٚ ‫ذ داد‬ٙٞ‫ا‬ٛ‫خ‬

:‫ اػز‬ٜ‫سر صیش سؼشیف ؿذ‬ٛ‫ ك‬ٝ‫ ث‬pause ‫ أب سبثغ‬ٚ

void MyHttp::pause()
{
qDebug() << "pause() = " << _nDownloadSize;
if (_pCurrentReply == NULL)
{
return;
}
_Timer.stop();
disconnect(&_Timer, SIGNAL(timeout()), this, SLOT(timeout()));
disconnect(_pCurrentReply, SIGNAL(finished()), this, SLOT(finished()));
disconnect(_pCurrentReply, SIGNAL(downloadProgress(qint64, qint64)),
this, SLOT(downloadProgress(qint64, qint64)));
disconnect(_pCurrentReply, SIGNAL(error(QNetworkReply::NetworkError)),
this, SLOT(error(QNetworkReply::NetworkError)));

_pCurrentReply->abort();
// _pFile->write( _pCurrentReply->readAll());
_pFile->flush();
_pCurrentReply = 0;
_nDownloadSizeAtPause = _nDownloadSize;
_nDownloadSize = 0;
}
‫ٓ ٔـخق‬ٞ ‫ ٔیشػیٓ اص ٘بْ سبثغ‬ٝ‫ ایٗ خظ و‬ٝ‫ ث‬Timert.Stop ‫ؼز ٔیشْ ػشاؽ‬ٞ ‫اسد اثشذاییؾ ٔـخق‬ٛٔ
ٗ‫د ثی‬ٛ‫ػ‬ٛٔ ‫ سٕبٔی اسسجبعبر‬disconnect ‫ػظ سبثغ‬ٛ‫ؼب س‬ٙ‫ دس ای‬ٝ‫ؼز و‬ٞ ‫لف وشدٖ ػّٕیبر‬ٛ‫ظیفؾ ٔش‬ٚ
ٝ‫ظیف‬ٚ ‫ یب ٔظال‬ٝ‫د ثبؿ‬ّٛ٘‫ فبیّی دس كبَ دا‬ٌٝ‫سر ا‬ٛ‫ی دس ایٗ ك‬ٙ‫ذ سفز یؼ‬ٙٞ‫ا‬ٛ‫ب اصثیٗ خ‬ٞ ‫ اػالر‬ٚ ‫ب‬ٞ َ‫ب‬ٍٙ‫ػی‬
.‫ ا٘ؼبْ داد‬ٚ‫لف س‬ٛ‫ ػُٕ س‬ٝ‫ ٔیـ‬ٝ‫ؼز و‬ٞ ‫ػظ ایٗ سبثغ‬ٛ‫ س‬ٝ‫ ثبؿ‬ٜ‫ اسٕبْ سػیذ‬ٝ‫د ث‬ّٛ٘‫دا‬

‫ضیلبر‬ٛ‫ذیٗ ػغش س‬ٙ‫ب ؿ‬ٞ ‫ْ اص ایٗ والع‬ٚ‫ش وذ‬ٞ ‫الؼب‬ٚ ٖٛ‫ خغی ثذْ ؿ‬ٝ‫ضیلبر خظ ث‬ٛ‫ سیض س‬ٝ‫اْ سیض ث‬ٛ‫ٕ٘یخ‬
ٝ‫ ؿبیذ ٔفیذ ثبؿ‬ٝ‫ب ثذْ و‬ٞ ٗ‫ وبس ای‬ٜٛ‫ضیق ٔخشلشی دس ٘ل‬ٛ‫یٓ س‬ٙ‫ٕیٗ ػؼی ٔیى‬ٞ ‫ ثشا‬ٜ‫اخشلبكی داس‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 122‬‬

‫دس ایٗ سبثغ دس وُ ثب اػشفبد‪ ٜ‬اص سبثغ ‪ disconnect‬سٕبٔی اسسجبط ‪ٞ‬ب اص ثیٗ سفش‪ ٚ ٝ‬ثؼذ اص آٖ دػش‪ٛ‬س اص ثیٗ‬
‫ثشدٖ سٕبٔی دسخ‪ٛ‬اػز ‪ٞ‬ب س‪ٛ‬ػظ سبثغ ‪ abort‬اسػبَ ٔی ؿ‪ٛ‬د‪.‬‬

‫دس خظ ثؼذ ایٗ ‪ٞ‬ب یه ٌضی‪ ٝٙ‬ای داسیٓ ث‪٘ ٝ‬بْ ‪ Flush‬ث‪ ٝ‬ك‪ٛ‬سر صیش اصؽ اػشفبد‪ ٜ‬ؿذ‪:ٜ‬‬

‫;)(‪_pFile->flush‬‬
‫ٔیذ‪٘ٚ‬یذ ایٗ ؿیىبس ٔیى‪! ٝٙ‬؟ اٌش دس ع‪ َٛ‬دسیبفز فبیُ اعالػبر ث‪ ٝ‬دسػشی ‪ ٚ‬وبُٔ ثذ‪ٞ ٖٚ‬یـٍ‪ ٝ٘ٛ‬خشاثی س‪ٚ‬ی‬
‫فیبَ ث‪ Buffer ٝ‬ا٘شمبَ دیذا و‪ٙٙ‬ذ دس ایٗ كبِز ‪ٔ Flush‬مذاس ‪ true‬س‪ ٚ‬اسػبَ ٔیى‪ ٚ ٝٙ‬دس غیش ای‪ٙ‬ل‪ٛ‬سر‬
‫ٔمذاس ‪ false‬س‪ ٚ‬اسػبَ خ‪ٛ‬ا‪ٞ‬ذ وشد دس ‪ٚ‬الغ س‪ٛ‬ػظ ایٗ ٔیش‪٘ٛ‬یٓ ساكز ٔـخق و‪ٙ‬یٓ و‪ ٝ‬فبیّٕ‪ ٖٛ‬ثب ٔ‪ٛ‬فمیز ‪ٚ‬‬
‫ثذ‪ٞ ٖٚ‬یـٍ‪ ٝ٘ٛ‬خشاثی داّ٘‪ٛ‬د ؿذ یب خیش!‬

‫خظ ‪ٞ‬بی ثؼذی ‪ ٓٞ‬و‪ٔ ٝ‬ـخق ‪ٞ‬ؼز‬

‫خت ‪ ٚ‬أب سبثغ ‪ resume‬دس ثبس‪ ٜ‬ایٗ سبثغ ‪ ٓٞ‬ای‪ٙ‬غ‪ٛ‬س س‪ٛ‬ضیق ثذْ و‪ٚ ٝ‬ظیفؾ ادأ‪ ٝ‬ػّٕیبر داّ٘‪ٛ‬د ‪ٞ‬ؼز‬
‫دس‪ٚ‬الغ ثب اػشای ایٗ سبثغ ٔؼّٕب ثبیذ سبثغ دیٍشی ث‪٘ ٝ‬بْ ‪ download‬ػّٕیبر خ‪ٛ‬دؽ س‪ ٚ‬ا٘ؼبْ ثذ‪ ٜ‬ث‪ ٝ‬ك‪ٛ‬ر‬
‫صیش‪...‬‬

‫)(‪void MyHttp::resume‬‬
‫{‬
‫;‪qDebug() << "resume() = " << _nDownloadSizeAtPause‬‬
‫;)(‪download‬‬
‫}‬
‫خیّی ساكز سبثغ فشاخ‪ٛ‬ا٘ی ؿذ‪ ٚ ٜ‬دس ثذ٘‪ ٝ‬سبثغ س‪ٛ‬ػظ ‪ٔ qDebug‬ش‪ٙ‬یش‪ٍٙٞ ٚ‬بْ دسخ‪ٛ‬اػز ادأ‪ ٝ‬ثب ػ‪ٛٙ‬اٖ‬
‫ٔمذاس ػبیض اص ٔشغیشی و‪ ٝ‬دس سبثغ ‪ٔ pause‬مذاس د‪ٞ‬ی ؿذ‪ ٜ‬ث‪ٛ‬د دسیبفز ٔیى‪.ٝٙ‬‬

‫‪ ٚ‬دس ٘‪ٟ‬بیز ادأ‪ ٝ‬وبس س‪ٛ‬ػظ اػشا ؿذٖ سبثغ ‪ download‬ك‪ٛ‬سر خ‪ٛ‬ا‪ٞ‬ذ ٌشفز‪.‬‬

‫خت ای‪ٙ‬ؼب د‪ٚ‬ثبس‪ٔ ٜ‬ب سبثؼی ٘‪ٛ‬ؿشیٓ ثب ٘بْ ‪ِٚ download‬ی ثب ایٗ سفب‪ٚ‬ر و‪ ٝ‬دیٍ‪ ٝ‬ای‪ٙ‬ؼب آدسع فبیّی ثشای‬
‫داّ٘‪ٛ‬د ٕ٘یخ‪ٛ‬اد ایٗ سبثغ وی اػشفبد‪ٔ ٜ‬یـ‪ ٝ‬اٌ‪ٌ ٝ‬فشیٗ !؟! خت ‪ٕٞ‬یٗ ؿ‪ٙ‬ذ خظ لجُ ٔٗ دس ٘‪ٟ‬بیز سبثغ‬
‫‪download‬س‪ ٚ‬فشاخ‪ٛ‬ا٘ی وشدْ ؿ‪ ٖٛ‬لشاس ث‪ٛ‬د ادأ‪ ٝ‬وبس س‪ ٚ‬ا٘ؼبْ ثذ‪ !!! ٜ‬دغ ٘جبیذ اص سبثغ ‪ download‬ای‬
‫و‪ ٝ‬ؿبُٔ دبسأشش ‪ URL‬ث‪ٛ‬د اػشفبد‪ٔ ٜ‬ی وشدیٓ‪.‬‬

‫‪ ٚ‬أب سبثغ ‪ finishedHead‬و‪ٚ ٝ‬ظیف‪ ٝ‬ایٗ سبثغ دسیبفز اعالػبر اص ‪ٞ‬یذس ‪ ٚ‬اسػبَ ا‪ ٖٚ‬ثشای وبسثش ‪ٞ‬ؼشؾ‪.‬‬

‫)(‪void MyHttp::finishedHead‬‬
‫{‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 123

_Timer.stop();
_bAcceptRanges = false;

QList<QByteArray> list = _pCurrentReply->rawHeaderList();


foreach(QByteArray header, list)
{
QString qsLine = QString(header) + " = " + _pCurrentReply-
>rawHeader(header);
addLine(qsLine);
}

if (_pCurrentReply->hasRawHeader("Accept-Ranges"))
{
QString qstrAcceptRanges = _pCurrentReply->rawHeader("Accept-
Ranges");
_bAcceptRanges = (qstrAcceptRanges.compare("bytes",
Qt::CaseInsensitive) == 0);
qDebug() << "Accept-Ranges = " << qstrAcceptRanges <<
_bAcceptRanges;
}

_nDownloadTotal = _pCurrentReply-
>header(QNetworkRequest::ContentLengthHeader).toInt();

// _CurrentRequest = QNetworkRequest(url);
_CurrentRequest.setRawHeader("Connection", "Keep-Alive");

_CurrentRequest.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribut
e, true);
_pFile = new QFile(_qsFileName + ".part");
if (!_bAcceptRanges)
{
_pFile->remove();
}
_pFile->open(QIODevice::ReadWrite | QIODevice::Append);

_nDownloadSizeAtPause = _pFile->size();
download();
}
...‫ؼشؾ‬ٞ ‫سر صیش‬ٛ‫ ك‬ٝ‫د ث‬ّٛ٘‫سر وّی سبثغ اسٕبْ دا‬ٛ‫ دس ك‬ٚ

void MyHttp::finished()
{
qDebug() << __FUNCTION__;

_Timer.stop();
_pFile->close();
QFile::remove(_qsFileName);
_pFile->rename(_qsFileName + ".part", _qsFileName);
_pFile = NULL;
_pCurrentReply = 0;
emit downloadComplete();
}
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 124

ٗ‫ؿشیٓ ؿبح و‬ٛ٘ ...ٝ‫ ٘جبؿ‬ٜ‫ذ‬ٙٙ‫ و‬ٜ‫ ٌٕشا‬ٝ‫ضیلی ثذْ و‬ٛ‫ ثبیذ یه س‬ٝ‫ؼز و‬ٞ ‫سدی‬ٛٔ ‫ایٗ ػب یه‬
‫سر‬ٛ‫ ك‬ٝ‫ ث‬ٝ‫ؼشؾ و‬ٞ (MACRO) ٚ‫ػی ٔبوش‬ٛ٘ ! __FUNCTION__ ٚ‫__س‬FUNCTION__
‫ی‬ٙ‫ذ وشد ! یؼ‬ٞ‫ا‬ٛ‫ضؼیز وبسی ایٗ سبثغ اسػبَ خ‬ٚ ‫ ثب‬ٝ‫ ثشای ٔب اعالػبسی دس ساثغ‬ٚ ‫ذ‬ٙٙ‫ ػُٕ ٔیى‬ٜ‫دیؾ دشداص٘ذ‬
‫د‬ٛ‫ػ‬ٛٔ ‫بی‬ٞ ‫ ثشای وبٔذبیّش‬ٝ‫ؾ ٌفز و‬ٟ‫ ث‬ٝ‫ ٔیـ‬LOG ‫س‬ٛ‫ یؼ‬ٜ‫س‬ٛ‫ ٔیخ‬ٜ‫ذ‬ٙٞ‫ د‬ٝ‫ػؼ‬ٛ‫ س‬ٚ ‫یغ‬ٛ٘ ٝٔ‫ دسد ثش٘ب‬ٝ‫فمظ ث‬
.‫ؼشؾ‬ٞ ‫بػبیی‬ٙ‫ لبثُ ؿ‬PHP ٚC++ ‫دس‬

‫یذ‬ٙ‫ب سلمیك و‬ٟٙ‫ ثب ای‬ٝ‫٘یذ دس ساثغ‬ٛ‫ ٔیش‬ٝ‫ و‬ٜ‫بی اػشب٘ذاسد اص دیؾ سؼشیف ؿذ‬ٞٚ‫ؼشؾ اص ایٗ ٔبوش‬ٞ ‫اسد صیبدی‬ٛٔ
__FUNCTION__ٚ: __FILE__, __LINE__,

ٚ ‫ضؼیز‬ٚ ٖ‫ ایٗ سبثغ ٔـخق وشد‬ٝ‫ظیف‬ٚ ٝ‫ٓ ٔـخل‬ٞ ‫ اص اػٕؾ‬downloadProgress ‫ سبثغ‬ٚ


ٚ ‫ ٔـخق‬ٚ‫ ثب صٔب٘ؾ س‬ٜ‫ٕشا‬ٞ ٜ‫ ثبلی ٔب٘ذد‬ٜ‫ یب ٔمذاس ا٘ذاص‬ٚ ٜ‫ دسیبفز ؿذ‬ٜ‫ ثب ٔمذاس ا٘ذاص‬ٝ‫اعالػبر وّی دس ساثغ‬
.‫ذد داد‬ٞ‫ا‬ٛ‫ٕ٘بیؾ خ‬

void MyHttp::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)


{
_Timer.stop();
_nDownloadSize = _nDownloadSizeAtPause + bytesReceived;
qDebug() << "Download Progress: Received=" << _nDownloadSize << ":
Total=" << _nDownloadSizeAtPause + bytesTotal;

_pFile->write(_pCurrentReply->readAll());
int nPercentage =
static_cast<int>((static_cast<float>(_nDownloadSizeAtPause + bytesReceived)
* 100.0) / static_cast<float>(_nDownloadSizeAtPause + bytesTotal));
qDebug() << nPercentage;
emit progress(nPercentage);

_Timer.start(5000);
}
..ٗ‫ٓ یه سبثؼی ثشای ٔـخق ػبصی ٔـىالر ٕٔى‬ٞ ‫ ثبص‬ٚ

void MyHttp::error(QNetworkReply::NetworkError code)


{
qDebug() << __FUNCTION__ << "(" << code << ")";
}
timeout‫ٓ ثشای ٔـىالر ٘بؿی دس‬ٞ ‫ سبثغ آخش‬ٚ

void MyHttp::timeout()
{
qDebug() << __FUNCTION__;
}
...ٓ‫ی‬ٙ‫ عشاكی ٔیى‬ٚ‫ش ؿیضی فشْ صیش س‬ٞ ‫ٓ لجُ اص‬ٙ‫ و‬ٜ‫اثغ اػشفبد‬ٛ‫اْ دس كبِز عشاكی اص ایٗ س‬ٛ‫خت كبال ٔٗ ٔیخ‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 125

‫بی‬ٞ ‫ آثؼىز‬ٚ ‫ب‬ٞ ‫ ٔشغیش‬ٚ ‫ب‬ٞ َ‫ب‬ٍٙ‫ ؿبُٔ ػی‬ٝ‫د و‬ٛ‫ذ ث‬ٞ‫ا‬ٛ‫سر صیش خ‬ٛ‫ ك‬ٝ‫یذس فشٔٓ ث‬ٞ ُ‫ فبی‬ٝ‫ط ث‬ٛ‫بی ٔشث‬ٞ ‫وذ‬
...‫ؼشؾ‬ٞ ٖٛٔ‫سد ٘ظش‬ٛٔ

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#if QT_VERSION >= 0x050000


#include <QtWidgets/QMainWindow>
#else
#include <QMainWindow>
#endif

#include "downloadmanager.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow


{
Q_OBJECT
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 126‬‬

‫‪public:‬‬
‫;)‪explicit MainWindow(QWidget *parent = 0‬‬
‫;)(‪~MainWindow‬‬

‫‪private slots:‬‬
‫;)‪void addLine(QString qsLine‬‬
‫;)‪void progress(int nPercentage‬‬
‫;)(‪void finished‬‬

‫;)(‪void on_downloadBtn_clicked‬‬
‫;)(‪void on_pauseBtn_clicked‬‬
‫;)(‪void on_resumeBtn_clicked‬‬

‫‪protected:‬‬
‫;)‪void changeEvent(QEvent *e‬‬

‫‪private:‬‬
‫;‪Ui::MainWindow *ui‬‬
‫;‪DownloadManager* mManager‬‬

‫;}‬

‫‪#endif // MAINWINDOW_H‬‬
‫ی‪ ٝ‬س‪ٛ‬ضیلی دس ساثغ‪ ٝ‬ثب وذ صیش ثذْ ؿبیذ ثشای خیّی ‪ٞ‬ب ٔـخق ٘ـذ‪ ٜ‬ثبؿ‪ ٝ‬ؿی‪...ٝ‬‬

‫‪#if QT_VERSION >= 0x050000‬‬


‫>‪#include <QtWidgets/QMainWindow‬‬
‫‪#else‬‬
‫>‪#include <QMainWindow‬‬
‫‪#endif‬‬
‫ٔب دس ‪ C++‬ا٘‪ٛ‬اع ٔبوش‪ٞ ٚ‬بس‪ ٚ‬داسیٓ و‪ٚ ٝ‬ظیف‪ ٝ‬ای‪ٟٙ‬ب لجُ اص دیؾ دشداصؽ ؿذٖ ‪ٞ‬ؼز سب اػشا ثـٗ ای‪ٙ‬ب ؿىبس‬
‫ٔیى‪ ٗٙ‬دلیمب لجُ اص ای‪ٙ‬ى‪ ٝ‬وذ ‪ٞ‬بی ٔب خ‪٘ٛ‬ذ‪ ٜ‬ثـٗ اػشا ٔیـٗ ؿشایظ س‪ ٚ‬ثشسػی ‪ ٚ‬ثش اػبع ا‪ ٖٚ‬ؿشایظ ثیٗ وذ‬
‫‪ٞ‬بی ٔب ػ‪ٛ‬ئیؾ خ‪ٛ‬ا‪ٙٞ‬ذ ؿذ ٔظال دس ایٗ وذ ٌفشیٗ اٌش ٔبوش‪ٚ‬ی ‪ٔ QT_VERSION‬مذاسؽ ثضسٌشش‬
‫اص ‪ 0x050000‬یؼ‪ٙ‬ی وی‪ٛ‬ر ٘ؼخ‪ 5.0 ٝ‬ث‪ٛ‬د ثش‪ ٚ‬فالٖ ٔؼیش فبیُ فالٖ س‪ ٚ‬فشاخ‪ٛ‬ا٘ی وٗ دس غیش ای‪ٙ‬ل‪ٛ‬س اص‬
‫ٔؼیش صیش فبیُ ‪ٞ‬ب ‪ٞ ٚ‬یذس ‪ٞ‬بس‪ ٚ‬ثشاْ فشاخ‪ٛ‬ا٘ی وٗ‪...‬‬

‫ایٗ ‪ٞ‬ب ل‪ٛ‬اػذ خبكی داسٖ ثشای خ‪ٛ‬دؿ‪ ٖٛ‬دس ساثغ‪ ٝ‬ثب ای‪ٙ‬ؼ‪ٛ‬س ؿیضا سلمیك و‪ٙ‬یذ ٔظال ‪ 0x050000‬س‪ٔ ٚ‬یش‪٘ٛ‬یذ‬
‫ث‪ ٝ‬ای‪ٙ‬ل‪ٛ‬سر ‪ ٓٞ‬ث‪ٛٙ‬یؼیذ‪: 5.0‬‬

‫كبال ثشیٓ ػشاؽ فشْ ِ‪ٛ‬د و‪ ٝ‬الصٔ‪ ٝ‬وذ ‪ٞ‬بی صیش س‪ ٚ‬ث‪ٛٙ‬یؼیٓ‪...‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 127

ui->urlEdit->setText("http://qt.digia.com/Static/Images/QtLogo.png");

QStandardItemModel *model = new QStandardItemModel(0, 1, this);


ui->listView->setModel(model);

mManager = new DownloadManager(this);

connect(mManager, SIGNAL(addLine(QString)), this, SLOT(addLine(QString)));


connect(mManager, SIGNAL(downloadComplete()), this, SLOT(finished()));
connect(mManager, SIGNAL(progress(int)), this, SLOT(progress(int)));
‫سر دیـفشم آدسع‬ٛ‫ ك‬ٝ‫ اثشذا ث‬ٝ‫ و‬urlEdit ٓ‫ ٌزاؿش‬ٚ‫ عشاكی وشدْ ٘بْ سىؼز ثبوؼٓ س‬ٝ‫عجك فشٔی و‬
.ْ‫ؾ اخشلبف ٔیذ‬ٟ‫ ث‬ٚ‫ س‬Qt ‫ی‬ٌِٛٛ ‫یش‬ٛ‫سل‬
‫ٓ وشدٖ یه‬ٞ‫ظیفؾ فشا‬ٚ ٝ‫ ػبخشٓ و‬QStandardItemModel ‫دسخظ ثؼذی یه وذی اص والع‬
.‫ؼشؾ‬ٞ ٜ‫ا‬ٛ‫بی دِخ‬ٞ ٜ‫ ػبصی داد‬ٜ‫ٔی ثشای رخیش‬ٕٛ‫ٔذَ ػ‬
‫ دس خظ ثؼذ یه وذی اص والع‬ٚ ْ‫ی فشٔٓ لشاس دادْ سخلیق ٔیذ‬ٚ‫ س‬ٝ‫ و‬listView ‫ ؿیئ‬ٝ‫ ث‬ٚ‫ٔذِٓ س‬
‫ اسسجبط ثشلشاس ٔی‬ٍٝ‫ٓ دی‬ٞ‫ب ثب‬ٟ‫ اػالس‬ٚ ‫ب‬ٞ َ‫ب‬ٍٙ‫ ػی‬connect ‫ػظ سبثغ‬ٛ‫ خظ ثؼذی س‬ٝ‫ ػ‬ٚdownload
.‫ذ‬ٙٙ‫و‬

...ٓ‫یؼ‬ٛٙ‫ ٔی‬ٚ‫ وذ صیش س‬ٚ ‫ ایؼبد‬ٚ‫ اػالسؾ س‬Download ٕٝ‫ی دو‬ٚ‫س‬

ui->listView->reset();
QUrl url(ui->urlEdit->text());
mManager->download(url);
ui->downloadBtn->setEnabled(false);
ui->pauseBtn->setEnabled(true);
...‫سر صیش‬ٛ‫ ك‬ٝ‫ ث‬Pause ٕٝ‫دو‬

mManager->pause();
ui->pauseBtn->setEnabled(false);
ui->resumeBtn->setEnabled(true);
...‫سر صیش‬ٛ‫ ك‬ٝ‫ ث‬Resume ٕٝ‫دو‬

mManager->resume();
ui->pauseBtn->setEnabled(true);
ui->resumeBtn->setEnabled(false);
.h ُ‫ فبی‬ٛ‫د س‬ٛ‫ث‬QString ‫ع‬ٛ٘ ‫ اص‬AddLine ْ‫ ٘ب‬ٝ‫ ٔشغیشی داؿشٓ ث‬ٝ‫ع‬ٛ‫ ثشای ٕ٘بیؾ دادٖ اعالػبر ٔشث‬ٚ
...ٓ‫یؼی‬ٛٙ‫سر ث‬ٛ‫ ایٗ ك‬ٝ‫ ثبیذ ث‬ٚ‫ش‬ٙ‫ ای‬ٝ‫ط ث‬ٛ‫ سبثغ ٔشث‬...‫یذ‬ٙ‫عشف فشٔٓ ثٍشدیٗ دیذاؽ ٔیى‬

void MainWindow::addLine(QString qsLine)


‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 128

{
int nRow = ui->listView->model()->rowCount();
ui->listView->model()->insertRow(nRow);
ui->listView->model()->setData(ui->listView->model()->index(nRow, 0),
qsLine);
}
...‫سر صیش‬ٛ‫ ك‬ٝ‫ ث‬ProgressBar ٝ‫ط ث‬ٛ‫ سبثغ ٔشث‬ٚ

void MainWindow::progress(int nPercentage)


{
ui->progressBar->setValue(nPercentage);
}
Finished ...‫سبثغ‬

void MainWindow::finished()
{
ui->downloadBtn->setEnabled(true);
ui->pauseBtn->setEnabled(false);
ui->resumeBtn->setEnabled(false);
}
....‫د‬ٛ‫ذ ث‬ٞ‫ا‬ٛ‫سر صیش خ‬ٛ‫ ك‬ٝ‫ وبس ث‬ٝ‫ ٘شیؼ‬ٚ

‫ؼشؾ‬ٞ HTTP ُ‫ٓ دلیمب ٔظ‬ٞ FTP ُ‫سى‬ٚ‫ ثب دش‬ٝ‫دس ساثغ‬

‫ هعرفی ٍ تا تایٌری ٍ سریالیس کردى آتجکي ّا‬:‫اداهِ هرحلِ سی سَم‬


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 129‬‬

‫دس ساثغ‪ ٝ‬ثب ثلض ‪ٔ Serialization‬یش‪ ٓ٘ٛ‬ای‪ ٍٝ٘ٛٙ‬س‪ٛ‬ضیق د‪ ٓٞ‬و‪ ٝ‬ث‪ ٝ‬ع‪ٛ‬س وّی دس وبٔذی‪ٛ‬سش ‪ ٚ‬ػیؼشٓ ‪ٞ‬بی‬
‫رخیش‪ ٜ‬ػبصی ٔلش‪ٛ‬یبر فبیُ ‪ٞ‬ب ث‪ ٝ‬ك‪ٛ‬سر ‪ٞ‬بی ٔش‪ٙ‬ی ‪ ٚ‬ثبی‪ٙ‬ششی رخیش‪ٔ ٜ‬ی ؿ‪٘ٛ‬ذ‪.‬‬
‫كبال دس كبِز ػبدی یب ‪ٕٞ‬بٖ دیـفشم اٌش ؿٕب عجك ٔظبَ صیش سؿش‪ ٝ‬ای س‪ ٚ‬دس داخُ یه فبیُ ث‪ٛٙ‬یؼیٓ‪...‬‬

‫‪// writing on a text file‬‬


‫>‪#include <iostream‬‬
‫>‪#include <fstream‬‬
‫;‪using namespace std‬‬

‫{ )( ‪int main‬‬
‫;)"‪ofstream myfile ("example.txt‬‬
‫))(‪if (myfile.is_open‬‬
‫{‬
‫;"‪myfile << "This is a line.\n‬‬
‫;"‪myfile << "This is another line.\n‬‬
‫;)(‪myfile.close‬‬
‫}‬
‫;"‪else cout << "Unable to open file‬‬
‫;‪return 0‬‬
‫}‬
‫وبٔال ث‪ ٝ‬ك‪ٛ‬سر ػبدی ‪ٔ ٚ‬ش‪ٙ‬ی دس فبیُ ٔ‪ٛ‬سد ٘ظش رخیش‪ ٜ‬خ‪ٛ‬ا‪ٞ‬ذ ؿذ ‪ِٚ‬ی دس كبِز ثبی‪ٙ‬شی سٕبٔی اؿیبء ث‪ ٝ‬ك‪ٛ‬سر‬
‫یه كبِز ٔ‪ٙ‬للش ثفشد ‪ ٚ‬خبكی رخیش‪ٔ ٜ‬ی ؿ‪٘ٛ‬ذ یؼ‪ٙ‬ی لجُ اص رخیش‪ٔ ٜ‬ؼشمیٓ ٔلش‪ٛ‬یبر دس فبیُ اؿیبء ٔ‪ٛ‬سد ٘ظش‬
‫ث‪ ٝ‬ك‪ٛ‬سر ‪ Byte stream‬سجذیُ ؿذ‪ ٚ ٜ‬ػذغ دس فبیُ رخیش‪ٔ ٜ‬ی ؿ‪ٛ‬د‪.‬‬

‫ٔب دس وُ ؿبیذ ؿ‪ٙ‬یذ‪ ٜ‬ثبؿیذ د‪ ٚ‬كبِز ‪ DeSerialization ٚ Serialization‬س‪ ٚ‬دس ثلض ثش٘بٔ‪ٝ‬‬
‫٘‪ٛ‬یؼی ‪ٔ ٚ‬جلض رخیش‪ ٜ‬ػبصی داد‪ٞ ٜ‬ب داسیٓ و‪ ٝ‬ث‪ ٝ‬ػُٕ سجذیُ آثؼىز ث‪ ٝ‬ك‪ٛ‬سر ثبی‪ٙ‬شی ‪ٕٞ‬بٖ‬
‫‪ ٚSerialization‬ث‪ ٝ‬ػىغ آٖ ػُٕ ‪ٔ DeSerialization‬یٍ‪ٛ‬ی‪ٙ‬ذ‬

‫كبال دس ایٗ ٔظبَ ٔٗ س‪ٚ‬ؿی س‪ ٚ‬ثشای خ‪ٛ‬ا٘ذٖ ‪ٛ٘ ٚ‬ؿشٗ اعالػبر دس داخُ یه فبیُ س‪ ٚ‬ث‪ٝ‬‬
‫ك‪ٛ‬سر‪ DeSerializationٚ Serialization‬ث‪ ٝ‬وٕه والع ‪ QDataStream‬س‪ٛ‬ضیق‬
‫خ‪ٛ‬ا‪ ٓٞ‬داد‪.‬‬

‫ی‪ ٝ‬دش‪ٚ‬ط‪ ٜ‬اص ٘‪ٛ‬ع و‪ٙ‬ؼ‪ َٛ‬ایؼبد ٔیى‪ٔ ٚ ٓٙ‬یشْ ػش اكُ ٔغّت‪...‬‬

‫ٔٗ ٔیخ‪ٛ‬اْ ی‪ٔ ٝ‬ش‪ٙ‬ی س‪ ٚ‬ث‪ ٝ‬ك‪ٛ‬سر صیش ‪ٚ‬اسد و‪...ٓٙ‬‬

‫‪C++ 1‬‬
‫‪C++ 2‬‬
‫‪C++ 3‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 130

...‫سر صیش‬ٛ‫ ك‬ٝ‫ٓ ث‬ٙ‫س ثبیذ ػُٕ و‬ٛ‫ ! ؿغ‬ٝ‫شی ثبؿ‬ٙ‫سر ثبی‬ٛ‫ ك‬ٝ‫ دس فبیُ ث‬ٜ‫ ؿذ‬ٜ‫ رخیش‬ٝ‫بیز ٘شیؼ‬ٟ٘ ‫ دس‬ٚ

#include <QCoreApplication>
#include <QFile>
#include <QString>
#include <QDebug>
#include <QMap>

void SaveObject()
{

int iNum = 64;


QMap<int,QString> iMap;
iMap.insert(1,"C++");
iMap.insert(2,"C++ 2");
iMap.insert(3,"C++ 3");

//Save to file.
QFile iFile("c:/Test/itest.txt");

if(!iFile.open(QIODevice::WriteOnly))
{

qDebug() << "Could not open file !";


return;
}

QDataStream iOut (&iFile);


iOut.setVersion(QDataStream::Qt_5_2);

iOut << iNum << iMap;

iFile.flush();
iFile.close();

int main(int argc, char *argv[])


{
QCoreApplication a(argc, argv);

SaveObject();
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 131‬‬

‫;)(‪return a.exec‬‬
‫}‬
‫اثشذا ‪ٞ‬یذس ‪ٞ‬بی ‪ QMap ٚ QFile , QString‬س‪ ٚ‬فشاخ‪ٛ‬ا٘ی ٔیى‪ ٓٙ‬ؿ‪ٞ ٖٛ‬ذفٓ ٘‪ٛ‬ؿشٗ دس داخُ یه فبیُ‬
‫‪ٞ‬ؼشؾ اص ٔذَ ‪ QIODevice::WriteOnly‬اػشفبد‪ ٜ‬وشدْ‪.‬‬
‫ثؼذ ا‪ٔٚ‬ذْ یه سبثغ سؼشیف وشدْ و‪ ٝ‬اثشذا ث‪ ٝ‬ك‪ٛ‬سر ػّیم‪ ٝ‬ای یه ٘‪ٛ‬ع كلیق دس ٘ظش ٌشفشٓ ثشای ای‪ٙ‬ى‪ٝ‬‬
‫ٔیخ‪ٛ‬اْ ‪ٕٞ‬شا‪ ٜ‬ثب ٔشٗ ٔ‪ٛ‬سد ٘ظشْ ٔخّ‪ٛ‬ط ثـ‪ ٚ ٝ‬د٘جبَ ا‪ ٖٚ‬یه ٘‪ٛ‬ع سؿش‪ ٝ‬ای اص ٘‪ٛ‬ع ‪ِ Qmap‬یؼز ػبخشٓ ‪ ٚ‬یه‬
‫ػشی اعالػبر س‪ ٚ‬ث‪ ٝ‬ك‪ٛ‬سر ِیؼز ایؼبد وشدْ‪.‬‬

‫س‪ٛ‬ػظ دػش‪ٛ‬س صیش یه وذی اص والع ‪ٌ QFile‬شفشٓ ‪ٔ ٚ‬ؼیش ٔ‪ٛ‬سد ٘ظشْ س‪ ٚ‬ثشای رخیش‪ ٜ‬ػبصی ٔلش‪ٛ‬ا دس فبیُ‬
‫س‪ ٚ‬دادْ‪...‬‬

‫;)"‪QFile iFile("c:/Test/itest.txt‬‬
‫دػش‪ٛ‬س ثؼذیؾ یه ؿشط سؼشیف وشدْ و‪ ٝ‬الب اٌ‪ ٝ‬فبیُ ثبص ٘ـذ دیغبْ فالٖ س‪ ٚ‬ثذ‪ ٜ‬د سغیش ای‪ٙ‬ل‪ٛ‬سر ثش‪ ٚ‬ادأ‪ٝ‬‬
‫ٔشاكُ‪ ...‬اِجش‪ ٝ‬دلز و‪ٙ‬یذ و‪ ٝ‬ؿ‪ ٖٛ‬للذْ ٘‪ٛ‬ؿشٗ دس فبیُ ‪ٞ‬ؼز اص اكّی سشیٗ‬
‫لؼٕشؾ ‪ٞ QDataStream‬ؼز و‪ٚ ٝ‬ظیف‪ ٝ‬ایٗ والع فشا‪ ٓٞ‬وشدٖ أىبٖ ا٘شمبَ داد‪ٞ ٜ‬بی ثبی‪ٙ‬شی س‪ ٚ‬ث‪ٝ‬‬
‫ٔؼشای ‪ٔ QIODevice‬یذ‪ ٜ‬و‪ ٝ‬ای‪ٙ‬ؼب ٔٗ یه وذی اصؽ ػبخشٓ ‪ٌ ٚ‬فشٓ فبیّٓ س‪ ٚ‬دس ٘ظش ثٍیش ‪ ٚ‬ثش اػبع‬
‫٘ؼخ‪ ٝ‬سؼییٗ ؿذ‪ ٜ‬و‪ ٝ‬ای‪ٙ‬ؼب ٔٗ اص ‪ 5.2‬خ‪ٛ‬د ‪ Qt‬اػشفبد‪ ٜ‬وشدْ س‪ ٚ‬ث‪ٟ‬ؾ اخشلبف دادْ و‪ ٝ‬اك‪ٛ‬ال اص ٘ؼخ‪ٞ ٝ‬بی‬
‫ا‪ِٚ‬ی‪ Qt_1_0 ٝ‬ثٍیشیذ ثشیذ سب ‪ Qt_5_3‬و‪ ٝ‬االٖ ‪ٞ‬ؼز دس ِیؼشٓ ٔ‪ٛ‬ػ‪ٛ‬د‪ٔ ٜ‬یش‪ ٓ٘ٛ‬اػشفبد‪ ٜ‬و‪.ٓٙ‬‬

‫خت دس خظ ثؼذیؾ ٌفشٓ ‪ iNum‬س‪ ٚ‬و‪ ٝ‬اص ٘‪ٛ‬ع ػذد كلیق ‪ٞ‬ؼشؾ س‪ٕٞ ٚ‬شا‪ ٜ‬ثب ‪ٔ iMap‬خغ‪ ٚ َٛ‬دس ‪iOut‬‬
‫ثشیض و‪ ٝ‬ث‪ ٝ‬سشسیت ا‪ِٛٚ‬یز اص ساػز ث‪ ٝ‬ؿخ ‪ٚ‬اسد خ‪ٛ‬ا‪ٞ‬ذ ؿذ‪.‬‬
‫دس خظ ثؼذی فالؽ صدْ و‪ ٝ‬دس دؼز ‪ٞ‬بی لجّی س‪ٛ‬ضیق دادْ وبسؽ ؿی‪ ٚ ٝ‬دس ٘‪ٟ‬بیز فبیُ س‪ ٚ‬ثؼذ اص ٘‪ٛ‬ؿشٗ ‪ٚ‬‬
‫فالؽ ثؼشٕؾ‪.‬‬

‫٘شیؼ‪ ٝ‬ثبیذ دس ٔؼیش روش ؿذ‪ ٜ‬ث‪ ٝ‬ك‪ٛ‬سر ثبی‪ٙ‬شی رخیش‪ ٜ‬ؿذ‪ ٜ‬ثبؿ‪ !!! ٝ‬ث‪ ٝ‬ك‪ٛ‬سر ضٕیٕ‪ ٝ‬ؿذ‪ٔ ٜ‬یش‪٘ٛ‬یذ دسیبفز ‪ٚ‬‬
‫ثشسػیؾ و‪ٙ‬یذ فمظ ٔؼیش فبیُ س‪ ٚ‬عجك ؿشایظ خ‪ٛ‬دس‪ ٖٛ‬سغییش ثذیٗ‪.‬‬

‫عجك سل‪ٛ‬یش ٔـب‪ٞ‬ذ‪ٔ ٜ‬یى‪ٙ‬یذ و‪ ٝ‬اعالػبر ث‪ ٝ‬ك‪ٛ‬سر ثبی‪ٙ‬شی رخیش‪ ٜ‬ؿذ‪ ٜ‬اػز‪...‬‬

‫٘شیؼ‪ ٝ‬خش‪ٚ‬ػی كبكُ ٔخّ‪ٛ‬ط ؿذٖ ٔشٗ ‪ ٚ‬ا‪ ٖٚ‬ػذدی ‪ٞ‬ؼشؾ و‪ ٝ‬ا‪ ٖٚ‬ثبال سؼشیف وشدْ یؼ‪ٙ‬ی ‪.64‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 132

ٝ‫ ث‬ٜ‫شی ؿذ‬ٙ‫ اعالػبسؾ ثبی‬ٝ‫ا٘ذٖ اعالػبر اص داخُ فبیّی و‬ٛ‫ٖ خ‬ٕٛٞ ‫ وشدٖ یب‬DeSerialize ‫خت ثشیٓ ػشاؽ‬
...‫سر صیش‬ٛ‫ك‬

...ٓ‫یؼ‬ٛٙ‫سر صیش ٔی‬ٛ‫ ك‬ٝ‫ ث‬ٚ‫سبثغ س‬

void ReadObject()
{

int iNum;
QMap<int,QString> iMap;

//Read from file.


QFile iFile("c:/Test/itest.txt");

if(!iFile.open(QIODevice::ReadOnly))
{

qDebug() << "Could not open file !";


return;
}

QDataStream iIn (&iFile);


iIn.setVersion(QDataStream::Qt_5_2);

iIn >> iNum >> iMap;


iFile.close();

qDebug() << "iNum = " << iNum;


‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 133‬‬

‫))(‪foreach(QString Item , iMap.values‬‬


‫{‬
‫;‪qDebug() << Item‬‬
‫}‬
‫}‬
‫خت كبال ای‪ٙ‬ؼب ثجی‪ٙ‬یذ ؿ‪ ٝ‬سغییشاسی دادیٓ اثشذا ٔمذاس كلیق س‪ ٚ‬خبِی ٌزاؿشٓ ؿ‪ ٖٛ‬ای‪ٙ‬ؼب ‪ٞ‬ذفٓ خ‪٘ٛ‬ذٖ اعالػبر‬
‫‪ٞ‬ؼز دغ ٔمذاس اص عشف فبیُ ٌشفش‪ ٚ ٝ‬ثشٌـز داد‪ٔ ٜ‬یـ‪ ٝ‬ث‪ٕٞ ٝ‬یٗ ٔشغیش اص ٘‪ٛ‬ع كلیق ‪$‬اِجش‪ٙٔ ٝ‬ظ‪ٛ‬سْ اص ٔمذاس‬
‫‪ٔ ٖٕٛٞ‬مذاس ‪ٞ 64‬ؼز و‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر ثبی‪ٙ‬شی رخیش‪ ٜ‬ؿذ‪ ٜ‬ث‪ٛ‬د(‬

‫ٔشاكُ ثؼذؽ دیٍ‪ ٝ‬اص ِیؼز ‪ QMap‬خجشی ٘یؼز ؿ‪ ٖٛ‬ثبصْ ‪ٞ‬ذف فمظ خ‪٘ٛ‬ذٖ ‪ٞ‬ؼز دغ ٔیشْ ػش اكُ‬
‫ٔغّت‪...‬ای‪ٙ‬جبس ٌفشٓ ‪ ٚ QIODevice::ReadOnly‬اعالػبر س‪ ٚ‬ث‪ ٝ‬ك‪ٛ‬سر یه سؿش‪ ٝ‬ث‪ ٗٔ ٝ‬دس و‪ٙ‬ؼ‪َٛ‬‬
‫ٕ٘بیؾ ثذ‪ ٜ‬س‪ٛ‬ػظ دػش‪ٛ‬س صیش‪...‬‬

‫اثشذا ٔمذاس ثبصٌـشی ػذد س‪ ٚ‬دس ٔشغیش ‪ iNum‬سیخش‪ ٚ ٝ‬ؿبدؾ ٔیى‪ ٚ ٓٙ‬ثشای ٔلش‪ٛ‬یبر سؿش‪ ٝ‬ای ‪ ٓٞ‬ث‪ ٝ‬ك‪ٛ‬سر‬
‫صیش‪...‬‬

‫))(‪foreach(QString Item , iMap.values‬‬


‫{‬
‫;‪qDebug() << Item‬‬
‫}‬
‫ی‪ Item ٝ‬اص ٘‪ٛ‬ع سؿش‪ٔ ٝ‬ـخق وشدْ ‪ ٚ‬ثؼذ ٔمبدیش ‪ iMap‬س‪ ٚ‬و‪ ٝ‬ثبصٌـز دادْ دسیبفز ‪ ٚ‬دس ٘‪ٟ‬بیز ‪ٕٞ‬ش‪ٚ‬‬
‫ؿبح وشدْ‪.‬‬

‫‪٘ ٚ‬شیؼ‪ ٝ‬دس ٘‪ٟ‬بیز ث‪ ٝ‬ك‪ٛ‬سر صیش ؿبح خ‪ٛ‬ا‪ٞ‬ذ ؿذ‪...‬‬


‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 134

‫ ّا‬TextStream ‫ هعرفی ٍ کار تا‬:‫هرحلِ سی ٍ چْارم‬

ٖ‫ا٘ذ‬ٛ‫ خ‬ٚ ٗ‫ؿش‬ٛ٘ ٖ‫ أىب‬ٝ‫ و‬QTextStream ْ‫ ٘ب‬ٝ‫ب والػی داسیٓ ث‬ٞ ٝ‫ؿشٗ دس سؿش‬ٛ٘ ٖ‫ا٘ذ‬ٛ‫ ثب خ‬ٝ‫دس ساثغ‬
‫ دس‬ٝ‫ر و‬ٚ‫ؼشؾ ثب ایٗ سفب‬ٞ ‫دس دؼز لجّی‬QDataStream ٝ‫ؽ وبسؽ ٔـبث‬ٚ‫ س‬...ٝٙ‫ٓ ٔیى‬ٞ‫ ثشای ٔب فشا‬ٚ‫س‬
...ٓ‫ وبس داسی‬ٚ‫ب ػش‬ٞ ٝ‫ؼب ثب سؿش‬ٙ‫ای‬

‫ا٘ذٖ ثب‬ٛ‫یؼٓ ثشای خ‬ٛٙ‫ اثشذا سبثؼی ٔی‬ٝ‫یؼی و‬ٛ٘ ‫ ٔیشْ ػشاؽ وذ‬ٚ َٛ‫ؼ‬ٙ‫ع و‬ٛ٘ ‫ٓ اص‬ٙ‫ ای ایؼبد ٔیى‬ٜ‫ط‬ٚ‫دش‬
...‫سر صیش‬ٛ‫ ك‬ٝ‫ ث‬Write ْ‫ؿشٗ ثب ٘ب‬ٛ٘ ‫یؼٓ ثشای‬ٛٙ‫ سبثؼی ٔی‬ٚ Read ْ‫٘ب‬

: ٓٙ‫ا٘ی ٔیى‬ٛ‫ فشاخ‬ٚ‫بی صیش س‬ٞ ُ‫فبی‬

#include <QTextStream>
#include <QFile>
Readٝ‫ط ث‬ٛ‫وذ ٔشث‬

void Read()

{
QFile MyFile("d://MyFile.txt");
if(MyFile.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream MyStream(&MyFile);
QString MyLine;

do

MyLine = MyStream.readLine();
qDebug() << MyLine;

while(!MyLine.isNull());

}
MyFile.close();
qDebug() << "MyFile Read.";

}
Writeٝ‫ط ث‬ٛ‫ وذ ٔشث‬ٚ

void Write()
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 135

{
QFile MyFile("d://MyFile.txt");
if(MyFile.open(QIODevice::WriteOnly | QIODevice::Text))
{
QTextStream MyStream(&MyFile);
MyStream << "Hello \r\n";
MyStream << "World \r\n";

MyStream.flush();
MyFile.close();
qDebug() << "MyFile Written.";

}
...ٓٙ‫ا٘ی ٔیى‬ٛ‫ا٘ذٖ فشاخ‬ٛ‫ ثؼذ خ‬ٚ ٗ‫ؿش‬ٛ٘ َٚ‫ سشسیت ا‬ٝ‫ ث‬ٚ‫ سبثغ س‬ٚ‫ش د‬ٞ ٓٞ‫سر دـز ػش‬ٛ‫ ك‬ٝ‫بیز ث‬ٟ٘ ‫ دس‬ٚ

int main(int argc, char *argv[])


{
QCoreApplication a(argc, argv);

Write(); //First step


Read(); //Second step

return a.exec();
}
ٝ‫ر و‬ٚ‫ فمظ ثب ایٗ سفب‬ٜ‫ ػبصی ؿذ‬ٜ‫ دیبد‬QDataStream ‫ذ‬ٙ٘‫ٕب‬ٞ ٖٛ‫سد الصْ ٘یؼز ؿ‬ٛٔ ٗ‫ضیلبر ثشای ای‬ٛ‫س‬
.ٓ‫ وشدی‬ٜ‫ اػشفبد‬QTextStream ‫ع ا٘للبسی‬ٛ٘ ‫اص‬

Qt :‫هعرفی اًَاع حالت ّای کاهپایل در‬: 35 ِ‫هرحل‬

:‫( تَضیح هختصر‬Dynamic) ‫در راتطِ تا حالت دایٌاهیک‬


‫ ا٘للبسی لبدس‬ٚ OpenSource ‫ كبِز‬ٚ‫ ٘شْ افضاس دس د‬ٝ‫ػؼ‬ٛ‫اسد ثشای س‬ٛٔ ‫دس ایٗ كبِز ؿٕب دس ثؼیبسی اص‬
.‫د‬ٛ‫یذ ث‬ٞ‫ا‬ٛ‫خ‬

:‫فی صیش اػز‬ٙٔ ٚ ‫ا٘ت ٔظجز‬ٛ‫ػ‬

:‫هسایا‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 136‬‬

‫‪ٔ ‬ؼٕ‪ٛ‬ال ثش٘بٔ‪ ٝ‬ثشای وبسثش ٘‪ٟ‬بیی یب ‪ٕٞ‬بٖ ‪ End user‬یه ثؼش‪ ٝ‬ػٕغ ‪ ٚ‬ػ‪ٛ‬س ‪ ٚ‬وبُٔ س‪ ٚ‬فشا‪ٔ ٓٞ‬یى‪ٙ‬یذ‬
‫‪ٕٞ ٚ‬ـ‪ٙ‬یٗ فبیُ اػشائی دس وٓ كؼٕششیٗ ‪ ٚ‬فـشد‪ ٜ‬سشیٗ كبِز خبسع خ‪ٛ‬ا‪ٞ‬ذ ؿذ‪.‬‬
‫‪ ‬وشبثخب٘‪ٞ ٝ‬بی ‪ Qt‬س‪ ٚ‬ؿٕب ٔیش‪٘ٛ‬یذ ثذ‪ ٖٚ‬سغییش ‪ ٚ‬وبٔذبیُ ٔؼذد دش‪ٚ‬ط‪ ٜ‬آٖ ‪ٞ‬ب سا ثشای س‪ٛ‬ػؼ‪ ٝ‬د‪ٙٞ‬ذٌبٖ‬
‫ثبصخ‪ٛ‬سد داد‪ ٚ ٜ‬یب ث‪ ٝ‬س‪ٚ‬ص سػب٘ی ٕ٘بییذ ‪ ٚ‬كشی آٖ ‪ٞ‬ب سا سغییش د‪ٞ‬یذ‪.‬‬
‫‪٘ ‬یبص ث‪ٙٔ ٝ‬بثغ ػخز افضاسی ثؼیبس وٕی ٔیجبؿذ ثشای ٔظبَ اؿغبَ كبفظ‪ Ram ٝ‬ثؼیبس وٕشش اص كبِز‬
‫‪ٔStatic‬یجبؿذ‪.‬‬

‫هعایة ‪:‬‬

‫‪ ‬ثشای ٔغٕئٗ ؿذٖ اص وبسائی دسػز ثش٘بٔ‪ ٝ‬دس ‪ٞ‬ش ػیؼشٓ ‪ٞ ٚ‬ش ػى‪ٛ‬یی ٘یبص اػز ثبس‪ٞ‬ب ‪ ٚ‬ثبس‪ٞ‬ب اص ‪ٞ‬ش‬
‫ػ‪ٛ‬ا٘جی ثش٘بٔ‪ ٝ‬س‪٘ ٚ‬ؼجز ث‪ ٝ‬وشبثخب٘‪ ٝ‬ثشسػی ٕ٘بییذ سب ‪ٚ‬لشی ٔ‪ٛ‬سد اػشفبد‪ ٜ‬س‪ٛ‬ػظ وبسثش یب ‪ٕٞ‬بٖ ‪End -‬‬
‫‪User‬لشاس ٔیٍیشد ثذ‪ ٖٚ‬ثش‪ٚ‬ص ٔـىُ یب خغبیی اػشا ؿ‪ٛ‬د ‪ٔ ,‬ؼٕ‪ٛ‬ال ثش س‪ٚ‬ی ػیؼشٓ ‪ٞ‬بی ‪٘ Linux‬یض‬
‫ثبیذ وشبثخب٘‪ٞ ٝ‬بی ث‪ ٝ‬دسػشی ٘لت ٌشدد‪.‬‬
‫‪ ‬ؿٕب ثبیذ ٔغٕئٗ ؿ‪ٛ‬یذ و‪ ٝ‬سٕبْ وشبثخب٘‪ٞ ٝ‬بی ٔ‪ٛ‬سد ٘یبص دس ػیؼشٓ ‪ٞ‬ذف )‪ (End User‬دس دػششع‬
‫‪ٞ‬ؼش‪ٙ‬ذ دس ك‪ٛ‬سسی و‪ ٝ‬ثش س‪ٚ‬ی ػیؼشٓ ٔ‪ٛ‬سد ٘ظش دس دػششع ٘یؼش‪ٙ‬ذ ثبیذ سا‪ ٜ‬كُ ٔ‪ٙ‬بػجی ثشای اسائ‪ٝ‬‬
‫وشبثخب٘‪ٞ ٝ‬بی ٔ‪ٛ‬سد ٘ظش فشا‪ٕ٘ ٓٞ‬بییذ ‪ ٚ‬خذٔبر آٖ سا دس اخشیبس وبسثش لشاس د‪ٞ‬یذ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 137‬‬

‫در راتطِ تا حالت استاتیک )‪ (Static‬تَضیح هختصر‪:‬‬


‫دس ایٗ كبِز ؿٕب ٔی س‪ٛ‬ا٘یذا ٔغٕئٗ ثبؿیذ و‪ ٝ‬ثش٘بٔ‪ ٝ‬ؿٕب دس ‪ٞ‬ش ػیؼشٕی ثذ‪٘ ٖٚ‬یبص ث‪ ٝ‬دیؾ ٘یبصی لبثُ اػشا‬
‫خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د‪.‬‬

‫ػ‪ٛ‬ا٘ت ٔظجز ‪ٙٔ ٚ‬فی صیش اػز‪:‬‬

‫هسایا‪:‬‬

‫‪ٔ ‬ؼٕ‪ٛ‬ال ثش٘بٔ‪ ٝ‬ثشای وبسثش ٘‪ٟ‬بیی یب ‪ٕٞ‬بٖ ‪ End user‬یه ثؼش‪ ٝ‬ػٕغ ‪ ٚ‬ػ‪ٛ‬س ‪ ٚ‬وبُٔ س‪ ٚ‬فشا‪ٔ ٓٞ‬یى‪ٙ‬یذ‪.‬‬
‫‪ ‬ثش٘بٔ‪ ٝ‬ؿٕب ٔیش‪ٛ‬ای‪ٙ‬ذ ٔؼشمُ اص ‪ٞ‬ش ٘ؼخ‪ ٝ‬اص وشبثخب٘‪ٞ ٝ‬بی ٔ‪ٛ‬ػ‪ٛ‬د ثش س‪ٚ‬ی ػیؼشٓ وبسثش ثش٘بٔ‪ ٝ‬س‪ ٚ‬اػشا‬
‫و‪ٙ‬یذ كبال ؿ‪ Qt4 ٝ‬ثبؿ‪ ٝ‬ؿ‪ Qt5.3.1 ٝ‬ثبؿ‪ٞ ٝ‬یؾ سذاخّی ٘خ‪ٛ‬ا‪ٞ‬ذ داؿز‪.‬‬
‫‪ ‬وٕی ػشیغ ٘ؼجز ثغ كبِز دای‪ٙ‬بٔیىی اػشا ٔیـ‪ٛ‬د و‪$ ٝ‬دس ‪ٞ CPU‬بی أش‪ٚ‬ص ؿٕب ث‪ ٝ‬ػخشی آٖ سا‬
‫ٔش‪ٛ‬ػ‪ ٝ‬خ‪ٛ‬ا‪ٞ‬یذ ؿذ(‬

‫هعایة‪:‬‬

‫‪ ‬دسخ‪ٛ‬اػز ‪ٞ‬بی ثش٘بٔ‪ ٝ‬ؿٕب ث‪ ٝ‬وشبثخب٘‪ ٝ‬ثؼیبس صیبد ‪ ٚ‬ػ‪ٍٙ‬یٗ خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د صیشا وشبثخب٘‪ٞ ٝ‬ب ٘یض ث‪ ٝ‬ثش٘بٔ‪ ٝ‬ؿٕب‬
‫ٔشلُ ‪ِ ٚ‬ی‪ٙ‬ه ؿذ‪ٞ ٜ‬ؼش‪ٙ‬ذ‪.‬‬
‫‪ٕٔ ‬ىٗ اػز ثشای سفغ ٔـىالر وشبثخب٘‪ ٚ ٝ‬سغییش ‪ /‬ث‪ ٝ‬س‪ٚ‬ص سػب٘ی ‪ٔ ... ٚ‬ؼج‪ٛ‬س ث‪ ٝ‬وبٔذبیُ ٔؼذد ثش٘بٔ‪ٝ‬‬
‫ؿ‪ٛ‬یذ‪.‬‬
‫‪ٔ ‬لشف ٔ‪ٙ‬جغ ‪ Ram‬دس ك‪ٛ‬سر دسخ‪ٛ‬اػز ‪ٞ‬بی دی دس دی ‪ ٚ‬ؿ‪ٙ‬ذ ٌب٘‪ ٝ‬ثؼیبس صیبد خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د‪.‬‬
‫‪ ‬دس كبِز ‪ Runtime‬ؿٕب لبدس ث‪ ٝ‬اػشای ‪ plugins‬س‪ٛ‬ػظ ‪٘ QPluginLoader‬خ‪ٛ‬ا‪ٞ‬یذ ث‪ٛ‬د‪.‬‬
‫‪ ‬وبٔذبیُ اػشبسیه ثذ‪ ٖٚ‬داؿشٗ ِیؼب٘غ ٔشث‪ٛ‬ع‪ ٝ‬اص عشف ‪ٔ Digia‬ؼبص ٘یؼز‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 138‬‬

‫هرحلِ ‪ً : 36‬حَُ افسٍدى دیگر کتاتخاًِ ّای ‪ C++‬در هحیط ‪ ٍ Qt Creator‬استفادُ‬


‫ّوراُ تا کتاتخاًِ‪Qt‬‬

‫للذ داسْ ٘ل‪ ٜٛ‬افض‪ٚ‬دٖ وشبثخب٘‪ٞ ٝ‬بی دیٍ‪ ٝ‬س‪ ٚ‬دس ٔلیظ ‪ Qt‬س‪ٛ‬ضیق ثذْ ثب ایٗ س‪ٚ‬ؽ ؿٕب ٔیش‪٘ٛ‬یذ ‪ٞ‬ش وشبثخب٘‪ٝ‬‬
‫ای س‪ٚ ٚ‬اسد دش‪ٚ‬ط‪ ٜ‬وشد‪ٕٞ ٚ ٜ‬شا‪ ٜ‬ثب وشبثخب٘‪ Qt ٝ‬اصؽ اػشفبد‪ ٜ‬و‪ٙ‬یذ ثشای ٔظبَ ٔٗ خ‪ٛ‬دْ ث‪ ٝ‬ؿخل‪ٕٞ ٝ‬یـ‪ ٝ‬ساثظ‬
‫وبسثشی س‪ ٚ‬ثب ‪ Qt‬عشاكی ٔیى‪ ٚ ٓٙ‬ثشای ثش٘بٔ‪ٛ٘ ٝ‬یؼی اكّی اص وشبثخب٘‪ٞ ٝ‬بی اػشب٘ذاسد ‪ ٚ C++‬یب دیٍش‬
‫وشبثخب٘‪ٞ ٝ‬بی اخشلبكی ٔظُ ‪ Poco ٚ Boost‬اػشفبد‪ٔ ٜ‬یى‪.ٓٙ‬‬

‫دس ایٗ آٔ‪ٛ‬صؽ ٔٗ ٘ل‪ٚ ٜٛ‬اسد وشدٖ وشبثخب٘‪ Poco ٝ‬س‪ ٚ‬ثشاس‪ ٖٛ‬س‪ٛ‬ضیق ٔیذْ‪.‬‬

‫صثبٖ ‪C/C++‬یىی اص لبثّیز ‪ٞ‬بیی و‪٘ ٝ‬ؼجز ث‪ ٝ‬صثبٖ ‪ٞ‬بی دیٍشی ٔب٘‪ٙ‬ذ ‪C#‬یب غیش‪ ٜ‬داس‪٘ ٜ‬بٔلذ‪ٚ‬د ث‪ٛ‬دٖ‬
‫اػشفبد‪ ٜ‬اص وشبثخب٘‪ٞ ٝ‬بی ایٗ صثبٖ ‪ٞ‬ؼز و‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر دیـفشم وشبثخب٘‪ٞ ٝ‬بی اػشب٘ذاسد ‪ ٚ‬اص لجُ سؼشیف ؿذ‪ ٜ‬دس‬
‫صثبٖ ‪ C++‬لبثُ اػشفبد‪ٞ ٜ‬ؼش‪ٙ‬ذ ٔب٘‪ٙ‬ذ والع ‪ٞ‬بی ‪ ... ٚ iostream‬و‪ ٝ‬وبٔال دیـفشم س‪ٚ‬ص ایٗ صثبٖ اسائ‪ٝ‬‬
‫ؿذ‪ ٜ‬اػز‪.‬‬

‫اال دس ساثغ‪ ٝ‬ثب ایٗ ٔ‪ٛ‬ض‪ٛ‬ع ثبیذ س‪ٛ‬ضیلی ثذْ و‪ ٝ‬اٌش ثش٘بٔ‪ٛ٘ ٝ‬یغ یب س‪ٛ‬ػؼ‪ ٝ‬د‪ٙٞ‬ذ‪ ٜ‬ای ٘یبصٔ‪ٙ‬ذ اػشفبد‪ ٜ‬اص وشبثخب٘‪ٝ‬‬
‫ای ٔ‪ٙ‬للشثفشد س‪ ٚ‬داس‪ٔ ٜ‬یش‪ ٝ٘ٛ‬ا‪ ٖٚ‬س‪ ٚ‬ث‪ ٝ‬صثبٖ ‪ C++‬اضبف‪ ٝ‬و‪ ٚ ٝٙ‬اصؽ اػشفبد‪ ٜ‬و‪ ٝٙ‬ثشای ٔظبَ ٔٗ ثشای وبس ثب‬
‫ؿجى‪ ٚ ٝ‬ای‪ٙ‬شش٘ز وشبثخب٘‪ POCO ٝ‬س‪ ٚ‬سشػیق ٔیذْ دغ ثشای اػشفبد‪ ٜ‬اص ایٗ اثشذا ثبیذ دیىشث‪ٙ‬ذی ‪ ٚ‬آٔبد‪ ٜ‬ػبصی‬
‫الصْ س‪ ٚ‬ا٘ؼبْ ثذْ ث‪ ٝ‬ك‪ٛ‬سر صیش ػُٕ ٔیى‪.ٓٙ‬‬

‫اثشذا وشبثخب٘‪ ٝ‬س‪ ٚ‬داّ٘‪ٛ‬د ٔیى‪ ٚ ٓٙ‬دس ٔؼیش ٔمبثُ ث‪ ٝ‬ك‪ٛ‬سر دِخ‪ٛ‬ا‪ ٜ‬لشاس ٔیذْ( ‪ٗٔ : C:\poco-1.5.3-all‬‬
‫أش‪ٚ‬ص دس ٔلیظ ‪ٚ‬ی‪ٙ‬ذ‪ٚ‬ص ‪ٞ‬ؼشٓ ثشای ‪ٕٞ‬یٗ س‪ٚ‬ی ‪ٚ‬ی‪ٙ‬ذ‪ٚ‬ص ایٗ س‪ ٚ‬س‪ٛ‬ضیق ٔیذْ س‪ٛ‬ضیلبر دلیمب س‪ٚ‬ی ٔلیظ‬
‫‪ ٓٞ Linux‬كذق ٔیى‪ ٝٙ‬سفب‪ٚ‬ر ؿ‪ٙ‬ذا٘ی ٘ذاس‪ ٜ‬فمظ ثبیذ وشبثخب٘‪ ٝ‬س‪ ٚ‬اص لجُ وبٔذبیُ وشد‪ ٜ‬ثبؿیذ(‬

‫لجُ اص ‪ٞ‬ش ؿیضی ثبیذ ثذ‪٘ٚ‬یذ و‪ٞ ٝ‬ش وشبثخب٘‪ ٝ‬داسای ‪ٞ include ٚ libs‬ؼشؾ ‪ٞ‬ش ٘‪ٛ‬ع وشبثخب٘‪ ٝ‬ای و‪ ٝ‬داّ٘‪ٛ‬د‬
‫و‪ٙ‬یذ ایٗ د‪ ٚ‬سب ٌضی‪ ٝٙ‬س‪ ٚ‬ثبیذ داؿش‪ ٝ‬ثبؿ‪ ٝ‬و‪ ٝ‬ثؼذ اص وبٔذبیُ وشبثخب٘‪ ٝ‬فبیُ ‪ٞ dll ٚ lib‬بؽ دس ‪ٚ‬ی‪ٙ‬ذ‪ٚ‬ص یب‬
‫‪Linux‬ایؼبد خ‪ٛ‬ا‪ٞ‬ذ ؿذ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 139‬‬

‫ٔٗ ث‪ ٝ‬دِیُ دیـیذ‪ ٜ‬ث‪ٛ‬دٖ وشبثخب٘‪ POCO (ٝ‬د‪ٛ‬و‪ #ٛ‬س‪ ٚ‬ا٘شخبة وشدْ ؿ‪ ٖٛ‬ؿبُٔ وشبثخب٘‪ٞ ٝ‬بی ٔشث‪ٛ‬ط ث‪Net ٝ‬‬
‫‪ٞ ... ٚ‬ؼشؾ و‪ ٝ‬ثشای آٔ‪ٛ‬صؽ ‪ٞ‬ذف ٔٗ وبس ثب ‪ٞ Net‬ؼز ث‪ٙ‬بثشایٗ د‪ٛ‬ؿ‪ٞ ٝ‬بی ‪ libs ٚ include‬دس و‪ٙ‬بس ‪ٓٞ‬‬
‫٘خ‪ٛ‬ا‪ٙٞ‬ذ ث‪ٛ‬د ِزا ‪ٔ include‬شث‪ٛ‬ط ث‪ٞ ٝ‬ش وشبثخب٘‪ ٝ‬دس داخُ خ‪ٛ‬دؽ لشاس ٌشفش‪.ٝ‬‬

‫خت ثشیٓ ػش اكُ ٔغّت اثشذا ی‪ ٝ‬دش‪ٚ‬ط‪ ٜ‬ای ایؼبد ٔیى‪ ٓٙ‬ثب ٘بْ ‪ MyLibs‬اص ‪ٞ‬ش ٘‪ٛ‬ػی ایؼبد ٔیى‪ٙ‬یذ ٔ‪٘ ٟٓ‬یؼز‪.‬‬

‫س‪ٚ‬ی دش‪ٚ‬ط‪ ٜ‬عجك سل‪ٛ‬یش ساػز وّیه و‪ٙ‬یذ ‪ٌ ٚ‬ضی‪ Add library ٝٙ‬س‪ ٚ‬ثض٘یذ‪.‬‬

‫٘ؼش‪ ٜ‬صیش ٕ٘بیٗ ٔیـ‪ ٝ‬و‪ ٝ‬ؿبُٔ ٌضی‪ٞ ٝٙ‬بی صیش ‪ٞ‬ؼشؾ‪:‬‬
‫ثؼذ ح‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 140‬‬

‫ٌضی‪ٔ Internal Library ٝٙ‬شث‪ٛ‬ط ‪ٞ‬ؼز ثشای صٔب٘ی و‪ ٝ‬ؿٕب وشبثخب٘‪ ٝ‬س‪ ٚ‬دس داخُ دش‪ٚ‬ط‪ ٜ‬خ‪ٛ‬دس‪ ٖٛ‬ایؼبد‬
‫وشدیٗ و‪ٔ ٝ‬ؼٕ‪ٛ‬ال ٔؼیش ‪ٚ‬الغ س‪ٛ‬ػظ فبیُ ‪ٔ .pro‬ـخق خ‪ٛ‬ا‪ٞ‬ذ ؿذ ث‪ ٝ‬ع‪ٛ‬س وّی وشبثخب٘‪ٞ ٝ‬بی داخّی ‪ ٚ‬غیش‬
‫‪External‬س‪ٔ ٚ‬یش‪٘ٛ‬یذ اص ایٗ لؼٕز ؿ‪ٙ‬بػبیی و‪ٙ‬یذ‪.‬‬

‫ٌضی‪ External library ٝٙ‬اص ایٗ ٌضی‪ ٝٙ‬صٔب٘ی اػشفبد‪ٔ ٜ‬یـ‪ ٝ‬و‪ ٝ‬وشبثخب٘‪ٔ ٝ‬ب دس ٔؼیش دش‪ٚ‬ط‪ٔ ٜ‬ب ٘یؼشؾ یب ث‪ٝ‬‬
‫ع‪ٛ‬س وّی دس داخُ دش‪ٚ‬ط‪ٔ ٜ‬ب لشاس ٍ٘شفش‪ ٝ‬دلیمب ثشػىغ ٌضی‪ ٝٙ‬ا‪ َٚ‬و‪ٔ ٝ‬یـ‪ ٖٕٛٞ ٝ‬وشبثخب٘‪ ٝ‬خبسػی یب خبسع اص‬
‫دش‪ٚ‬ط‪.ٜ‬‬

‫ٌضی‪ٔ ٓٞ System library ٝٙ‬شث‪ٛ‬ط ٔیـ‪ ٝ‬ث‪ ٝ‬وشبثخب٘‪ٞ ٝ‬بی ػیؼشٕی ‪ٞ‬ؼشؾ‪.‬‬

‫‪ ٚ‬یه ٌضی‪ ٝٙ‬ای ‪ ٓٞ‬خ‪ٛ‬ا‪ٞ‬یٓ داؿز دس ٔلیظ ‪ٞ‬بی ‪ Unix‬و‪ ٝ‬ث‪٘ ٝ‬بْ ‪ Package Library‬لبثُ ٔـب‪ٞ‬ذ‪ٜ‬‬
‫خ‪ٛ‬ا‪ٞ‬ذ ث‪ٛ‬د ایٗ ٌضی‪ ٓٞ ٝٙ‬صٔب٘ی ٔ‪ٛ‬سد اػشفبد‪ ٜ‬لشاس ٔیٍیش‪ ٜ‬و‪ ٝ‬ؿٕب ٘یبص داسیذ وشبثخب٘‪ ٝ‬س‪ ٚ‬اص عشیك ػش‪ٚ‬یغ‬
‫‪pkg-config‬دس ایؼشٍب‪ٞ ٜ‬بی ‪ Unix‬و‪ ٝ‬ؿبُٔ ‪ٞ Linux ٚ Mac OS X‬ؼشؾ س‪ٙ‬ظیٓ و‪ٙ‬یذ‪.‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 141‬‬

‫كبال ٔب ثب ایٗ ‪ٞ‬ب وبسی ٘ذاسیٓ ‪ ٚ‬دس اػشب٘ذاسد سشیٗ كبِز اص ‪ External Library‬اػشفبد‪ ٜ‬خ‪ٛ‬ا‪ٞ‬یٓ وشد‬
‫ث‪ٙ‬بثشایٗ ٌضی‪ External Library ٝٙ‬س‪ ٚ‬ا٘شخبة ‪ٔ Next ٚ‬یض٘یٓ‪.‬‬

‫خت دس ایٗ لؼٕز ٔب ٌضی‪ٞ ٝٙ‬بیی داسیٓ و‪ٔ ٝ‬شث‪ٛ‬ط ث‪ ٝ‬دیىشث‪ٙ‬ذی ‪ٔ ٚ‬ـخق وشدٖ ٔؼیش وشبثخب٘‪ ٝ‬ای ‪ٞ‬ؼشؾ و‪ٝ‬‬
‫اص لجُ وبٔذبیُ ‪ ٚ‬خش‪ٚ‬ػی ‪ٞ‬بی ‪ ٚ lib‬یب ‪ dll‬ا‪ٔ ٖٚ‬ـخق ؿذ‪ ٜ‬اػز‪.‬‬

‫ث‪ٙ‬بثشایٗ ٌضی‪ٞ ٝٙ‬ب ‪ٚ‬ظبیف صیش س‪ ٚ‬داس٘ذ‪:‬‬

‫ٌضی‪ٔ Library file ٝٙ‬شث‪ٛ‬ط ‪ٞ‬ؼز ث‪ٔ ٝ‬ؼیش فبیُ ‪ٞ‬بی ٔشث‪ٛ‬ط ث‪ٛٔ libs ٝ‬ػ‪ٛ‬د دس وشبثخب٘‪ ٝ‬ثشای ٔظبَ ٔؼیش ‪lib‬‬
‫ثشای وشبثخب٘‪ Poco ٝ‬دس ایؼشٍب‪ٚ ٜ‬ی‪ٙ‬ذ‪ٚ‬صی ٔٗ ‪ٞ‬ؼشؾ‪C:\poco-:‬‬

‫‪ 1.5.3-all\lib‬دغ س‪ٚ‬ی ٌضی‪ Browse ٝٙ‬وّیه وشد‪ ٚ ٜ‬ایٗ ٔؼیش س‪ ٚ‬ثب ا٘شخبة فبیُ ٔ‪ٛ‬سد ٘ظشْ ٔظال‬
‫‪ٔPocoNetd.lib‬ـخق ٔیى‪ ٓٙ‬دس ٘‪ٟ‬بیز ٔؼیش ٔیـ‪ ٝ‬ث‪ ٝ‬ك‪ٛ‬سر‪C:\poco-:‬‬

‫‪1.5.3-all\lib\PocoNetd.lib‬‬
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 142‬‬

‫ٌضی‪ٔ Include path ٝٙ‬شث‪ٛ‬ط ‪ٞ‬ؼشؾ ث‪ ٝ‬د‪ٛ‬ؿ‪ٔ Include ٝ‬شث‪ٛ‬ط ث‪ ٝ‬وشبثخب٘‪ ٝ‬و‪ ٝ‬ؿبُٔ فبیُ ‪ٞ‬بی ‪ .h‬یب‬
‫‪ٞ ٖٕٛٞ‬ذس ‪ٞ‬بػز ث‪ٙ‬بثشایٗ ثشای ای‪ٙ‬ى‪ٔ Include ٝ‬شث‪ٛ‬ط ث‪ ٝ‬والع ‪ٞ‬بی ‪ Net‬س‪ ٚ‬ا٘شخبة و‪ٔ ٓٙ‬یشْ ث‪ٔ ٝ‬ؼیش ‪:‬‬
‫‪C:\poco-1.5.3-all\Net\include‬و‪ ٝ‬ؿبُٔ ‪ٞ Include‬بی ٔـخق ثشای فبیُ ‪ٞ Net‬ؼز‪.‬‬

‫ٌضی‪ٔ Platforms ٝٙ‬ـخق و‪ٙٙ‬ذ‪ٔ ٜ‬ؼیش دس فبیُ ‪ .pro‬ثشای ٘‪ٛ‬ع ػیؼشٓ ػبُٔ ‪ٞ‬ؼشؾ‪.‬‬

‫ٌضی‪ٔ Linkage - Dynamic ٝٙ‬ـخق و‪ٙٙ‬ذ‪ ٜ‬وشبثخب٘‪ ٝ‬اص ٘‪ٛ‬ع ‪ Dynamic‬یب ‪ٌ ٚ Static‬ضی‪ٝٙ‬‬
‫‪ٞFramework‬ؼشؾ‪.‬‬

‫‪ ٚ‬دس آخش ٌضی‪ ٝٙ‬ای داسیٓ و‪ٔ ٝ‬خشق ‪ٚ‬ی‪ٙ‬ذ‪ٚ‬ص ‪ٞ‬ؼز‪.‬‬

‫س‪ٙ‬ظیٕبر س‪ ٚ‬ث‪ ٝ‬ك‪ٛ‬سر صیش ا٘ؼبْ ٔیذیٓ ‪ Next ٚ‬س‪ٔ ٚ‬یض٘یٓ‪.‬‬

‫‪ ٚ‬دس ٘‪ٟ‬بیز ‪ ٚ Finished‬ػذغ دس داخُ فبیُ ‪ .pro‬وذ ‪ٞ‬بی صیش س‪ ٚ‬خ‪ٛ‬ا‪ٞ‬یٓ دیذ‪.‬‬

‫‪win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../poco-‬‬


‫‪1.5.3-all/lib/ -lPocoNet‬‬
‫ با کیوتی‬c + + ‫آموزش‬ | P a g e 143

else:win32:CONFIG(debug, debug|release): LIBS += -


L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoNetd
else:unix: LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoNet

INCLUDEPATH += $$PWD/../../../../../poco-1.5.3-all/Net/include
DEPENDPATH += $$PWD/../../../../../poco-1.5.3-all/Net/include
ْ‫ ٘ب‬ٝ‫سد ٘ظش دیؾ ٘یبصی داسیٓ ث‬ٛٔ ‫ اص والع‬ٜ‫ ثشای اػشفبد‬Poco ‫ٖ دس‬ٛ‫ِی ؿ‬ٚ ‫ؼشؾ‬ٞ ٜ‫ ٔٗ آٔبد‬ٝ٘‫وشبثخب‬
‫سر صیش‬ٛ‫ ك‬ٝ‫بیز ث‬ٟ٘ ‫ دس‬ٝ‫یٓ و‬ٙ‫ و‬ٝ‫ ٌفشٓ اضبف‬ٝ‫ؿی و‬ٚ‫ٓ ثبیذ عجك س‬ٞ ٚ‫ س‬ٝٙ‫ٖ ٌضی‬ٚ‫دغ ا‬Foundation
:‫د‬ٛ‫ذ ث‬ٞ‫ا‬ٛ‫خ‬

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../poco-


1.5.3-all/lib/ -lPocoNet
else:win32:CONFIG(debug, debug|release): LIBS += -
L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoNetd
else:unix: LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoNet

INCLUDEPATH += $$PWD/../../../../../poco-1.5.3-all/Net/include
DEPENDPATH += $$PWD/../../../../../poco-1.5.3-all/Net/include

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../poco-


1.5.3-all/lib/ -lPocoFoundation
else:win32:CONFIG(debug, debug|release): LIBS += -
L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoFoundationd
else:unix: LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -
lPocoFoundation

INCLUDEPATH += $$PWD/../../../../../poco-1.5.3-all/Foundation/include
DEPENDPATH += $$PWD/../../../../../poco-1.5.3-all/Foundation/include

ٜ‫ط‬ٚ‫یٓ سب دش‬ٙ‫ وّیه ٔیى‬Run qmake ‫ ثؼذ‬ٚ build ٝٙ‫ی ٌضی‬ٚ‫ س‬ٚ ٜ‫ وشد‬Save ٚ‫ س‬.pro ُ‫خت كبال فبی‬
.‫د‬ٛ‫ ؿ‬ٜ‫ آٔبد‬ٚ ‫ذی‬ٙ‫ ؿذ دیىشث‬ٜ‫ داد‬ٝ‫ثب سغییشاسی و‬

: ‫ؼشؾ‬ٞ ٜ‫ اػشفبد‬ٚ ‫ٖ ٔـىُ لبثُ دػششػی‬ٚ‫ ثذ‬ٝ٘‫ وشبثخب‬ٚ ٓ‫یؼ‬ٛٙ‫ ٔی‬ٚ‫ثشای آصٔبیؾ وذ صیش س‬

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <Poco/Net/Net.h>
#include <Poco/Net/MailMessage.h>

using namespace Poco::Net;

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
‫‪ c + +‬با کیوتی‬ ‫آموزش‬ ‫‪| P a g e 144‬‬

‫)‪ui(new Ui::MainWindow‬‬
‫{‬
‫;)‪ui->setupUi(this‬‬

‫;‪MailMessage mail‬‬
‫}‬

‫)(‪MainWindow::~MainWindow‬‬
‫{‬
‫;‪delete ui‬‬
‫}‬
‫فمظ ثبصْ سبویذ ٔیى‪ٛ٘ ٓٙ‬ع وبٔذبیّشی و‪ ٝ‬وشبثخب٘‪ ٝ‬س‪ ٚ‬ثب‪ٞ‬بؽ وبٔذبیُ وشدیٗ خیّی ٔ‪ٔ ٕٟٝ‬ظال ٔٗ اص لجُ ایٗ‬
‫وشبثخب٘‪ ٝ‬س‪ ٚ‬ثب ‪٘ MSVC 2013‬ؼخ‪ 32 ٝ‬ثیز دس ٔذ ‪ Debug‬وبٔذبیُ وشدْ دغ دس ‪ ٓٞ Qt‬ثبیذ اص ٔذ‬
‫‪ ٚDebug‬وبٔذبیّش ‪ MSVC 2013‬ثب ٔؼٕبسی ‪ 32‬ثیز اػشفبد‪ ٜ‬و‪ٙ‬یذ‪.‬‬

‫٘‪ ٝ‬س‪ٟٙ‬ب ‪ ٗٔ Poco‬ایٗ ٔظبَ س‪ ٚ‬فمظ ثشای آٔ‪ٛ‬صؽ ٔشاكُ سؼشیف وشبثخب٘‪ ٝ‬صدْ ث‪ٙ‬بثشایٗ اص سٕبٔی وشبثخب٘‪ٞ ٝ‬ب ث‪ٝ‬‬
‫‪ٕٞ‬یٗ س‪ٚ‬ؽ ٔیش‪٘ٛ‬یذ اػشفبد‪ ٜ‬و‪ٙ‬یذ‪.‬‬

You might also like