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

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

Why to use QT ?

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

  • Why to use QT ?

    السلام عليكم


    لفت إنتباهى الأخ مسلم عادل لل QT من ناحية تصميم ال GUI لل Applications
    ال QT بتديك فرصة إنك تكتب C++ Applications قوية وتعمل على اى نظام تشتغل عليه QT!

    اولا للى مش يعرف QT :
    Qt is a comprehensive C++ framework for developing cross-platform GUI applications using a "write once, compile anywhere"
    هحكى تجربتى لحد ايام فاتت لما بدأت احاول مع ال QT -حاليا بستخدمها مع ال C++ وان شاء الله هنقل لل Python بعد ماستقر شوية

    لما كنت بدرس ال VB5-6 كان فى عجز كبيـر فى اللغة وفى ال Components نفسها غير إن شكلها مش ظريف ولازم تضيف Skins وحوارات غير إنها مش قوية او حتى ممتعة فكانت شئ مش يشجع على الإهتمام بال UI فكان غالبا الواحد بينفض بالعربى ههههههههه

    وبعد كدا VCL Controlsو غيرها وانا بصراحة عمرى ماحبيت شغل Pascal و Delphi

    دخلت فى ال Java فكانت البداية فى شغل ال GUI إن الواحد إتعلم ال AWT وبعده SWING
    http://java.sun.com/docs/books/tutorial/uiswing/
    http://java.sun.com/j2se/1.5.0/docs/guide/awt/

    ال Swing ال Components بتاعتها شكلها افضل والإتنين انا شايف إنهم تقال ؟ -رأى شخصى-

    وبعد كدا إنتقالة للينكس فكانت Python هى افضل خيار فى رأيى وكانت اى حاجة بفكر اكتبها بتبقة Console Application لسببين
    1- مش بحب شغل ال GUI ودا هيضرنى فى المستقبل بدون شك :D
    2- مش كان فى GUI Builder كويس فأكيد إنى لو حبيت اعمل اى GUI فهضطر اكتب بإيدى ومن الآخر عذاب ،وكان الإصدارة من BOA Constructor الأولى غير مشجعة بالمرة
    وهو بالمناسبة معتمد على wxPython – وهى Wrapper ل WxWidgets- الإصدار الجديد منه كويس ولكن شكله معقد بعض الشئ. او إنى استخدم Glade وبكل صراحة خنيق !


    من خلال دراسة كورس ال MCAD وتحديدا مع ال C#.NET اتعرضت ل Windowsforms وهى Namespace خاصة بال Forms وال Widgets(controls) , .. etcولحد فترة كنت معتقد إنها الأفضل يمكن عشان السهولة
    VS.NET او SharpDevelop كانو بيريحو الواحد من موضوع ال GUI -هى بصراحة الأفضل فى رأيى لو جيت اكتب اى .NET Application-

    ال GTK+ بالمناسبة عمرى مابستسيغها .. لأنى مش بحب اى حاجة تدخلنى فى ال C خصوصا إنى مش كنت اعرف C كويس وقتها

    ال GTKmm وهى ال Official C++ Interface for GTK+ -void شكلها مبشر وابسط
    http://www.gtkmm.org/


    نيجى ل QT
    بتسمحلك تكتب برامج ادائها عالى وبصورة منظمة
    بتستخدم SIGNALS/SLOTS Technique
    مش شرط إنك تكتب برامجك بال C++ تقدر تكتبها بال Python بإستخدام PyQT
    http://www.riverbankcomputing.co.uk/pyqt/

    او Java
    http://trolltech.com/products/qt/jambi

    وتقدر تستخدمها مع اى لغة من لغات ال .NET !! ايوه believe it
    http://doc.trolltech.com/3.3/activeqt-dotnet.html

    وفى طبعا غيرهم كل اللى عليك تفتح Google !


    فى شئ مهم عايز اوضحه -طبعا للناس اللى لسه ناوية تبدأ-
    تقدر تستخدم QT Designer فى تصميم ال GUI وتتخزن فى ملف .ui
    ui=user interface وهى ملف ui وبيكون فيه كل مايتعلق بالتصميم بتاعك ودا فى حد ذاته شئ كويس عشان يضمن ال Portability بين اللغات لأن ا للى هيتم كالتالى ..
    انت هتحول ملف ال .ui دا ل class مكتوب باللغة اللى هتكتب بيها ال Project بإستخدام tool زى uic
    فيحول ملف ال ui دا لل Class فيه ال GUI Logic وكل اللى عليك إنك implement ال CODE !

    ملف ال ui بيكون مشابه لدا
    كود:
    <ui version="4.0" >
     <class>GoToCellDialog</class>
     <widget class="QWidget" name="GoToCellDialog" >
      <property name="geometry" >
       <rect>
        <x>0</x>
        <y>0</y>
        <width>223</width>
        <height>71</height>
       </rect>
      </property>
      <property name="windowTitle" >
       <string>Go To Cell</string>
      </property>
      <layout class="QVBoxLayout" >
       <item>
        <layout class="QHBoxLayout" >
         <item>
          <widget class="QLabel" name="label" >
           <property name="text" >
            <string>Cell Location:</string>
           </property>
           <property name="buddy" >
            <cstring>lineEdit</cstring>
           </property>
          </widget>
         </item>
         <item>
          <widget class="QLineEdit" name="lineEdit" />
         </item>
        </layout>
       </item>
       <item>
        <layout class="QHBoxLayout" >
         <item>
          <spacer>
           <property name="orientation" >
            <enum>Qt::Horizontal</enum>
           </property>
           <property name="sizeHint" >
            <size>
             <width>41</width>
             <height>20</height>
            </size>
           </property>
          </spacer>
         </item>
         <item>
          <widget class="QPushButton" name="okButton" >
           <property name="enabled" >
            <bool>false</bool>
           </property>
           <property name="text" >
            <string>OK</string>
           </property>
          </widget>
         </item>
         <item>
          <widget class="QPushButton" name="cancelButton" >
           <property name="text" >
            <string>Cancel</string>
           </property>
          </widget>
         </item>
        </layout>
       </item>
      </layout>
     </widget>
     <tabstops>
      <tabstop>lineEdit</tabstop>
      <tabstop>okButton</tabstop>
      <tabstop>cancelButton</tabstop>
     </tabstops>
     <resources/>
     <connections/>
    </ui>
    ولما تستخدم uic هيتحول ل C++
    كود:
    /********************************************************************************
    ** Form generated from reading ui file 'gotocelldialog.ui'
    **
    ** Created: Sat Sep 22 01:46:37 2007
    **      by: Qt User Interface Compiler version 4.3.0
    **
    ** WARNING! All changes made in this file will be lost when recompiling ui file!
    ********************************************************************************/
    
    #ifndef UI_GOTOCELLDIALOG_H
    #define UI_GOTOCELLDIALOG_H
    
    #include <QtCore/QVariant>
    #include <QtGui/QAction>
    #include <QtGui/QApplication>
    #include <QtGui/QButtonGroup>
    #include <QtGui/QHBoxLayout>
    #include <QtGui/QLabel>
    #include <QtGui/QLineEdit>
    #include <QtGui/QPushButton>
    #include <QtGui/QSpacerItem>
    #include <QtGui/QVBoxLayout>
    #include <QtGui/QWidget>
    
    class Ui_GoToCellDialog
    {
    public:
        QVBoxLayout *vboxLayout;
        QHBoxLayout *hboxLayout;
        QLabel *label;
        QLineEdit *lineEdit;
        QHBoxLayout *hboxLayout1;
        QSpacerItem *spacerItem;
        QPushButton *okButton;
        QPushButton *cancelButton;
    
        void setupUi(QWidget *GoToCellDialog)
        {
        if (GoToCellDialog->objectName().isEmpty())
            GoToCellDialog->setObjectName(QString::fromUtf8("GoToCellDialog"));
        QSize size(223, 71);
        size = size.expandedTo(GoToCellDialog->minimumSizeHint());
        GoToCellDialog->resize(size);
        vboxLayout = new QVBoxLayout(GoToCellDialog);
        vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
        hboxLayout = new QHBoxLayout();
        hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
        label = new QLabel(GoToCellDialog);
        label->setObjectName(QString::fromUtf8("label"));
    
        hboxLayout->addWidget(label);
    
        lineEdit = new QLineEdit(GoToCellDialog);
        lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
    
        hboxLayout->addWidget(lineEdit);
    
    
        vboxLayout->addLayout(hboxLayout);
    
        hboxLayout1 = new QHBoxLayout();
        hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
        spacerItem = new QSpacerItem(41, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
    
        hboxLayout1->addItem(spacerItem);
    
        okButton = new QPushButton(GoToCellDialog);
        okButton->setObjectName(QString::fromUtf8("okButton"));
        okButton->setEnabled(false);
    
        hboxLayout1->addWidget(okButton);
    
        cancelButton = new QPushButton(GoToCellDialog);
        cancelButton->setObjectName(QString::fromUtf8("cancelButton"));
    
        hboxLayout1->addWidget(cancelButton);
    
    
        vboxLayout->addLayout(hboxLayout1);
    
        label->setBuddy(lineEdit);
        QWidget::setTabOrder(lineEdit, okButton);
        QWidget::setTabOrder(okButton, cancelButton);
    
        retranslateUi(GoToCellDialog);
    
        QMetaObject::connectSlotsByName(GoToCellDialog);
        } // setupUi
    
        void retranslateUi(QWidget *GoToCellDialog)
        {
        GoToCellDialog->setWindowTitle(QApplication::translate("GoToCellDialog", "Go To Cell", 0, QApplication::UnicodeUTF8));
        label->setText(QApplication::translate("GoToCellDialog", "Cell Location:", 0, QApplication::UnicodeUTF8));
        okButton->setText(QApplication::translate("GoToCellDialog", "OK", 0, QApplication::UnicodeUTF8));
        cancelButton->setText(QApplication::translate("GoToCellDialog", "Cancel", 0, QApplication::UnicodeUTF8));
        Q_UNUSED(GoToCellDialog);
        } // retranslateUi
    
    };
    
    namespace Ui {
        class GoToCellDialog: public Ui_GoToCellDialog {};
    } // namespace Ui
    
    #endif // UI_GOTOCELLDIALOG_H
    وتكمل انت الباقى !

    ال QT بإختصار هى الأفضل فى رأيى إذا كنت مستخدم KDE اكيد هتوافقنى ...

    إضافة إن QT
    1- بسيطة
    2-بتتكون من اكتر من 400 class بيساعدوك فى معظم البرامج -دا لو مش كلها- زى ال Databases, Networking, XML, .. etc
    3- موثوقية واداء عالى
    4- ال QT Designer وهو Forms Builder, GUI Layout يعنى هتساعد فى ال RAD
    RAD=Rapid Applications Developing
    5- إعتمادية من كتير من الشركات .. و تقدر تتأكد بنفسك لما تشوف عملاء Trolltech
    http://trolltech.com/customers
    6- مش بتستخدم حاجة زى VM !
    تقدر تطلع على ال Features من هنا
    http://trolltech.com/products/qt/features

    افضل شيئين لل QT
    1- C++ GUI Programming with Qt
    2- ال QT Documentation


    وكل ماكان معاك Editor يكون فيه حاجات زى ال Code Completion وال Syntax highlighting يكون افضل
    Programming-Fr34ks[dot]NET
    Ma Weblog
    ابدأ بتعلم Python | Ruby
    كتاب البايثون متوافر الآن
    لا اتواجد بهذا المنتدى ... للإتصال

  • #2
    الله يعطيك الف عافية
    لابد ان نسأل لماذا......
    لابد ان نبحث عن أجوبة.....
    لابد ان تكون متوافقة مع العقل و الواقع.....
    الحمد لله الذي منحنا هذه النعم.

    تعليق


    • #3
      الحمد لله اني ساعدتك في لفت انتباهك الى عالم Qt الرائع
      موقع وثائق لينوكس العربية
      موقع مختص بتوثيق لينكس

      ((شاركنا بمواضيعك، أفكارك، إقتراحاتك، ومساعدتك لنا هي أساس إستمرارنا ... فلا تبخل علينا بما لديك ولو كان بنظرك قليل، فهو بنظرنا الكثير))





      تعليق


      • #4
        حبيبنا / StrikerX

        تم تسيف الموضوع بل جميع مواضيعك الرائعه لكي استفيد منهاا مستقبلاً..

        كل الود

        bad3r

        Twitter
        : @Linux4SA

        تعليق


        • #5
          مقـال ممتـاز يا احمـد وبالتوفيق يا حبي علطـول

          تعليق


          • #6
            شكرا على المرور وارجو إنه يكون وضحلكم ولو شئ بسيط عن ال Qt.
            Programming-Fr34ks[dot]NET
            Ma Weblog
            ابدأ بتعلم Python | Ruby
            كتاب البايثون متوافر الآن
            لا اتواجد بهذا المنتدى ... للإتصال

            تعليق


            • #7
              اهلا باخونا StrikerX ،،

              موضوع 100% :clown:
              الجميل في ال Qt كما ذكرت هو عدم وجود VM ولا بطيخ ..

              فالنسخة الخاصة بwindows هي عبارة عن تغليف ل win32 api و GDI
              اما النسخة الخاصة ب linux فهي مبنية على xlib ,x11

              وهذه ميزة مهمة تحسب لصالح Qt .
              كذلك امكانية العمل على عدة منصات ،، هو شيء رهيب
              سهولة البرمجة بها ،، لانها تستخدم مسميات بسيطة جدا ،، ومفاهيم رائعة>> signal/slot

              لا يوجد مقارنة بين MFC و Qt ،، ففي MFC يوجد تعقيدات ما لها اي داعي ..
              حيث يتم الدخول في تفاصيل غريبة .
              وكذلك لديها مسميات عجبية جدا ،،
              وكذلك هي مصممة بشكل سيء جدا ،، فتارة نراها سي وتارة سي++ !!
              وكذلك قرأت عن ان الفريق الذي قام ببرمجتها هو فريق مبتدئ في مواضيع ال Object Oriented Design

              اما Qt فهي جنة للمبرمجين ،، full OO ،، great syntax ،، cross platform
              وكذلك open source ،،

              هل من معارض ؟؟؟:angry_red:

              الى اللقاء ،،
              وان شاء الله نشوف مبرمجين بهذه الاداة الرائعة ،،

              تعليق

              يعمل...
              X