إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

تصميم حاسبة بسيطة مع Qt

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • تصميم حاسبة بسيطة مع Qt

    بسم الله الرحمن الرحيم

    في هذا الدرس سوف نصمم حاسبة بسيطة والكود تبعها موجود
    مع الامثلة التي تاتي مع QT
    لكن سوف نصممها تحت بيئة التطوير QDevelop من البداية
    دون الرجوع للكود وسوف احاول اضافة بعض التعديلات عليها


    نبدأ العمل بتشغيل QDevelop

    وانشاء مشروع جديد وتعديل الخيارات مثل الموجود في الصورة
    التالية



    والان نبدأ التعديل على الفورم وذلك بالضغط على dialog.ui
    حيث يبدا Qt Desginer بالعمل



    نقوم بحذف جميع الـWidgets الموجودة في الفورم ثم نضيف
    الاتي
    TextLabel عدد ٥
    spinBox عدد ٢
    lcdNumber عدد ١

    حتى يصبح الفورم بهذا الشكل



    الان نعدل خصائص الـWidgets كالاتي
    نبدأ مع TextLabel
    نعدل خاصية alignment الى center لكل من الـHorzintal
    والـVertical
    نعدل نعدل الخاصية Text لكل الـTextLabel حتى يصبح الفورم
    بهذا الشكل



    والان نعدل خصائص spinBox
    نعدل الـobjectName كالاتي
    الاول sBox1
    الثاني sBox2
    ونعدل خاصية maximum لكل منهما الى ٩٩٩
    ونعدل خاصية minimum لكل منهما الى -٩٩٩

    الان نضيف بعض التعديلات على الفورم حتى يظهر بشكل جيد
    نضيف Vertical spacer عدد ٤ فوق كل من + و = و lcdBox و Output

    الان حدد كل من input 1 و sBox1 ثم اضغط على
    Lay Out Vertically

    وافعل ذلك مع كل Widgets فوق بعض

    حتى يصبح الفورم بهذا الشكل



    ثم ازل التحديد عن جميع الـWidgets واضغط على Lay Out in a Grid

    وغير حجم الفورم ليصبح بهذا الشكل



    الان احفظ العمل واغلق Qt Desginer

    نرجع الان لـQDevelop

    نبدأ الان بكتابة الكود

    نبدأ اولا بالتصريحdeclare عن بعض الدوال
    لفعل ذلك افتح الملف dialogimpl.h
    وقم باضافة الاسطر الاتية له

    كود:
        void on_sBox1_valueChanged(int value);
        void on_sBox2_valueChanged(int value);
    فيصبح الملف بهذا الشكل

    كود:
    #ifndef DIALOGIMPL_H
    #define DIALOGIMPL_H
    //
    #include "ui_dialog.h"
    //
    class DialogImpl : public QDialog, public Ui::Dialog
    {
    Q_OBJECT
    public:
    	DialogImpl( QWidget * parent = 0, Qt::WFlags f = 0 );
    private slots:
        void on_sBox1_valueChanged(int value);
        void on_sBox2_valueChanged(int value);
    };
    #endif
    الان ناتي للملف dialogimpl.cpp

    ونضيف الاسطر الاتية
    كود:
    	connect( sBox1, SIGNAL( valueChanged() ), this, SLOT( on_sBox1_valueChanged() ) ); 
    	connect( sBox2, SIGNAL( valueChanged() ), this, SLOT( on_sBox2_valueChanged() ) );
    وهي لربط تغير قيمة الـspinBox بالدالة التي تقوم بحساب ناتج الجمع

    الان نقوم بكتابة الدالتين
    كود:
    void DialogImpl::on_sBox1_valueChanged(int value)
    {
        lcdNumber->display(QString::number(value + sBox2->value()));
    }
    
    void DialogImpl::on_sBox2_valueChanged(int value)
    {
        lcdNumber->display(QString::number(value + sBox1->value()));
    }
    عمل الدالتين متشابة
    فهي تقوم بجمع قيمة spinBox الاول والثاني معا ثم تعرض
    الناتج في lcdBox

    وهذا هو ملف dialogimpl.cpp بعد اجراء التعديلات السابقة عليه
    كود:
    #include "dialogimpl.h"
    //
    DialogImpl::DialogImpl( QWidget * parent, Qt::WFlags f) 
    	: QDialog(parent, f)
    {
    	setupUi(this);
    	
    	connect( sBox1, SIGNAL( valueChanged() ), this, SLOT( on_sBox1_valueChanged() ) ); 
    	connect( sBox2, SIGNAL( valueChanged() ), this, SLOT( on_sBox2_valueChanged() ) ); 
    }
    //
    void DialogImpl::on_sBox1_valueChanged(int value)
    {
        lcdNumber->display(QString::number(value + sBox2->value()));
    }
    
    void DialogImpl::on_sBox2_valueChanged(int value)
    {
        lcdNumber->display(QString::number(value + sBox1->value()));
    }
    //
    الان قم بعمل Build و Debug

    وهذه هي الصورة النهائية للبرنامج



    سوف اضيف على هذا البرنامج بعض التعديلات لاحقا ان شاء الله

  • #2
    بارك الله فيك أخي ,,

    درس ولا أروع من واحد روعة,,

    أتحفنا بالمزيد من الqt ,,

    تحياتي,,

    La vie est complexe car nous avons tous une partie réelle et une partie imaginaire....

    تعليق


    • #3
      اهلا وسهلا بك اخي AmiZya

      نورت الموضوع وشكرا على المرور الجميل

      تعليق


      • #4
        شرح سهل وروعه بارك الله فيك

        كثر من هالدروس الحلوه
        لا تنسى ذكر الله ,,

        تعليق


        • #5
          اهلا وسهلا بك اخي L!NuXaC

          وشكرا على المرور الجميل

          تعليق


          • #6
            بارك الله فيك استاذ / geo_saleh


            وكل الشكر على المواضيع القيمه ..

            bad3r
            :argeeleh:
            Twitter
            : @Linux4SA

            تعليق


            • #7
              ملاحظة مهمة جدا

              ضع علامة // امام السطرين الذين يربطان حدث تغير قيمة spinBox
              بالكود

              حتى تصبح بهذا الشكل
              كود:
              //	connect( sBox1, SIGNAL( valueChanged() ), this, SLOT( on_sBox1_valueChanged() ) ); 
              //	connect( sBox2, SIGNAL( valueChanged() ), this, SLOT( on_sBox2_valueChanged() ) );
              طبعا انت تعرف ان هذه العلامه // تجعل السطر مجرد note ولا يتم
              ترجمته اثناء بناء البرنامج

              فماذا تتوقع ان يحدث اذا اعدت بناء البرنامج!؟


              لقد اشتغل البرنامج بدون اي مشاكل

              لماذا

              بكل بساطه لاننا اضفنا سطرين مالهم داعي؟ :gotcha:

              حيث ان الدالة valueChanged موجودة اصلا ضمن QSpinBox Class
              ولا تحتاج الى ربط

              تعليق


              • #8
                اهلا وسهلا بك استاذ بدر نورت الموضوع

                تعليق


                • #9
                  السلام عليكم
                  بارك الله فيك اخي صالح، واصل و انا من المتتبعين لمواضيعك الشيقة.
                  سوف اعود بعد التطبيق ^_^

                  تعليق


                  • #10
                    بارك الله فيك يا qt-man... ^_~
                    GCS

                    تعليق


                    • #11
                      درس سهل ورائع

                      تعليق


                      • #12
                        fakir و CPU و عبدالعزيز

                        شكرا لمروركم الجميل

                        وردودكم المشجعه

                        تعليق


                        • #13
                          مشكور أخى الكريم ...... زادك الله علماً

                          سيتم دراسة الموضوع وتطبيقه .


                          just a User innately
                          اللهم اهدنا إلى الطيب من القول ؛ واهدنا إلى صراط الحميد

                          تعليق


                          • #14
                            شكـرا جزيلالك علي الدرس السلس وفي انتظار المزيد

                            تعليق


                            • #15
                              اهلا وسهلا بك اخي Mutati0N

                              نورت الموضوع

                              تعليق

                              يعمل...
                              X