Docstoc

كتاب تعلم Qt

Document Sample
كتاب تعلم Qt Powered By Docstoc
					                                   ‫ﻣﺪرﺳﺔ‬
                                  ‫++‪Qt/c‬‬
                                                         ‫اﻟﺪرس 1‬

                                        ‫ﺗﺬﻛﯿﺮ ﺑﺎﻟﻤﺒﺎدئ اﻷوﻟﯿﺔ ﻟﻠﺴﻲ++‬
        ‫ﻓﻲ اﻟﺪرس 1 إن ﺷﺎء اﷲ ﺳﻨﺘﻄﺮق إﻟﻰ ﻣﺒﺎدئ اﻟﺴﻲ++ اﻷوﻟﯿﺔ ﻟﻠﻤﺮاﺟﻌﺔ ﺛﻢ ﻧﻨﺘﻘﻞ ﻣﺒﺎﺷﺮة ﻟﻠﺒﺮﻣﺠﺔ ﺑﺎﻟﻮاﺟﮭﺔ و ھﻮ ﻧﻈﺮي ﻓﻘﻂ‬

                                              ‫اﻵن ﺳﻨﺘﺤﺪث ﻗﻠﯿﻼ ﻋﻦ اﻟﻤﻜﺘﺒﺎت ﺑﺴﻲ++‬
  ‫ﻓﺎﻟﻤﻜﺘﺒﺎت ﺑﺴﻲ++ ھﻲ ﻋﺒﺎرة ﻋﻦ ﻣﻠﻔﺎت ذات ﺻﯿﻐﺔ ‪ .h‬ﺗﺤﺘﻮي ھﺬه اﻟﻤﻜﺘﺒﺎت ﻋﻠﻰ أﻛﻮاد ﻛﺜﯿﺮة و ﻋﺪﯾﺪة ﻣﺒﺮﻣﺠﺔ ﺑﺴﻲ++ و ﺗﻮﻓﺮ ﻋﻠﯿﻨﺎ ھﺬه‬
    ‫اﻟﻤﻜﺘﺒﺎت ﻋﻨﺎء ﻛﺘﺎﺑﺔ اﻷﻛﻮاد ﻣﻦ اﻟﺼﻔﺮ ﺣﯿﺚ ﯾﻜﻔﻲ اﺳﺘﺪﻋﺎء اﻟﻤﻜﺘﺒﺎت و اﺳﺘﻌﻤﺎل اﻷﻛﻮاد اﻟﻤﺒﺮﻣﺠﺔ ﺑﮭﺎ و ﯾﺘﻢ اﺳﺘﺪﻋﺎء ھﺬه اﻟﻤﻜﺘﺒﺎت ﻋﺒﺮ:‬
                                                      ‫>‪#include <library‬‬
                                                  ‫ﺣﯿﺚ ﻧﻌﻮض ‪ library‬ﺑﺈﺳﻢ اﻟﻤﻜﺘﺒﺔ‬
                      ‫و ھﺬه اﻟﻤﻜﺘﺒﺎت ﻣﺘﻮاﺟﺪة داﺧﻞ اﻟﻤﺘﺮﺟﻢ ﺣﯿﺚ ﯾﻜﻔﻲ ﺗﺤﻤﯿﻞ اﻟﻤﺘﺮﺟﻢ و اﺳﺘﺪﻋﺎء اﻟﻤﻜﺘﺒﺎت ﻣﻦ ﺧﻼﻟﮫ‬
                                        ‫و أول أﻣﺮ ﺳﻨﺘﻌﺮف ﻋﻠﯿﮫ ھﻮ ‪ cout‬و ھﻮ ﻟﻄﺒﺎﻋﺔ ﺟﻤﻠﺔ‬
‫;"‪cout<<"texte‬‬

   ‫ﺣﯿﺚ ﻧﻌﻮض ‪ texte‬ﺑﺎﻟﻨﺺ اﻟﺬي ﻧﻮد ﻃﺒﺎﻋﺘﮫ و ھﺬا اﻷﻣﺮ ﯾﻮﺟﺪ ﺑﻤﻜﺘﺒﺔ ‪ ، iostream‬إذن ﯾﺠﺐ أن ﻧﺴﺘﺪﻋﻲ ھﺬه اﻟﻤﻜﺘﺒﺔ ﻗﺒﻞ إﺳﺘﻌﻤﺎل اﻷﻣﺮ‬
                                                        ‫أي ﯾﺠﺐ وﺿﻊ ﻋﺒﺎرة‬
‫>‪#include <iostream‬‬
                           ‫ﻟﻦ ﻧﺘﺤﺪث ﻋﻦ أول ﺑﺮﻧﺎﻣﺞ ﻟﻨﺎ ﺑﺸﺎﺷﺔ ‪ dos‬ﻷﻧﻨﺎ ﻟﻦ ﻧﺤﺘﺎﺟﮫ إﻻ ﻗﻠﯿﻼ ﻟﻜﻦ ﻻ ﺑﺄس ﺑﻮﺿﻌﮫ:‬
‫‪ iostream‬إﺳﺘﺪﻋﺎء ﻣﻜﺘﺒﺔ//>‪#include <iostream‬‬
‫ﻓﻀﺎء اﻷﺳﻤﺎء//;‪using namespace std‬‬
‫اﻟﺴﺪاﻟﺔ اﻟﺮﺋﯿﺴﯿﺔ//)( ‪int main‬‬
‫ﺑﺪاﯾﺔ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﯿﺔ//{‬
‫ﻃﺒﺎﻋﺔ اﻟﺠﻤﻠﺔ//;"‪cout<<"hello world‬‬
‫وﻗﻒ اﻟﺸﺎﺷﺔ ﻋﻨﺪ اﻟﻮﺻﻮل إﻟﻰ ھﺬا اﻷﻣﺮ//;)(‪getchar‬‬
‫}‬

‫;‪using namespace std‬‬
                                                     ‫و ﻣﮭﻤﺘﮫ اﻷﺳﺎﺳﻲ ﺗﺘﺠﻠﻰ ﻓﻲ:‬
                                 ‫إذا ﻛﺘﺒﻨﺎ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺪون ﻛﺘﺎﺑﺔ ﻋﺒﺎرة;‪using namespace std‬‬
                                         ‫ﺳﯿﻜﻮن ھﻨﺎك ﺧﻠﻞ ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ و ھﻮ أﻧﻨﺎ ﻧﺤﺘﺎج ﻟﻜﺘﺎﺑﺔ‬
                                                   ‫;"‪std::cout<<"hamza‬‬
                                                    ‫;"ﺑﺪل;"‪cout<<"hamza‬‬
                       ‫ﻟﻜﻦ ﺑﻮاﺳﻄﺔ ;‪ using namespace std‬ﻻ ﻧﺤﺘﺎج ﻟﻜﺘﺎﺑﺔ ‪ std‬ﻓﻲ ﺑﺪاﯾﺔ ﻛﻞ أﻣﺮ ﺑﺮﻣﺠﻲ‬
                                       ‫ﻛﻞ ﻣﺎ ﯾﮭﻤﻨﻲ ﻓﻲ اﻟﻜﻮد ھﻮ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﯿﺔ ﻛﯿﻔﯿﺔ ﺗﻌﺮﯾﻔﮭﺎ‬

                                                       ‫}....{)(‪int main‬‬

                                                   ‫و أن ﻛﻞ أﻣﺮ ﯾﺠﺐ أن ﯾﻨﺘﮭﻲ ب;‬
                                                    ‫ﺳﻨﻨﺘﻘﻞ إﻟﻰ ﺗﻌﺮﯾﻒ اﻟﻤﺘﻐﯿﺮات‬
     ‫اﻟﻤﺘﻐﯿﺮات ھﻲ أﻣﺎﻛﻦ ﺗﺤﺠﺰ ﻓﻲ اﻟﺬاﻛﺮة ‪ ram‬ﻟﺘﺨﺰﯾﻦ ﻓﯿﮭﺎ ﻣﻌﻠﻮﻣﺎت ﻣﺆﻗﺘﺔ ، و ﺗﻜﻮن ھﺬه اﻟﻤﻌﻠﻮﻣﺎت ﻋﺒﺎرة ﻋﻦ ﺟﻤﻞ أو أرﻗﺎم أو ﻛﻠﻤﺎت‬
                                             ‫و ﻧﻌﺮف اﻟﻤﺘﻐﯿﺮ ﻓﻲ ++‪ c‬ﻋﻠﻰ ھﺬا اﻟﺸﻜﻞ:‬

‫;‪type nom=vv‬‬
‫ﻧﻮع اﻟﻤﺘﻐﯿﺮ ‪type : type de variable‬‬
‫اﺳﻢ اﻟﻤﺘﻐﯿﺮ ﻣﮭﻤﺎ ﯾﻜﻦ اﺳﻤﮫ ﻣﺎ ﻋﺪى اﻟﻜﻠﻤﺎن اﻟﻤﺤﺠﻮزة : ‪nom‬‬
‫أو ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ ﯾﻤﻜﻦ أن ﺗﻜﻮن رﻗﻢ أو ﺣﺮف أو :‪vv‬‬
                                  ‫ﺑﻌﺾ اﻟﻜﻠﻤﺎت اﻟﻤﺤﺠﻮزة و اﻟﺘﻲ ﻻ ﯾﻨﺒﻐﻲ أن ﺗﻜﻮن أﺳﻤﺎء ﻟﻠﻤﺘﻐﯿﺮات‬
‫‪auto ,,,,, break ,,,,,, case ,,,,,, char ,,,,, const ,,,,, continue ,,,,, default ,,,,,,, do ,,,,,,,double‬‬
           ‫,,,,,,,,,,, ‪,,,,,,,, else,,,,,,,, enum ,,,,,,,,,,,, extern float,,,,,,,, for ,,,,,,, goto ,,,,,,,,,, if‬‬
     ‫‪int ,,,,,,,,,, long,,,,,,, register return ,,,,,,,,short,,,,,,,,,, signed ,,,,,,,,,,,,sizeof,,,,,,,,,,,, static‬‬
  ‫‪struct ,,,,,,,,switch ,,,,,,,,,,,,typedef,,,,,,,,,,,,,union ,,,,,,,,,,unsigned,,,,,,,,,, void volatile,,,,,,, while‬‬
                                                      ‫ﺑﻌﺾ أﻧﻮاع اﻟﻤﺘﻐﯿﺮات‬
                                          ‫ھﺬا اﻟﻨﻮع ﯾﺨﺘﺺ ﻟﺘﺨﺰﯾﻦ اﻷﻋﺪاد اﻟﺼﺤﯿﺤﺔ: ‪int‬‬
                                                         ‫.....4،3،2،1‬
                             ‫ھﺬا اﻟﻨﻮع ﻣﺨﺘﺺ ﻓﻲ ﺗﺨﺰﯾﻦ ﺟﻤﯿﻊ اﻷﻋﺪاد اﻟﺠﺬرﯾﺔ اﻟﺘﻲ ﺑﮭﺎ ﻓﺎﺻﻠﺔ: ‪double‬‬
                                                        ‫3.2 ،7.6 ، 5.1‬
                       ‫ھﺬا اﻟﻨﻮع ﯾﺴﺘﻌﻤﻞ ﻟﺘﺨﺰﯾﻦ اﻟﺤﺮوف و ﻧﺴﺘﻌﻤﻠﮫ ﻛﺠﺪول ﻣﻦ اﻟﺤﺮوف ﻟﺘﺨﺰﯾﻦ اﻟﻜﻠﻤﺎت : ‪char‬‬
                                                        ‫",=,‪h,hamza‬‬
                                         ‫ھﺬا اﻟﻨﻮع ﯾﺴﺘﻌﻤﻞ ﻟﺘﺨﺰﯾﻦ اﻷﻋﺪاد اﻟﻜﺒﯿﺮة : ‪long‬‬
                                                ‫444555551،1112222321‬


                          ‫اﻵن وﺻﻠﻨﺎ ﻟﻸﻣﺮ ‪ cin‬ھﺬا اﻷﻣﺮ ھﻮ اﻷﻣﺮ اﻟﻤﺨﺎﻟﻒ ﻟﻸﻣﺮ ‪ cout‬أي أﻧﮫ أﻣﺮ ﻟﻺدﺧﺎل‬
               ‫ﺣﯿﺚ ﻧﺴﺘﻌﻤﻞ ھﺬا اﻷﻣﺮ ﻣﻊ اﻟﻤﺘﻐﯿﺮات ﻓﯿﻘﻮم ﻣﺴﺘﺨﺪم اﻟﺒﺮﻧﺎﻣﺞ ﺑﺈﻋﻄﺎء ﻗﯿﻤﺔ ﻟﻠﻤﺘﻐﯿﺮ ﻋﺒﺮ اﻟﺒﺮﻧﺎﻣﺞ اﻟﻤﺒﺮﻣﺞ ﻣﺜﻞ‬
‫;‪int a‬‬
‫;‪cin>>a‬‬
     ‫ﺣﯿﺚ ﻓﻲ ھﺬا اﻟﺠﺰء ﻣﻦ اﻟﺒﺮﻧﺎﻣﺞ ﯾﺘﻮﻗﻒ ھﺬا اﻷﺧﯿﺮ ﻣﻨﺘﻈﺮا أن ﯾﺪﺧﻞ اﻟﻤﺴﺘﺨﺪم ﻗﯿﻤﺔ ﻟﻠﻤﺘﻐﯿﺮ ‪ a‬اﻟﺬي ھﻮ ﻣﻦ ﻧﻮع أﻋﺪاد ﺻﺤﯿﺤﺔ ﻃﺒﯿﻌﯿﺔ‬
   ‫ﻓﺈذا أدﺧﻞ اﻟﻤﺴﺘﺨﺪم ﻗﯿﻤﺔ ﻣﺨﺎﻟﻔﺔ ﻟﻌﺪد ﺻﺤﯿﺢ ﻃﺒﯿﻌﻲ ﻟﻦ ﯾﺸﺘﻐﻞ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺸﻜﻞ ﺟﯿﺪ و إذا أدﺧﻞ ﻗﯿﻤﺔ ﺻﺤﯿﺤﺔ ﻃﺒﯿﻌﯿﺔ ﺳﯿﻜﻤﻞ اﻟﺒﺮﻧﺎﻣﺞ ﻋﻤﻠﮫ‬
                                                             ‫ﺑﻨﺠﺎح‬
                            ‫ﻣﻼﺣﻈﺔ: اﻷﻣﺮ ‪ cin‬ﻣﻮﺟﻮد ﺑﻤﻜﺘﺒﺔ ‪ iostream‬ﻟﺬﻟﻚ وﺟﺐ اﺳﺘﺪﻋﺎﺋﮭﺎ ﻓﻲ اﻷول‬
                                                   ‫>‪include <iostream‬‬


‫اﻟﺤﻠﻘﺔ اﻟﺘﻜﺮارﯾﺔ ﺑﻜﻞ ﺑﺴﺎﻃﺔ ھﻲ أﻣﺮ ﻣﻦ أواﻣﺮ اﻟﺴﻲ++ ﯾﺠﻌﻠﻚ ﺗﻜﺮر ﻣﺮات ﻣﺤﺪدة ﻛﻮدا ﻣﻌﯿﻨﺎ ﯾﻌﻨﻲ أﻛﺮر ﻣﺜﻼ ﻛﻮدا ﻣﻌﯿﻨﺎ 4 ﻣﺮات أو 5 ﻣﺮات أو‬
                              ‫6 ﻣﺮات ﺣﺴﺐ إرادﺗﻲ . ﯾﻌﻨﻲ اﻟﺤﻠﻘﺔ اﻟﺘﻜﺮارﯾﺔ ﺗﺴﮭﻞ ﻋﻠﯿﻚ ﻣﺄﻣﻮرﯾﺔ اﻟﺒﺮﻣﺠﺔ‬
                                             ‫ﺗﺼﺎغ اﻟﺤﻠﻘﺔ اﻟﺘﻜﺮارﯾﺔ ﺑﺸﻜﻞ ﺳﮭﻞ و واﺿﺢ:‬
                                                   ‫)++‪for(int i=0;i<n;i‬‬
                                                                ‫{‬
                                                        ‫.........‪//code‬‬
                                                                ‫}‬

                                             ‫ﺣﯿﺚ ﺗﻜﺮر ‪ code‬ﻋﺪد اﻟﻤﺮات ﻣﻦ ‪ i‬إﻟﻰ ‪n‬‬

                                                       ‫ﻓﺈذا ﻛﺎن 01=‪ n‬ﻓﺄن‬

                                                        ‫01=0-01=‪n-i‬‬

                                             ‫أي أن اﻟﺒﺮﻧﺎﻣﺞ ﺳﯿﻜﺮر ﻣﺎ ﺑﺎﻟﻜﻮد 01 ﻣﺮات‬

               ‫ﺣﯿﺚ أن ﻓﻲ اﻟﻤﺮة اﻷوﻟﻰ 0=‪ i‬ﯾﻜﺮر اﻟﻜﻮد ﺛﻢ ﯾﻘﻮم ﺑﺰﯾﺎدة ‪ i‬درﺟﺔ واﺣﺪة ﻓﯿﺼﺒﺢ 1=‪ i‬و ھﻜﺬا إﻟﻰ أن ﯾﺼﻞ ‪i=n‬‬

                                                   ‫ﯾﻤﻜﻦ اﺳﺘﺒﺪال ‪ ++i‬ب 2=+‪i‬‬

                      ‫ﺣﯿﺚ ‪ i‬ﺗﺰﯾﺪ ﺑﺪرﺟﺘﯿﻦ ﻓﺈذا ﻛﺎن 0=‪ i‬و 01=‪ n‬و 2=+‪ i‬إن اﻟﺒﺮﻧﺎﻣﺞ ﺳﯿﻜﺮر اﻟﻜﻮد 5 ﻣﺮات ﻓﻘﻂ‬

  ‫ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺪوال ﻓﮭﻲ ﻋﺒﺎرة ﻋﻦ ﻃﺮﯾﻘﺔ ﻻﺧﺘﺼﺎر ﻛﻮد ﻛﺜﯿﺮ ﻓﻲ ﺳﻄﺮ واﺣﺪ ﻻﺳﺘﻌﻤﺎﻟﮭﺎ ﻛﻞ ﻣﺮة و ﺗﻜﺘﺐ ﺧﺎرج ‪ main‬ﺑﯿﻨﻤﺎ ﺗﺴﺘﻌﻤﻞ داﺧﻠﮭﺎ ﻏﺎﻟﺒﺎ‬
‫)‪type nom(parametre‬‬
‫{‬
‫ﻣﺎ ﺑﺪاﺧﻞ اﻟﺪاﻟﺔ//‬
‫}‬
‫.... ﻧﻮع اﻟﺪاﻟﺔ ﻋﺪد أو ﺣﺮف أو : ‪type‬‬
‫إﺳﻢ اﻟﺪاﻟﺔ : ‪nom‬‬
 ‫اﻟﻤﺴﺘﺨﺪم ﻋﻦ ﻃﺮﯾﻖ داﻟﺔ اﻹدﺧﺎل أو ﺗﺤﺪد داﺧﻞ اﻟﺒﺮﻧﺎﻣﺞ ﻣﺘﻐﯿﺮات ﺗﺮﺳﻠﮭﺎ اﻟﺪاﻟﺔ ﯾﺤﺪدھﺎ :‪parametre‬‬
‫;)‪ nom(parametre‬و ﻧﺴﺘﺪﻋﯿﮭﺎ ھﻜﺬا‬
                                     ‫و ﻟﻨﺴﺘﻌﻤﻞ اﻟﺪوال داﺧﻞ ‪ main‬أو داﻟﺔ أﺧﺮى ﺣﯿﺚ ﻣﺜﻼ:‬

                                                 ‫>‪#include <iostream‬‬

                                                ‫;‪using namespace std‬‬

                                                 ‫)‪void som(int a,int b‬‬

                                                              ‫{‬

                                                       ‫;‪cout<<a+b‬‬

                                                              ‫}‬

                                                        ‫)(‪int main‬‬

                                                              ‫{‬

                                                         ‫;5=‪int v‬‬

                                                         ‫;4=‪int g‬‬

                                                        ‫;)‪som(v,g‬‬

                                                              ‫}‬

                     ‫ﺣﯿﺚ أﻧﻨﺎ أﻧﺸﺌﻨﺎ داﻟﺔ ﻟﺠﻤﻊ ﻋﺪدﯾﻦ ﺣﯿﺚ أﻧﻨﺎ اﺳﺘﺪﻋﯿﻨﺎ داﻟﺔ )(‪ som‬و وﺿﻌﻨﺎ ‪ v‬و ‪ g‬ﺑﺪل ‪ a‬و ‪b‬‬




                                                        ‫اﻟﺪرس2‬

                                   ‫ﻋﺎﻟﻤﻨﺎ ﻧﺤﻮ اﻟﺒﺮﻣﺠﺔ ﺑﺎﻟﻮاﺟﮭﺔ ‪Qt‬ﻗﺪ ﺑﺪأ أول ﺑﺮﻧﺎﻣﺞ ﻟﻨﺎ ب ‪Qt‬‬

                                                        ‫ﻣﺎ ھﻲ ‪ Qt‬؟‬

‫‪Qt‬ھﻲ ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﻣﻜﺘﺒﺎت ﺳﻲ++ اﻟﺘﻲ إﺟﺘﻤﻌﺖ ﻟﺘﻐﻠﻒ دواﻟﮭﺎ ﻋﻠﻰ ﺷﻜﻞ ﻓﺮاﻣﻮرك ﺣﯿﺚ ﻧﺴﺘﻄﯿﻊ ﻣﻦ ﺧﻼل‬
‫ھﺬه اﻟﻤﻜﺘﺒﺔ اﻟﻀﺨﻤﺔ اﻟﺨﺎﺻﺔ ﺗﺼﻤﯿﻢ اﻟﻮاﺟﮭﺔ إﻋﺘﻤﺎدا ﻋﻠﻰ دوال ‪ Qt‬و ﻗﻮاﻧﯿﻦ و ﺳﺮﻋﺔ ++‪ c‬و ﺑﺈﻋﺘﺒﺎر ھﺬه اﻟﺨﯿﺮ ﻟﻐﺔ‬
                  ‫‪NATIVE‬ﻓﺈن إﺳﺘﻌﻤﺎل ‪ Qt‬ﺳﯿﻜﻮن ﻣﻦ أروع ﻣﺎ ﻧﻘﻮم ﺑﮫ ف ﻛﯿﻮﺗﻲ‪portable‬‬
                                               ‫ﻣﺎ ﻗﺼﺔ اﻟﺰوج ‪ c++/Qt‬؟‬

‫ﺑﺈﻋﺘﺒﺎر ﻛﯿﻮﺗﻲ ﻣﻜﺘﺒﺔ ﺿﺨﻤﺔ ﻓﺈﻧﮭﺎ ﻻ ﺗﺘﻌﺎﻣﻞ ﻓﻘﻂ ﻣﻊ اﻟﺴﻲ++ ﺑﻞ أﯾﻀﺎ ﻣﻊ اﻟﺒﺎﺳﻜﺎل و اﻟﺠﺎﻓﺎ و و ﻟﻜﻦ اﻟﺴﻲ++ ھﻲ اﻟﻠﻐﺔ‬
         ‫اﻷﻛﺜﺮ إﺳﺘﻌﻤﺎﻻ ﻟﻜﯿﻮﺗﻲ ﻹﻋﺘﺒﺎر ھﺬه اﻷﺧﯿﺮة ھﻲ اﻟﻌﻤﺎد اﻟﺬي ﺑﻨﯿﺖ ﻋﻠﻰ اﺳﺎﺳﮫ ‪ Qt‬ﻣﻦ ﻃﺮف‪nokia‬‬

                    ‫ھﻞ ﺳﻨﻌﻤﻞ ﺑـ ‪ codeblock‬و ‪ dev‬و ﻏﯿﺮھﺎ ﻣﻦ اﻟﻤﺘﺮﺟﻤﺎت اﻟﺒﺴﯿﻄﺔ ؟‬

 ‫ﻻ ﻟﻦ ﻧﻌﻤﻞ ﺑﮭﺎ ﻷﻧﮫ ‪ c++/Qt‬ﻟﮭﺎ ﻣﺘﺮﺟﻢ ﺧﺎص ﯾﺴﻤﻰ ‪ QtCreator‬ﻟﻜﻦ ﻣﻊ ذﻟﻚ ﯾﻮﺟﺪ ﻃﺮق ﻹﺳﺘﺨﺪام اﻟﻤﺘﺮﺟﻤﺎت‬
         ‫اﻟﺒﺴﯿﻄﺔ ﻟﺘﺮﺟﻤﺔ أﻛﻮاد ‪ c++/Qt‬ﻟﻜﻦ ﺳﺘﺠﺪ ﺻﻌﻮﺑﺔ ﻓﻲ ﻋﻤﻠﯿﺔ اﻟﺘﺮﺟﻤﺔ ﻟﺬﻟﻚ ﻣﻦ اﻷﻓﻀﻞ ﺗﺤﻤﯿﻠﮫ‬

              ‫.................................................................................................‬

                         ‫ﺳﻨﺤﺘﺎج ﻟﺪروﺳﻨﺎ ‪ Qt Creator‬و ﻟﺘﺤﻤﯿﻠﻪ:‬

                                                 ‫ﻷﺻﺤﺎب اﻟﻮﻧﺪوز: ھﻨﺎ‬

                                                  ‫ﻷﺻﺤﺎب اﻟﻠﯿﻨﻜﺲ:ھﻨﺎ‬

    ‫ذﻛﺮﻧﺎ أﻧﻨﺎ ﺳﻨﺴﺘﻌﻤﻞ اﻟﺒﺮﻣﺠﺔ اﻟﻜﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ ﻟﻜﻦ ﻟﯿﺲ اﻵن ﻓﯿﻤﺎااا ﺑﻌﺪ ﺳﻨﺴﺘﻌﻤﻞ اﻟﯿﻮم ﻓﻘﻂ ﻣﻠﻒ‪main.cpp‬‬

                                            ‫و ﻟﻔﻌﻞ ذﻟﻚ ﻧﻔﺘﺢ ‪Qt creator‬‬

                                               ‫‪2-creat project‬‬

                                               ‫‪3-other project‬‬

                                          ‫‪4-empty Qt project‬‬

                          ‫-5ﻧﻘﻮم ﺑﺎﻟﻀﻐﻂ ﺑﺎﻷﯾﻤﻦ ﻋﻠﻰ اﻹﻃﺎر اﻷﺑﯿﺾ اﻟﻔﺎرغ ﻋﻠﻰ اﻟﯿﺴﺎر‬

                                                   ‫‪6-add new‬‬

                                             ‫‪7-c++ source file‬‬

                                               ‫ﺳﯿﻈﮭﺮ ﻟﻨﺎ ﺣﻘﻞ ﻟﻠﻜﺘﺎﺑﺔ ﻓﺎرغ‬
 ‫أوﻻ ﺳﻨﻌﺮف أن ‪ Qt‬ﺗﺴﺨﺪم ﻛﺎﺋﻨﺎت ﻓﻲ ﻋﻤﻠﮭﺎ ﻣﺜﻼ ﻓﻲ ﺣﯿﺎﺗﻨﺎ اﻟﯿﻮﻣﯿﺔ ﻟﺪﯾﻨﺎ اﻟﻜﺮﺳﻲ ﻛﺎﺋﻦ و اﻟﻄﺎوﻟﺔ ﻛﺎﺋﻦ و و و ﻓﻜﯿﻮﺗﻲ‬
          ‫ﺗﺴﺘﺨﺪم ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻜﺎﺋﻨﺎت ﺳﻨﺴﺘﻌﻤﻞ ﻛﺎﺋﻦ اﻟﺰر و ھﻮ ﻹﻧﺸﺎء زر إﺳﻤﮫ‪QPushButton‬‬

                                               ‫ﻟﻨﻜﺘﺐ ﻣﺎ ﯾﻠﻲ ﻓﻲ اﻟﺤﻘﻞ‬

‫ﺗﻌﺮﻳﻒ اﻟﻤﻜﺘﺒﺔ اﻟﺮﺋﯿﺴﯿﺔ اﻟﺘﻲ ﻻﺑﺪ ﻣﻨﮫﺎ ﻓﻲ //>‪#include <QApplication‬‬
        ‫ﺗﺤﺘﻮي ﻋﻠﻰ اﻟﻜﺎﺋﻦ اﻟﺰر //>‪#include <QPushButton‬‬
          ‫ﺗﻌﺮﻳﻒ اﻟﺪاﻟﺔ// )][‪int main(int argc, char *argv‬‬
                      ‫ﻓﺘﺢ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﯿﺔ// {‬
   ‫ﺗﻌﺮﻳﻒ ﺗﻄﺒﯿﻖ ﺟﺪﻳﺪ ﻟﻠﻌﻤﻞ ﻋﻠﯿﻪ//;)‪QApplication app(argc, argv‬‬
     ‫ﺑﻜﺘﺎﺑﺔ ﺗﻌﺮﻳﻒ اﻟﻜﺎﺋﻦ و وﺿﻊ//;)"‪QPushButton name("salam‬‬
                    ‫اﻟﺰر إﻇﮫﺎر//;)(‪name.show‬‬
                ‫ﺗﻔﻌﯿﻞ اﻟﺘﻄﺒﯿﻖ//;)(‪return app.exec‬‬
                      ‫ﻏﻠﻖ اﻟﺪاﻟﺔ اﻟﺮﺋﯿﺴﯿﺔ//}‬
                                    ‫ﻛﻤﺎ ﻧﻼﺣﻆ ﯾﺘﻢ ﺗﻌﺮﯾﻒ اﻟﻜﺎﺋﻦ ﻋﻠﻰ ھﺬا اﻟﺸﻜﻞ‬
                 ‫;)‪typeobject nameobject(parametreobject‬‬
                    ‫ﺣﯿﺚ ‪ typeobject‬ھﻲ ﻧﻮع اﻟﻜﺎﺋﻦ ﻓﻲ ﻣﺜﺎﻟﻨﺎ اﻟﺴﺎﺑﻖ ﻛﺎن‪QPushButton‬‬
                   ‫‪nameobject‬ھﻮ إﺳﻢ اﻟﻜﺎﺋﻦ أﺳﻤﯿﻨﺎه ﻧﺤﻦ ‪ name‬ﯾﻤﻜﻦ أن ﻧﺴﻤﯿﮭﺎ ﻣﺎ ﻧﺸﺎء‬
‫‪parametreobject‬ھﻲ اﻟﺒﺎراﻣﯿﺘﺮات اﻟﺘﻲ درﺳﻨﺎھﺎ ﻓﻲ اﻟﺪوال ﯾﻌﻨﻲ ﻓﻲ ‪ QPushButton‬ﻟﺪﯾﻨﺎ ﻋﺬة ﺑﺎراﻣﯿﺘﺮات‬
‫ﻧﺨﺘﺎر ﻣﺎ ﻧﺸﺎء ﻣﻨﮭﺎ ﻛﻜﺘﺎﺑﺔ ﻓﻲ اﻟﺰر و ھﯿﺎﻟﺒﺎراﻣﯿﺘﺮ اﻷول و أي ﻧﺎﻓﺬة ﯾﻨﺘﻤﻲ إﻟﯿﮭﺎ و ھﻲ اﻟﺒﺎراﻣﺘﺮ اﻟﺜﺎﻧﻲ ﻧﺤﻦ ﻟﻢ ﻧﻘﻢ ﺑﻜﺘﺎﺑﺔ‬
  ‫اﻟﺒﺎراﻣﺘﺮ اﻟﺜﺎﻧﻲ ﻷﻧﻨﺎ ﻧﺴﺘﺨﺪم ‪ QApplication‬ﻣﺒﺎﺷﺮة و ﻟﯿﺴﺖ ﻧﺎﻓﺬة أم ك ‪ QWidget‬اﻟﺘﻲ ﺳﻨﺪرﺳﮭﺎ ﻓﻲ ﻣﺎ ﺑﻌﺪ‬
                                      ‫و ﻧﺘﯿﺠﺔ اﻟﻜﻮد اﻟﺴﺎﺑﻖ ھﻮ ﻧﺎﻓﺬة ﺑﮭﺎ زر ﻓﻘﻂ‬
                                                     ‫ﻛﮭﺬه اﻟﻨﺎﻓﺬة‬



                                ‫ﻟﻜﻦ ﻣﺎذا ﺑﺸﺄن اﻟﻨﺎﻓﺬة اﻟﻜﺒﯿﺮة ﺑﮭﺎ اﻟﻜﺜﯿﺮ ﻣﻦ اﻟﻤﻜﻮﻧﺎت‬




                                        ‫ھﺬا ﻣﺎ ﺳﻨﻌﺮف ﻓﻌﻠﮫ ﻓﻲ اﻟﺪرس اﻟﻘﺎدم‬




                                                   ‫اﻟﺪرس 3‬
                                    ‫‪ QWidget‬ﺧﺼﺎﺋﺼﮫ ، دواﻟﮫ ، و اﻟﻮراﺛﺔ‬
                                  ‫‪widget‬ھﻮ ﻛﻞ ﻛﺎﺋﻦ ﻟﮫ ﺗﺼﻤﯿﻢ ﺧﺎرﺟﻲ و وﻇﺎﺋﻒ ﯾﻤﺘﺎز ﺑﮭﺎ‬

                         ‫ﻛﺎﻷزرار ﻋﺒﺎرة ﻋﻦ ‪ widget‬ﺧﺎﺻﯿﺘﮭﺎ ھﻲ ﻋﻨﺪ اﻟﻀﻐﻂ ﻋﻠﯿﮭﺎ ﯾﺘﻢ ﺗﻔﻌﯿﻞ ﺷﻲء ﻣﺎ‬

                           ‫ﺣﻘﻞ اﻟﻨﺺ ﻋﺒﺎرة ﻋﻦ ‪ widget‬ﯾﻤﺘﺎز ﺑﺎﻟﻘﺪرة ﻋﻠﻰ اﻟﻜﺘﺎﺑﺔ ﺑﺪاﺧﻞ إﻟﻰ ﻏﯿﺮھﺎ‬

        ‫ﻓﻲ اﻟﺪرس اﻟﺴﺎﺑﻖ ﺗﻌﻠﻤﻨﺎ ﻛﯿﻔﯿﺔ إﻇﮭﺎر زر وﺣﺪه ﻟﻜﻦ ﻣﺎذا ﻋﻦ اﻟﺒﺮاﻣﺞ ذات اﻟﻨﻮاﻓﺬ اﻟﻜﺒﯿﺮة و اﻟﻜﺎﺋﻨﺎت اﻟﻤﺘﻌﺪدة و ﻏﯿﺮھﺎ‬



‫ﻻ ﻻ ﺗﻘﻠﻘﻮا ﻓﻜﻞ ھﺬا ﻣﺘﻮﻓﺮ ﻓﻲ ‪ Qt‬ﻓﺎﻟﻨﺎﻓﺬة ھﻞ ﻛﺎﺋﻦ ﻻ ﯾﻨﺘﻤﻲ ﻷي ﻛﺎﺋﻦ آﺧﺮ ﻣﺜﻼ اﻟﺰر ﯾﻨﺘﻤﻲ إﻟﻰ اﻟﻨﺎﻓﺬة ﻟﻜﻦ اﻟﻨﺎﻓﺬة ﺗﻨﺘﻤﻲ إﻟﻰ ﻧﻔﺴﮭﺎ ﻓﻘﻂ‬

      ‫و اﻟﻨﺎﻓﺬة ﻓﻲ ‪ Qt‬ھﻲ اﻟﻜﺎﺋﻦ ‪ QWidget‬ﻣﻊ ﻣﺮاﻋﺎت اﻟﺤﺮوف اﻟﻜﺒﯿﺮة و اﻟﺼﻐﯿﺮة ﻷن ﺳﻲ++ ﺣﺴﺎس ﻟﻤﺜﻞ ھﺬه اﻷﺷﯿﺎء‬

                                                       ‫ﯾﺘﻢ ﺗﻌﺮﯾﻔﮫ ھﻜﺬا‬

                                                  ‫;‪QWidget hamza‬‬

                                        ‫و ﻟﺘﻄﺒﯿﻖ ﺑﻌﺾ اﻟﺨﺼﺎﺋﺺ ﻋﻠﯿﮫ ھﺬه ھﻲ اﻟﺼﯿﻐﺔ‬

                                         ‫;)001,001(‪hamza.setFixedSize‬‬

                                                         ‫ﺑﺼﻔﺔ ﻋﺎﻣﺔ‬

                                              ‫;‪QWidget nomqwidget‬‬

                                        ‫;)‪nomqwidget.setFixedSize(x,y‬‬

                       ‫‪setFixedSize‬ھﻲ ﺧﺎﺻﯿﺔ ﻟﺤﺠﻢ اﻟﻨﺎﻓﺬة, ھﻨﺎك ﺧﺼﺎﺋﺺ أﺧﺮى ﻟﻜﻨﻨﺎ ﻻ ﻧﺤﺘﺎﺟﮭﺎ‬

                                                             ‫+‬

                             ‫ﻧﺤﺘﺎج أﯾﻀﺎ ھﺬه اﻟﻌﻼﻣﺔ ''&'' ﻟﻜﻲ ﻧﺒﯿﻦ أن ﻛﺎﺋﻨﺎ ﻣﺎ ﯾﻨﺘﻤﻲ إﻟﻰ ﻧﺎﻓﺬة ﻣﺎ‬

                                             ‫ﻣﺎ رأﯾﻜﻢ ﺑﺘﻄﺒﯿﻖ ﯾﺰﯾﻞ ﻋﻨﻜﻢ اﻟﻐﻤﻮض‬

                                                  ‫>‪#include <QtGui‬‬

                                             ‫>‪#include<QApplication‬‬

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

                                          ‫;)‪QApplication app(argc, argv‬‬


                                                  ‫;‪QWidget hamza‬‬

                                         ‫;)001,001(‪hamza.setFixedSize‬‬

                                     ‫;)‪QPushButton button("ici",&hamza‬‬

                                                     ‫;‪hamza.show‬‬

                                                   ‫;)(‪return app.exec‬‬

                                                              ‫}‬
                                   &hamza ‫ﻛﻤﺎ ﺗﻼﺣﻈﻮن ﻓﻲ اﻟﻤﺜﺎل وﺿﻌﻨﺎ‬
‫ و ﺑﻤﺎ أﻧﻨﺎ أﻇﮭﺮﻧﺎ اﻟﻨﺎﻓﺬة ﻓﺴﯿﻈﮭﺮ اﻟﺰر ﺑﺪاﺧﻠﮭﺎ ﻣﺒﺎﺷﺮة ﻷن اﻟﺰر ﯾﻨﺘﻤﻲ إﻟﻰ اﻟﻨﺎﻓﺬة‬hamza ‫ﯾﻌﻨﻲ أن اﻟﺰر ﯾﻨﺘﻤﻲ إﻟﻰ‬

                                              move‫اﻟﺨﺎﺻﯿﺔ‬

                                         #include <QtGui>

                                     #include<QApplication>

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

                                 QApplication app(argc, argv);


                                          QWidget hamza;

                                hamza.setFixedSize(100,100);

                            QPushButton button("ici",&hamza);

                                       button.move(50,50);

                                            hamza.show;

                                           return app.exec();

                                                     }

                            ‫ھﺬه اﻟﺨﺎﺻﯿﺔ ﺗﺴﻤﺢ ﻟﻨﺎ ﯾﺘﺤﺪﯾﺪ ﻣﻜﺎن اﻟﺰر داﺧﻞ اﻟﻨﺎﻓﺬة‬




                          ‫ﻣﺎاااا رأﯾﻜﻢ اﻵن ﺑﺎﻹﻧﺘﻘﺎل إﻟﻰ ﻃﻮر اﻟﺒﺮﻣﺠﺔ اﻟﻜﺎﺋﻨﯿﺔ اﻟﺘﻮﺟﮫ‬
                                         ‫ ﻣﺜﻼ‬mafenetre.h ‫ﻣﻠﻒ‬
                                              ‫ﯾﻜﻮن داﺋﻤﺎ ھﻜﺬا‬




                                 #ifndef DEF_NOMDECLASS

                                 #define DEF_NOMDECLASS

                                    #include <QApplication>

                                   #include <QPushButton>

                              class MaFenetre: public QWidget
                                 ‫{‬

                             ‫: ‪public‬‬

                         ‫;)(‪MaFenetre‬‬

                             ‫:‪private‬‬

                  ‫ﻧﻌﺮف اﻟﻜﺎﺋﻨﺎت ھﻨﺎ ﻋﻠﻰ ھﺬا اﻟﺸﻜﻞ‬

                   ‫‪QPushButton *hamza‬‬

                                 ‫;}‬

                              ‫‪#endif‬‬




                      ‫ﻣﻠﻒ‪mafenetre.cpp‬‬

                  ‫"‪#include "mafenetre.h‬‬

        ‫)( ‪MaFenetre:: MaFenetre () : QWidget‬‬

                                 ‫{‬

     ‫ھﻜﺬا ﺑﺎﻟﻨﺴﺒﺔ ﻟﺨﺼﺎﺋﺺ اﻟﻨﺎﻓﺬة اﻟﺮﺋﯿﺴﯿﺔ ﻓﺘﻜﺘﺐ ﻣﺒﺎﺷﺮة دون ﻧﻘﻄﺔ‬

                      ‫;)‪setFixedSize(x,y‬‬

              ‫ﺛﻢ ﯾﺘﻢ إﻋﺎدة ﺗﻌﺮﯾﻒ اﻟﻜﺎﺋﻨﺎت ﻋﻠﻰ ھﺬا اﻟﺸﻜﻞ‬

      ‫;)‪hamza=new QPushButton("hamza",this‬‬

                       ‫‪ this‬ﺣﯿﺚ ﺗﻮﺿﻊ ﻛﻠﻤﺔ‬

                     ‫ﺑﺪل اﻹﻧﺘﻤﺎء إﻟﻰ ﻧﺎﻓﺬة ﻣﻌﯿﻨﺔ‬

‫اﻟﺸﻜﻞ أﻣﺎ ﺑﺎﻟﻨﺴﺒﺔ ﻟﺨﺼﺎﺋﺺ اﻟﻜﺎﺋﻨﺎت ﻓﻼ ﺗﻮﺿﻊ ﻧﻘﻂ ﺑﻞ إﺷﺎرة أﺧﺮى ﻋﻠﻰ ھﺬا‬

                     ‫;)‪hamza->move(x,y‬‬

           ‫ﺣﯿﺚ ﻧﻼﺣﻆ وﺿﻊ ﻋﺎرﺿﺔ وأﻛﺒﺮ ﻗﻄﻌﺎ ﺑﺪل اﻟﻨﻘﻄﺔ‬

                                 ‫}‬

                          ‫ﻣﻠﻒ‪main.cpp‬‬

                 ‫>‪#include <QApplication‬‬
                                #include "mafenetre.h"


                            int main(int argc, char *argv[])
                           { QApplication app(argc, argv);

                                    MaFenetre fenetre;
                                     fenetre.show();

                                     return app.exec();
                                             }


                                        4 ‫اﻟﺪرس‬
                                ‫اﻷﺣﺪاث و اﻟﺘﻐﯿﺮات‬
                             ‫ و اﻟﺘﻲ ﻧﻌﺘﻤﺪ ﻋﻠﯿﮫ ﻛﺜﯿﯿﯿﯿﺮا‬Qt ‫أھﻢ دروس‬

                                    ‫و ھﻮ درس ﯾﺨﺺ اﻷﺣﺪاث‬

                                 ‫ﯾﻌﻨﻲ رﺑﻂ ﻛﻞ ﺣﺪث ﺑﺘﻐﯿﺮ ﺧﺎص ﺑﮫ‬

                                ‫ﻓﺎﻟﺤﺪث ﻣﺜﻼ ھﻮ اﻟﻀﻐﻂ ﻋﻠﻰ زر ﻣﺎ‬

       SLOT‫ و ﻟﻠﺘﻐﯿﺮ ب‬SIGNAL ‫ ﻟﻠﺤﺪث ب‬Qt ‫أﻣﺎ اﻟﺘﻐﯿﺮ ﻓﮭﻮ ﻧﺘﯿﺠﺔ اﻟﻀﻐﻂ ﻋﻠﻰ اﻟﺨﺪث و ﻧﺮﻣﺰ ﻓﻲ‬

MaFenetre.cpp‫ و ﻧﺴﺘﺪﻋﯿﮭﺎ ﻓﻲ ﻣﻠﻒ‬QObject ‫ ﻣﻮﺟﻮدة ﻓﻲ ﻛﻼس‬connect ‫و ﻧﺮﺑﻄﮭﻢ ﻣﻦ ﺧﻼل داﻟﺔ إﺳﻤﮭﺎ‬

                                 quit();‫و اﻟﺘﻐﯿﯿﺮات اﻟﺒﺴﯿﻄﺔ ھﻲ‬

                                         aboutQt();‫و‬

                                             .....‫و‬

                              ‫ﻓﻨﺠﺮب ﻣﺜﺎﻻ ﻋﻦ ذﻟﻚ و ھﻮ إﻏﻼق اﻟﻨﺎﻓﺬة‬

                                   MaFenetre.h‫أوﻻ ﻣﻠﻒ‬

                              #ifndef DEF_MAFENETRE

                              #define DEF_MAFENETRE

                          class MaFenetre :public QWidget

                                               {

                                          public :

                                       MaFenetre();

                                          private :

                                QPushButton *hamza;
                                                    ‫}‬




                                         ‫ﻣﻠﻒ ‪MaFenetre.cpp‬‬

                                    ‫>‪#include <QApplication‬‬

                                         ‫>‪#include <QtGui‬‬

                             ‫)(‪MaFenetre::MaFenetre() : QWidget‬‬

                                                    ‫{‬

                                      ‫;)001,001(‪setFixedSize‬‬

                           ‫;)‪hamza=new QPushButton("quit",this‬‬

                                      ‫;)05,05(‪hamza->move‬‬

           ‫;)))(‪QObject::connect(hamza,SIGNAL(clicked()),qApp,SLOT(quit‬‬

                                                    ‫}‬

                                                   ‫ﻣﻠﻒ‪main.cpp‬‬
                                               ‫ﻻ داﻋﻲ ﻟﻜﺘﺎﺑﺘﮫ ﻓﮭﻮ ﺳﮭﻞ‬
‫ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺴﻄﺮ اﻟﻤﻜﺘﻮب ﺑﺎﻷﺣﻤﺮ و اﻟﺬي ھﻮ ﺟﺪﯾﺪ ﻓﮭﻲ اﻟﺪاﻟﺔ ‪ connect‬اﻟﺘﻲ ﺗﺮﺑﻂ اﻟﺤﺪث ﺑﺎﻟﺘﻐﯿﺮ ﺣﯿﺚ ﺗﻀﻢ 4 ﺑﺎراﻣﺘﺮات‬
                                    ‫اﻷول ھﻮ اﻟﻜﺎﺋﻦ اﻟﺬي ﯾﻀﻢ اﻟﺤﺪث و ھﻮ اﻟﺰر‬
                                   ‫أﻣﺎ اﻟﺜﺎﻧﻲ ﻓﮭﻮ اﻟﺤﺪث و ﯾﻮﺿﻊ داﺋﻤﺎ ﺑﯿﻦ ﻗﻮﯾﺴﻦ‬
                                                 ‫‪SIGNAL(....);e‬‬
                                           ‫اﻟﺒﺎراﻣﺘﺮ اﻟﺜﺎﻟﺖ ھﻮ ﻣﺼﺪر اﻟﺘﻐﯿﺮ‬
       ‫ﻓﺎﻟﺘﻐﯿﺮات اﻟﺮﺳﻤﯿﺔ )....,‪ (quit,aboutQt‬إذا أردﻧﺎ إﺳﺘﺪﻋﺎﺋﮭﺎ ﻓﺈﻧﻨﺎ ﺳﻨﻜﺘﺐ ‪ qApp‬ﻓﻲ اﻟﺒﺎراﻣﺘﺮ اﻟﺜﺎﻟﺖ‬
                                    ‫أﻣﺎ إذا أردﻧﺎ أن ﻧﺼﻨﻊ ﺗﻐﯿﺮ آﺧﺮ ﻓﺴﻨﻀﻊ‪this‬‬
                                                 ‫أﻣﺎ اﻟﺮاﺑﻊ ﻓﮭﻮ اﻟﺘﻐﯿﺮ‬
                                  ‫.......................................................‬
                     ‫ﻣﻼﺣﻈﺔ ھﺎﻣﺔ ::::: أ ﻻ ﯾﻤﻜﻨﻨﺎ اﻟﻘﯿﺎم ﺑﺘﻐﯿﯿﺮات ﻏﯿﺮ اﻟﺨﺮوج و ﻧﺎﻓﺬة ''ﺣﻮل''‪Qt‬‬


                               ‫ﺑﻠﻰ ﯾﻤﻜﻨﻨﺎ ذﻟﻚ ﺣﯿﺚ ﺳﻨﺼﻨﻊ ﺗﻐﯿﯿﺮات ﺧﺎﺻﺔ‬
                              ‫أوﻻ ﻟﻔﻌﻞ ذﻟﻚ ﯾﺠﺐ اﻟﺘﻌﺮﯾﻒ ب‪Q_OBJECT‬‬
                                      ‫ﻓﻲ ﻣﻠﻒ‪MaFenetre.h‬‬
                                        ‫و ﻛﺬﻟﻚ اﻟﺘﻌﺮﯾﻒ ﺑﺎﻟﺘﻐﯿﺮ‬
                          ‫ﻣﺜﺎل : ﻋﻨﺪ اﻟﻀﻐﻂ ﻋﻠﻰ زر ‪ OK‬ﯾﺘﻐﯿﺮ ﻧﺺ اﻟﺰر إﻟﻰ‪hamza‬‬

                               ‫و ﻟﻔﻌﻞ ذﻟﻚ ﻻﺣﻈﻮا ﻣﻠﻒ ‪ mafenetre.h‬اﻟﺠﺪﯾﺪ‬



                                   ‫‪#ifndef DEF_MAFENETRE‬‬

                                   ‫‪#define DEF_MAFENETRE‬‬

                              ‫‪class MaFenetre : public QWidget‬‬

                                                    ‫{‬

                                             ‫‪Q_OBJECT‬‬
                                    public :

                                 MaFenetre();

                                 public slots:

                             void changetext();

                                    private :

                          QPushButton *hamza;

                                        }




                      ‫ﻛﻤﺎ ﺗﻼﺣﻈﻮن ﯾﺘﻢ ﺗﻌﺮﯾﻒ اﻟﺘﻐﯿﯿﺮ ﺑﻮاﺳﻄﺔ داﻟﺔ‬
                            MaFenetre.cpp ‫اﻵن ﻣﻠﻒ‬

                         #include <QApplication>

                             #include <QtGui>

                 MaFenetre::MaFenetre() : QWidget()

                                        {

                          setFixedSize(100,100);

                hamza=new QPushButton("OK",this);

                            hamza.move(50,50);

QObject::connect(hamza,SIGNAL(clicked()),this,SLOT(changetext()));

                                        }

                      void MaFenetre::changetext()

                                        {

                       hamza->setText("hamza");

                                        }




                          qApp‫ﺑﺪل‬this ‫ﻛﻤﺎ ﺗﻼﺣﻈﻮن وﺿﻌﻨﺎ‬
                                   changetext()‫و‬
                                       quit()‫ﺑﺪل‬
                              MaFenetre()‫و ﻛﺬﻟﻚ أﻏﻠﻘﻨﺎ‬
        ‫ ووﺿﻌﻨﺎ ﺑﺪاﺧﻠﮭﺎ أﻣﺮا ﺑﺘﻐﯿﯿﺮ ﻧﺺ اﻟﺰر‬changetext ‫و أﻋﺪﻧﺎ ﺗﻌﺮﯾﻒ اﻟﺪاﻟﺔ‬
                      ‫إذن ﻋﻨﺪ اﻟﻀﻐﻂ ﻋﻠﻰ اﻟﺰر ﯾﺘﻢ ﺗﻐﯿﯿﺮ ﻧﺺ اﻟﺰر‬
                                  5 ‫اﻟﺪرس‬
                                            ‫ﻧﻮاﻓﺬ اﻟﺤﻮار‬
                                    ‫ﻓﻲ ھﺬا اﻟﺪرس ﺳﻨﺘﻌﺮف ﻋﻠﻰ ﻧﻮاﻓﺬ اﻟﺤﻮار‬

                                ‫و اﻟﻤﻮﺟﻮدة ﻓﻲ ﻛﻼس اﻟﻤﺴﻤﻰ‪QMessageBox‬‬

                                    ‫و ﺗﻨﻘﺴﻢ ھﺬه اﻟﻨﻮاﻓﺬ إﻟﻰ ﻧﻮاﻓﺬ ﻟﻠﻤﻌﻠﻮﻣﺎت‬

                                           ‫ﻧﻮاﻓﺬ ﻟﻠﺘﺤﺬﯾﺮ ﻧﻮاﻓﺬ ﻟﻠﻤﻨﻊ‬

                                                ‫ﻧﻮاﻓﺬ ﻟﻠﺴﺆال‬

                                           ‫و اﻟﺘﻲ ﺗﺄﺧﺪ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

         ‫;)‪QMessageBox::x(QWidget *parent,QString *titre,QString *text,button‬‬



                              ‫ﻧﻌﻮض ‪ x‬ب ‪ information‬ﻓﺘﺘﺤﻮل ﻋﻼﻣﺔ ﻧﺎﻓﺬة اﻟﺤﻮار إﻟﻰ‬
                                ‫ﻧﻌﻮض ‪ x‬ب‪ warning‬ﻓﺘﺘﺤﻮل ﻋﻼﻣﺔ ﻧﺎﻓﺬة اﻟﺤﻮار إﻟﻰ‬
                               ‫ﻧﻌﻮض ‪ x‬ب‪ critical‬ﻓﺘﺘﺤﻮل ﻋﻼﻣﺔ ﻧﺎﻓﺬة اﻟﺤﻮار إﻟﻰ‬




                                                                                          ‫ﻣﺜﻞ :‬
                                       ‫و ﻛﺬﻟﻚ ﻧﻌﻮض ‪ QWidget *parent‬ب‪this‬‬
                                 ‫و ﻧﻌﻮض ‪ QString *titre‬ب ﻋﻨﻮان ﻧﺎﻓﺬة اﻟﺤﻮار ﺑﯿﻦ" "‬
                                          ‫و ‪ QString *text‬ﺑﻨﺺ اﻟﺤﻮار ﺑﯿﻦ" "‬
                                 ‫أﻣﺎ ‪ button‬ﻓﺈذا ﻟﻢ ﻧﻜﺘﺐ ﺷﻲء ﺳﯿﻈﮭﺮ زر واﺣﺪ و ھﻮ ‪OK‬‬
  ‫ﻟﻜﻦ ﻣﺎذا إن ﻋﻮﺿﻨﺎ ‪ x‬ب ‪question‬ھﻞ ﺳﯿﻜﻮن اﻟﺠﻮاب ب ‪ OK‬ﻻ ﺳﯿﻜﻮن اﻟﺠﻮاب ﺑﻨﻌﻢ أو ﻻ ﻟﺬﻟﻚ ﻧﻤﻸ اﻟﺒﺎراﻣﺘﺮ اﻷﺧﯿﺮ ﺑــ‬
                                 ‫‪QMessageBox::yes | QMessageBox::No‬‬
                                                   ‫ﺣﯿﺚ ﯾﺼﺒﺢ ﻋﻠﻰ ﺷﻜﻞ‬

‫| ‪QMessageBox::question(this,"quetion","est-ce que tu es hamza ",QMessageBox::Yes‬‬
                              ‫;)‪QMessageBox::No‬‬

                                        ‫ﻟﻜﻦ ﻛﯿﻒ ﻧﺴﺘﺨﺪم ﻧﻮاﻓﺬ اﻟﺤﻮار‬
                                                   ‫ﺳﮭﻠﺔ::‬
                                          ‫ﻋﻦ ﻃﺮﯾﻖ ‪ slot‬و‪signal‬‬
                                       ‫اﻟﺬان ﺗﻌﻠﻤﻨﺎھﻤﺎ ﻓﻲ اﻟﺪرس اﻟﺴﺎﺑﻖ‬
                                              ‫‪Mafenetre.h‬‬

                                     ‫‪#ifndef DEF_MAFENETRE‬‬

                                    ‫‪#define DEF_MAFENETRE‬‬

                                     ‫>‪#include <QApplication‬‬

                                          ‫>‪#include<QtGui‬‬

                                ‫‪class MaFenetre : public QWidget‬‬
                                {

                          Q_OBJECT

                            public :

                          MaFenetre();

                         public slots :

                         void ouvrire();

                            private :

                       QPushButton *ok;

                                };

                             #endif




                       ‫ﻣﻠﻒ‬mafenetre.cpp




                       #include <QtGui>

                    #include <QApplication>

              MaFenetre::MaFenetre() : QWidget ()

                                {

                     setFixedSize(100,100);

             ok=new QPushButton("ouvrire",this);

                       ok->move(50,50);

  QObject::connect(ok,SIGNAL(clicked()),this,SLOT(ouvrire()));

                                }

                   void MaFenetre::ouvrire()

                                {

QMessageBox::information(this,"titre","je suis un programmeur");

                                }




                       ‫ ﻓﮭﻮ ﺳﮭﻞ‬main.cpp ‫أﻣﺎ‬
                      ‫ھﻨﺎك ﻧﻮع آﺧﺮ ﻣﻦ ﻧﻮاﻓﺬ اﻟﺤﻮار و ھﻲ ﻧﻮاﻓﺪ اﻟﻤﻠﻔﺎت‪QFileDialogue‬‬
                  ‫ﯾﻤﻜﻦ إﺳﺘﻌﻤﺎﻟﮭﺎ ﻣﺜﻼ ﻟﺤﻒ ﻣﻠﻒ ﻣﻌﯿﻦ أو ﻹﺧﺘﯿﺎر ﻣﻠﻒ و اﻟﻘﯿﺎم ﺑﻨﺴﺨﮫ أو ﻣﺎ ﺷﺎﺑﮫ‬

‫‪QString fichier = QFileDialog::getOpenFileName(this, "Ouvrir un fichier", QString(), "Images‬‬
                                 ‫;)")‪(*.png *.gif *.jpg *.jpeg‬‬

                                        ‫و اﻟﺒﺎراﻣﺘﺮات ﺳﮭﻠﺔ و واﺿﺤﺔ‬

    ‫,)(‪QString fichier = QFileDialog::getOpenFileName(this, "Ouvrir un fichier", QString‬‬
                                    ‫;)")‪"Text(*.txt*.doc‬‬

                                             ‫أو ﯾﻤﻜﻦ ﺣﻔﻆ ﻣﻠﻒ‬


 ‫,)(‪QString fichier = QFileDialog::getSaveFileName(this, "sauvegarder un fichier", QString‬‬
                                    ‫;)")‪"Text(*.txt*.doc‬‬


                                            ‫ﻟﻦ ﻧﺴﺘﻌﻤﻞ ﻧﻮاﻓﺬ اﻟﺤﻮار‬
                         ‫ﻛﺜﯿﺮا ﻟﻜﻦ ھﻲ ﺟﺪ ﻣﮭﻤﺔ ﯾﻤﻜﻦ ﻋﻦ ﻃﺮﯾﻘﮭﺎ ﺣﻔﻆ ﺣﻘﻮق ﺑﺮﻧﺎﻣﺠﻨﺎ أو‬
                                  ‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻠﻔﺎت أو اﻻﺳﺘﺠﻮاﺑﺎت و اﻟﺘﺤﺬﯾﺮات‬


                                        ‫اﻟﺪرس6‬
                              ‫اﻟﻜﺎﺋﻨﺎت اﻟﻀﺮورﯾﺔ ﻟﺒﺮاﻣﺠﻨﺎ‬
                         ‫ﺗﻌﻠﻤﻨﺎ ﻟﺤﺪ اﻵن اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻛﺎﺋﻦ واﺣﺪ و ھﻮ‪QPushButton‬‬

                                        ‫ﻟﻜﻦ ﻣﺎذا ﻋﻦ اﻟﻜﺎﺋﻨﺎت اﻷﺧﺮى‬

                                                 ‫:::::::‬

                                                ‫‪QLabel‬‬

               ‫ھﺬا اﻟﻜﺎﺋﻦ ﯾﺴﺘﻌﻤﻞ ﻹﻇﮭﺎر ﺻﻮر أو ﻧﺼﻮص اﻟﻌﺎدﯾﺔ ﺗﻘﺮﯾﺒﺎ ﻧﻔﺲ دور ‪ cout‬ﻛﮭﺬه اﻟﻨﺎﻓﺬة‬




                  ‫ھﻮ ﺑﺪوره ﯾﺮث اﻟﺨﺼﺎﺋﺺ اﻟﺮﺋﯿﺴﯿﺔ و ھﻲ ‪ move‬و ‪ text‬و ‪ setText‬و......‬

                                                ‫إﻇﮭﺎر ﻧﺺ‬

                           ‫-1ﻹﻇﮭﺎر ﻧﺺ ﯾﻜﻔﻲ اﻟﺘﻌﺮﯾﻒ ﺑﺎﻟﺒﺎراﻣﺘﺮ اﻟﺨﺎص ب‪QLabel‬‬

                                          ‫-2أو إﺳﺘﻌﻤﺎل‪setText‬‬

                                           ‫دﻋﻨﺎ ﻧﺠﺮب اﻟﻄﺮﯾﻘﺘﯿﻦ‬

                                    ‫‪#ifndef DEF_MAFENETRE‬‬

                                   ‫‪#define DEF_MAFENETRE‬‬
                                    #include<QtGui>

                               #include<QApplication>

                         class MaFenetre : public QWidget

                                               {

                                        Q_OBJECT

                                          public :

                                       MaFenetre();

                                          private:

                                      QLabel *label;

                                              };

                                           #endif




                                    #include<QtGui>

                               #include <QApplication>

                                #include "mafenetre.h"

                       MaFenetre::MaFenetre() : QWidget ()

                                               {

                                setFixedSize(100,100);

                          label=new QLabel("salam",this);

                              label->setText("salamm");

                                  label->move(50,50);

                                               }

         ‫ و اﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺎت ﻋﻠﯿﮫ ﻛﺎﻟﻤﻘﺎرﻧﺔ‬QLabel ‫ﺑﻌﺪ أن أﻇﮭﺮﻧﺎ ﻧﺺ ﻣﺎذا ﻋﻦ ﻣﻌﺮﻓﺔ ﻣﺤﺘﻮى ال‬

                                       text‫ﻧﺴﺘﻌﻤﻞ اﻟﺪاﻟﺔ‬
                                            ‫ﺣﯿﺚ‬

                            QString hamza=label->text();

char ‫ ﺛﻢ إﻟﻰ‬string ‫ و ھﻮ ﻧﻮع ﺧﺎص ﻣﻦ اﻟﻨﺼﻮص ﯾﻤﻜﻦ ﺗﺤﻮﯾﻠﮫ إﻟﻰ‬QString ‫ ﻛﺎﺋﻦ ﻣﻦ ﻧﻮع‬hamza ‫ﺣﯿﺚ‬
                                            ‫ﺣﯿﺚ‬

                   const char *h=hamza.toStdString().c_str();
‫ و‬QLabel ‫ و‬QLineEdit ‫و‬QPushButton ‫و ﻛﻞ ﻣﺎ ھﻮ ﻣﻜﺘﻮب ﺑﺎﻷﺣﻤﺮ ﯾﻨﻄﺒﻖ ﻋﻠﻰ ﻛﻞ اﻟﻜﺎﺋﻨﺎت اﻟﺘﻲ ﺗﻈﮭﺮ اﻟﻨﺼﻮص ﻣﺜﻞ ال‬
                                      QTextEdit
                                       ‫إﻇﮭﺎر ﺻﻮرة‬
                            setPixmap‫ﻹﻇﮭﺎر ﺻﻮرة ﻧﺴﺘﻌﻤﻞ اﻟﺪاﻟﺔ‬

                                     label=new QLabel(this);

                          label->setPixmap(QPixmap("image.png"));

                                       label->move(50,50);




                                                :::::::

                                             QLineEdit

                                ‫ھﻮ ﺣﻘﻞ ﻧﺺ ﻋﺎدي ﻹدﺧﺎل اﻟﻨﺼﻮص ﺑﻜﻞ أﻧﻮاﻋﮭﺎ‬

                                                  ‫ﻣﺜﻞ‬




                                             ‫اﻟﺘﻌﺮﯾﻒ ﺑﺎﻟﻜﺎﺋﻦ‬




                                    #ifndef DEF_MAFENETRE

                                   #define DEF_MAFENETRE

                                         #include<QtGui>




                                     #include<QApplication>

                               class MaFenetre : public QWidget

                                                   {

                                            Q_OBJECT

                                               public :

                                           MaFenetre();

                                              private:
                   QLineEdit *hamza;

                               };

                            #endif




                     #include<QtGui>

               #include <QApplication>

                #include "mafenetre.h"

       MaFenetre::MaFenetre() : QWidget ()

                                {

                 setFixedSize(100,100);

             hamza=new QLineEdit(this);

                                }


‫إﻟﯿﻜﻢ ھﺬه اﻟﺪاﻟﺔ ﺗﻘﻮم ﺗﺤﻮل ﻛﻞ ﻣﺎ ﯾﻜﺘﺐ إﻟﻰ ﻧﻤﻂ ﻛﻠﻤﺔ اﻟﺴﺮ أي إﻟﻰ ﻧﻘﻂ‬
                             ******


lineedit->setEchoMode(QLineEdit::Password);

                     ‫اﻵن ﻣﺎ رأﯾﻜﻢ ﻓﻲ ﺗﺠﺮﺑﺔ‬
               ‫اﻟﻘﯿﺎم ﺑﺒﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﻌﻤﻠﯿﺔ ﺟﻤﻊ ﺳﮭﻠﺔ‬

              #ifndef DEF_MAFENETRE

              #define DEF_MAFENETRE

                 #include<QtGui>
              #include<QApplication>
         class MaFenetre : public QWidget
                          {
                    Q_OBJECT
                      public :
                    MaFenetre();
                    public slots:
                     void ok();
                      private:
              QLineEdit *m_champ1;
              QLineEdit *m_champ2;
              QLineEdit *m_champ3;
               QPushButton *m_ok;
                         };
                       #endif
                                              #include<QtGui>

                                    #include "mafenetre.h"
                                   #include <QApplication>
                              MaFenetre::MaFenetre() : QWidget ()
                                               {
                                    setFixedSize(200,115);
                              m_champ1=new QLineEdit("1",this);
                              m_champ2=new QLineEdit("2",this);
                              m_champ3=new QLineEdit("3",this);
                              m_ok=new QPushButton("ok",this);
                                   m_champ1->move(2,10);
                                   m_champ2->move(2,40);
                                   m_champ3->move(2,70);
                                      m_ok->move(2,90);
                   QObject::connect(m_ok,SIGNAL(clicked()),this,SLOT(ok()));
                                               }
                                     void MaFenetre::ok()
                                               {
                            double a=m_champ1->text().toDouble();
                            double b=m_champ2->text().toDouble();
                                        double c=a+b;
                           m_champ3->setText(QString::number(c));
                                               }




                                      ‫ﻣﺎ ھﻮ ﺻﻌﺐ ﻓﻲ اﻟﻜﻮد ھﻮ ﻣﺎ ﻣﻜﺘﻮب ﺑﺎﻷﺣﻤﺮ‬

                                             QString::number()

             QSting::number‫ ﻟﺘﻐﯿﯿﺮ ﻧﺺ ﻋﺎدي ﻟﻜﻦ ﻟﺘﻐﯿﯿﺮ اﻟﻨﺺ ﺑﺮﻗﻢ ﯾﺠﺐ إﺳﺘﻌﻤﺎل‬setText ‫داﺋﻤﺎ ﻧﺴﺘﻌﻤﻞ‬

                                        champ1->text().toDouble()

                            QLineEdit ‫ ﻓﮭﻲ ﻣﻌﺮوﻓﺔ ﻟﻜﻲ ﻧﻌﺮف ﻗﯿﻤﺔ ال‬text ‫ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺪاﻟﺔ‬

                                             .toDouble()‫ﻟﻜﻦ ﻣﺎدا ﻋﻦ‬

‫ اﻟﻘﺎﺑﻞ ﻹﺟﺮاء ﻋﻤﻠﯿﺎت رﯾﺎﺿﯿﺔ ﻋﻠﯿﮫ ﺣﯿﺚ ﺟﻤﻨﺎ ﻣﺤﺘﻮى اﻟﺤﻘﻞ 1 ﻣﻊ ﻣﺤﺘﻮى اﻟﺤﻘﻞ 2 و‬Double ‫ إﻟﻰ‬QString ‫ھﺬه اﻟﺪاﻟﺔ ﺗﻘﻮم ﺑﺘﺤﻮﯾﻞ‬
                                      setText ‫اﻟﻨﺘﯿﺠﺔ وﺿﻌﻨﺎھﺎ ﻓﻲ اﻟﺤﻘﻞ 3 ﻋﺒﺮ‬

                                                   QTextEdit

                                             ‫ھﺬا اﻟﻜﺎﺋﻦ ﻹﻇﮭﺎر ﻧﺺ ﻛﺒﯿﺮ‬




                              ‫ﻣﺜﻞ ﺣﻘﻞ اﻟﻨﺺ اﻟﺬي ﻧﻜﺘﺐ ﺑﮫ ردود و ﻣﻮاﺿﯿﻊ و ﻣﺜﻞ ھﺬا اﻟﺤﻘﻞ‬
                 ‫و ﻷﺧﺪ ﻣﺤﺘﻮاه ﻋﻠﻰ ﺷﻜﻞ ‪ QString‬ﻻ ﻧﺴﺘﻌﻤﻞ )(‪ text‬ﻛﺒﺎﻗﻲ اﻟﺤﻘﻮل ﺑﻞ ﻧﺴﺘﻌﻤﻞ)( ‪toPlainText‬‬

                                  ‫‪QString contenu=textedit ->toPlainText();e‬‬

‫ﯾﻌﻨﻲ اﻵن إذا ﻛﻨﺘﻢ ﺗﺘﻘﻨﻮن اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻠﻔﺎت ﻓﯿﻤﻜﻨﻜﻢ أن ﺗﯿﺘﻌﻤﻠﻮا اﻟﺪاﻟﺔ و ﺗﺤﻮﻟﻮا ‪ QString‬إﻟﻰ ‪ char‬ﺛﻢ ﺗﻘﻮﻣﻮن ﺑﺤﻔﻆ اﻟﻨﺺ ﻓﻲ ﻣﻠﻒ و‬
                    ‫أﯾﻀﺎ ﺗﺴﺘﻄﯿﻌﻮن ﻓﺘﺢ ﻣﺤﺘﻮى ﻣﻠﻒ ﻧﺼﻲ و إدﺧﺎﻟﮫ ﻓﻲ ‪ QTextEdit‬ﻋﻦ ﻃﺮﯾﻖ ‪setText‬‬

                           ‫و ﻣﻦ ﺑﺎب اﻟﻤﻌﺮﻓﺔ إﻟﯿﻜﻢ دورﺗﻲ اﻟﺴﺎﺑﻘﺔ ﻓﻲ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻠﻔﺎت ﻋﻦ ﻃﺮﯾﻖ++‪c‬‬




                         ‫وﺻﻠﺔ‬                                                                     ‫رﻗﻢ‬
                                                                     ‫ﻋﻨﻮان اﻟﺪرس‬
                       ‫اﻟﻤﻮﺿﻮع‬                                                                   ‫اﻟﺪرس‬
                                         ‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﻠﻔﺎت ﻋﺒﺮ اﻟﻘﻨﻮات‬
                        ‫ھﻨﺎ‬                                                                               ‫1‬
                                                         ‫)درس ﻧﻈﺮي)‬
                         ‫ھﻨﺎ‬              ‫‪ofstream‬و اﻟﻜﺘﺎﺑﺔ ﻓﻲ ﻣﻠﻒ‬                                        ‫2‬
                         ‫ھﻨﺎ‬               ‫ﺗﻄﺒﯿﻖ 1 : ﺗﺨﺰﻳﻦ اﻟﻤﻌﻠﻮﻣﺎت‬                                      ‫3‬
                         ‫ھﻨﺎ‬               ‫‪ ifstream‬و اﻟﻘﺮاءة ﻣﻦ ﻣﻠﻒ‬                                      ‫4‬
                                       ‫ﺗﻄﺒﯿﻖ 2 : ﻗﺮاءة ﺟﻤﻞ ﻣﻦ ﻣﻠﻒ‬
                         ‫ھﻨﺎ‬                                                                              ‫5‬
                                                             ‫ﻧﺼﻲ‬
                         ‫ھﻨﺎ‬                      ‫‪ getline‬و اﻟﺤﻠﻮل اﻟﺘﻲ ﺗﻮﻓﺮھﺎ ﻟﻚ‬                         ‫6‬
                         ‫ھﻨﺎ‬                                             ‫اﻟﺮاﯾﺎت و أھﻤﯿﺘﮭﺎ‬                ‫7‬

                       ‫ھﻨﺎ‬                        ‫ﻣﺸﺮوح ﺗﺨﺮﺟﻚ ﻣﻦ اﻟﺪورة‬                         ‫8‬
                   ‫ﻗﺮﻳﺒﺎ‬                             ‫ﺗﺼﺤﯿﺢ ﻣﺸﺮوع اﻟﺘﺨﺮج‬                            ‫9‬




                                                           ‫ﻟﺤﺪ اﻵن‬

                                                         ‫‪QLabel‬‬

                                                       ‫‪QLineEdit‬‬

                                                     ‫‪QPushButton‬‬

                                                       ‫و‪QTextEdit‬‬

             ‫ﺗﻢ ﺷﺮﺣﮭﺎ و ھﻲ ﻣﺎ ﺳﻨﻌﺘﻤﺪ ﻋﻠﯿﮭﺎ اﻵن أﻣﺎ ﺑﺎﻗﻲ اﻟﻜﺎﺋﻨﺎت ﺳﯿﺘﻢ دراﺳﺘﮭﺎ ﻓﻲ ﺣﺎل إﺣﺘﺠﻨﺎ ﻟﮭﺎ ﻓﻲ اﻟﺪروس اﻟﻘﺎدﻣﺔ‬

                                                 ‫ﻣﻼﺣﻈﺎت ﺟﺪ ھﺎااااااااااااااﻣﺔ‬
                                                  ‫ﻓﻲ ﻣﻠﻒ‪mafenetre.h‬‬

                                   ‫ﻣﻦ اﻟﻀﺮوري اﻟﺤﻔﺎظ ﻋﻠﻰ ﺗﺮﺗﯿﺐ ‪ ifndef‬و ‪ define‬ﺣﯿﺚ‬
                                            ‫‪#ifndef DEF_MAFENETRE‬‬

                                            ‫‪#define DEF_MAFENETRE‬‬

‫و ﻛﺬﻟﻚ ﯾﺠﺐ أن ﻧﻜﺘﺐ ‪ public‬و ﻟﯿﺲ ‪ Public‬و أﻋﺘﺬر ﻷﻧﻨﻲ إرﺗﻜﺒﺖ ھﺬا اﻟﺨﻄﺄ ﻓﻲ اﻟﺪروس اﻟﺴﺎﺑﻘﺔ و ﻟﻢ أﻗﻢ ﺑﺘﺠﺮﯾﺐ اﻷﻛﻮاد ﻇﻨ ً ﻣﻨﻲ أﻧﮭﺎ‬
         ‫ﺎ‬
                                                          ‫ﺻﺤﯿﺤﺔ 001%‬
                         ‫و ﻛﺬﻟﻚ ﯾﺠﺐ اﻹﻧﺘﺒﺎه إﻟﻰ اﻷﻗﻮاس ﺣﯿﺚ أﻧﻨﺎ ﻓﻲ ﺑﻌﺾ اﻷﺣﯿﺎن ﻧﻨﺴﻰ ﻛﺘﺎﺑﺔ ﻗﻮس أو ﻗﻮﺳﯿﻦ‬
                   ‫و ﻛﺬﻟﻚ اﻹﻧﺘﺒﺎه إﻟﻰ اﻟﻘﻮﺳﯿﻦ ﺑﻌﺪ اﻟﺪوال و اﻟﺘﺄﻛﺪ ﻣﻦ ﺻﺤﺔ ﺑﺎراﻣﺘﺮات ھﺬه اﻟﺪوال).....,‪(show , move‬‬
                                ‫اﻟﺪرس اﻟﻘﺎدم ﺳﻮف ﻧﺮﺗﺎح ﻣﻦ ﻋﺬاب ‪ move‬و ﺳﻨﻨﺘﻘﻞ إﻟﻰ‪les layouts‬‬




                                                      ‫اﻟﺪرس 7‬
                                                 ‫‪ MOVE‬اﻻرﺗﯿﺎح ﻛﻢ ﻋﺬاب‬
                                                    ‫‪QLayout‬إﺳﺘﻌﻤﺎل‬

                                               ‫ھﺬا اﻟﺪرس ھﻮ ﺧﺎص ب ‪layout‬‬
                                               ‫و ھﻲ ﻛﺎﺋﻨﺎت ﺗﻨﻈﻢ واﺟﮭﺔ ﺑﺮﻧﺎﻣﺠﻚ‬

                               ‫ﺣﯿﺚ أﻧﻨﺎ ﺳﯿﺼﻌﺐ ﻋﻠﯿﻨﺎ إﺳﺘﻌﻤﺎل ‪ move‬ﻓﻲ اﻟﺒﺮاﻣﺞ اﻟﻜﺜﯿﺮة اﻟﻜﺎﺋﻨﺎت‬
                                                 ‫و اﻟﻜﻼس اﻟﻤﺴﺆول ﻋﻦ‪layouts‬‬
                                                         ‫إﺳﻤﮫ‪QLayout‬‬
                                                            ‫ﯾﻨﻘﺴﻢ إﻟﻰ‬
                                                       ‫‪QHBoxLayout‬‬
                                                       ‫‪QVBoxLayout‬‬
                                                       ‫‪QFormLayout‬‬
                                                        ‫‪QGridLayout‬‬

                                           ‫ﻧﺒﺪأ ب ‪layout‬اﻷﻓﻘﯿﺔ‪QHBoxLayout‬‬
                                              ‫ﻟﻜﻦ ﻣﺎ ھﻮ ﺷﻜﻞ ھﺬا: ‪layout‬‬
                                            ‫إن ﻛﺎﺋﻦ ﺑﻨﻈﻢ اﻟﻜﺎﺋﻨﺎت ﻋﻠﻰ ھﺬا اﻟﺸﻜﻞ‬




                           ‫اﻟﺘﻌﺮﯾﻒ ﺑﻜﺎﺋﻦ ﻣﻦ ﻧﻮع ‪ QHBoxLayout‬ﯾﺘﻢ ﻓﻲ ﻣﻠﻒ‪mafenetre.cpp‬‬
                                                ‫ﻋﻠﻰ ھﺬا اﻟﺸﻜﻞ‬

‫;‪QHBoxLayout *hamza=new QHBoxLayout‬‬

                            ‫و ﯾﺘﻢ إﺿﺎﻓﺔ ﻛﺎﺋﻦ إﻟﻰ ‪ QHBoxLayout‬ﻋﻦ ﻃﺮﯾﻖ اﻟﺪاﻟﺔ‪addWidget‬‬
                                                  ‫ﻓﻠﻨﺠﺮب ﻣﺜﺎل‬

‫‪#ifndef DEF_MAFENETRE‬‬

‫‪#define DEF_MAFENETRE‬‬

‫>‪#include <QtGui‬‬

‫‪class MaFenetre : public QWidget‬‬

‫{‬

‫: ‪public‬‬
MaFenetre();

private :

QPushButton *b1;

QPushButton *b2;

QPushButton *b3;

};

#endif




#include"mafenetre.h"

MaFenetre::MaFenetre() : QWidget()

{

b1=new QPushButton("button1");

b2=new QPushButton("button2");

b3=new QPushButton("button3");

QHBoxLayout *layout=new QHBoxLayout;

layout->addWidget(b1);//‫ إﺿﺎﻓﺔ اﻟﺰر اﻷول ﻟـ‬layout

layout->addWidget(b2);//‫ إﺿﺎﻓﺔ اﻟﺰر اﻟﺜﺎﻧﻲ ﻟـ‬layout

layout->addWidget(b3);//‫ إﺿﺎﻓﺔ اﻟﺰر اﻟﺜﺎﻟﺖ ﻟـ‬layout

setLayout(layout);

//‫ھﻨﺎ إدﻣﺎج اﻟﻼﯾﻮت داﺧﻞ اﻟﻨﺎﻓﺬة ﻟﻜﻲ ﯾﺘﻔﻌﻞ دوره‬

}


                                                 ....‫اﻟﻜﻮد ﻣﻔﮭﻮم ﻟﻜﻦ‬
                                QPushButton‫ ﻓﻲ اﻟﺒﺎراﻣﺘﺮ اﻟﺜﺎﻧﻲ ﻓﻲ‬this ‫ﻟﻤﺎذا ﻟﻢ ﻧﻀﻊ‬
setLayout ‫ﻧﺴﺒﻨﺎه ﻟﻠﻨﺎﻓﺬة ﻋﻦ ﻃﺮﯾﻖ‬layout ‫ و ال‬addWidget ‫ ﻋﻦ ﻃﺮﯾﻖ‬layout ‫اﻟﺠﻮاب ھﻮ أﻧﮫ ﻻ داﻋﻲ ﻟﺬﻟﻚ ﻓﺎﻷزرار ﻧﺴﺒﻨﺎھﺎ إﻟﻰ‬
                                  ‫إذن ﺳﯿﺘﻮك اﻷزرار ﻣﻨﺴﻮﺑﺔ إﻟﻰ اﻟﻨﺎﻓﺬة ﺑﺸﻜﻞ ﻏﯿﺮ ﻣﺒﺎﺷﺮ‬
                                                        :‫اﻟﻨﺘﯿﺠﺔ‬




                                                  QVBoxLayout‫ﻧﻨﺘﻘﻞ اﻵن إﻟﻰ‬
                                                 ‫ ﻋﻤﻮدي ﻋﻠﻰ ھﺬا اﻟﺸﻜﻞ‬layout ‫أي‬
                                   QHBoxLayout ‫اﻟﺘﻌﺮﯾﻒ ﻋﺎدي ﻣﺜﻞ‬

QVBoxLayout *hamza=new QVBoxLayout;

                                   addWidget‫ھﻲ أﯾﻀﺎ ﻧﺴﺘﻌﻤﻞ ﻓﯿﮭﺎ‬
                                         ‫ﻣﺜﺎل ﺗﻮﺿﯿﺤﻲ‬

#ifndef DEF_MAFENETRE

#define DEF_MAFENETRE

#include <QtGui>

class MaFenetre : public QWidget

{

public :

MaFenetre();

private :

QPushButton *b1;

QPushButton *b2;

QPushButton *b3;

};

#endif




#include"mafenetre.h"

MaFenetre::MaFenetre() : QWidget()

{
b1=new QPushButton("button1");

b2=new QPushButton("button2");

b3=new QPushButton("button3");

QVBoxLayout *layout=new QVBoxLayout;

layout->addWidget(b1);//‫ إﺿﺎﻓﺔ اﻟﺰر اﻷول ﻟـ‬layout

layout->addWidget(b2);//‫ إﺿﺎﻓﺔ اﻟﺰر اﻟﺜﺎﻧﻲ ﻟـ‬layout

layout->addWidget(b3);//‫ إﺿﺎﻓﺔ اﻟﺰر اﻟﺜﺎﻟﺖ ﻟـ‬layout

setLayout(layout);

//‫ھﻨﺎ إدﻣﺎج اﻟﻼﯾﻮت داﺧﻞ اﻟﻨﺎﻓﺬة ﻟﻜﻲ ﯾﺘﻔﻌﻞ دوره‬

}


                                                             :‫اﻟﻨﺘﯿﺠﺔ‬




                                    QGridLayout‫و ھﻮ‬QLayout ‫اﻵن ﻧﻨﺘﻘﻞ ﻟﻨﻮع ﺧﺎص ﻣﻦ ال‬
                                     QVBoxLayout‫و‬QHBoxLayout ‫و ھﻮ ﻣﺰﯾﺞ ﺑﯿﻦ ال‬
                                            ‫و ھﻲ ﺗﺸﺒﮫ اﻹﺣﺪاﺛﯿﺎت ﺑﺘﺮﺑﯿﻌﺎت ﻛﺒﯿﺮة‬




                                                )‫(ﺻﻮرة اﻟﺘﺮﺑﯿﻌﺎت ﻣﻘﺘﻄﻔﺔ ﻣﻦ ﻣﻮﻗﻊ زﯾﺮو‬
                                           ‫ زوج ﯾﺤﺪد ﻣﻜﺎﻧﮫ ﻓﻲ اﻟﻨﺎﻓﺬة‬widget ‫ﺣﯿﺚ ﻧﻀﻊ ﻟﻜﻞ‬
                                                         QGridLayout‫ﺗﻌﺮﯾﻒ‬
QGridLayout *hamza=new QGridLayout ;

                                              addWidget‫ﻧﺴﺘﻌﻤﻞ‬
                                                   :‫ﻣﺜﺎل‬

#ifndef DEF_MAFENETRE

#define DEF_MAFENETRE

#include <QtGui>

class MaFenetre : public QWidget

{

public :

MaFenetre();

private :

QPushButton *b1;

QPushButton *b2;

QPushButton *b3;

};

#endif




#include"mafenetre.h"

MaFenetre::MaFenetre() : QWidget()

{

b1=new QPushButton("button1");

b2=new QPushButton("button2");

b3=new QPushButton("button3");

QGridLayout *layout=new QGridLayout ;

layout->addWidget(b1,0,0);//‫ إﺿﺎﻓﺔ اﻟﺰر اﻷول ﻟـ‬layout

layout->addWidget(b2,1,0);//‫ إﺿﺎﻓﺔ اﻟﺰر اﻟﺜﺎﻧﻲ ﻟـ‬layout

layout->addWidget(b3,1,1);//‫ إﺿﺎﻓﺔ اﻟﺰر اﻟﺜﺎﻟﺖ ﻟـ‬layout

setLayout(layout);
//‫ھﻨﺎ إدﻣﺎج اﻟﻼﯾﻮت داﺧﻞ اﻟﻨﺎﻓﺬة ﻟﻜﻲ ﯾﺘﻔﻌﻞ دوره‬

}

                                                        :‫اﻟﻨﺘﯿﺠﺔ‬




                                         QFormLayout‫ و ھﻮ‬QLayout ‫اﻵن وﺻﻨﺎ ﻵﺧﺮ‬
                                              formulaire‫و ھﻮ ﯾﺸﺒﮫ ﺗﻨﻈﯿﻢ ال‬
                                                       ‫أي ﻣﺜﻞ‬




                                                 ‫ﻟﮫ ﻧﻔﺲ ﻃﺮﯾﻘﺔ اﻟﺘﻌﺮﯾﻒ‬
                                               addWidget ‫ﻟﻜﻦ ﻻ ﻧﺴﺘﻌﻤﻞ‬
                                QLineEdit‫ و ھﻮ‬widget ‫ و ﻧﺴﺘﻌﻤﻞ ﻓﻘﻂ ﻧﻮع واﺣﺪ ﻣﻦ‬addRow ‫ﺑﻞ‬


#ifndef DEF_MAFENETRE

#define DEF_MAFENETRE

#include <QtGui>

class MaFenetre : public QWidget

{

public :

MaFenetre();

private :

QLineEdit *b1;

QLineEdit *b2;

QLineEdit *b3;

};
#endif




#include"mafenetre.h"

MaFenetre::MaFenetre() : QWidget()

{

b1=new QLineEdit ("");

b2=new QLineEdit ("");

b3=new QLineEdit ("");

QFormLayout *layout=new QFormLayout;

layout->addRow("nom",b1);//‫ إﺿﺎﻓﺔ اﻟﺰر اﻷول ﻟـ‬layout

layout->addRow("prenom",b2);//‫ إﺿﺎﻓﺔ اﻟﺰر اﻟﺜﺎﻧﻲ ﻟـ‬layout

layout->addRow("class",b3);//‫ إﺿﺎﻓﺔ اﻟﺰر اﻟﺜﺎﻟﺖ ﻟـ‬layout

setLayout(layout);

//‫ھﻨﺎ إدﻣﺎج اﻟﻼﯾﻮت داﺧﻞ اﻟﻨﺎﻓﺬة ﻟﻜﻲ ﯾﺘﻔﻌﻞ دوره‬

}

                                                  :‫اﻟﻨﺘﯿﺠﺔ‬

				
DOCUMENT INFO
Shared By:
Tags:
Stats:
views:161
posted:8/26/2012
language:
pages:26