السلام عليكم
لفت إنتباهى الأخ مسلم عادل لل 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
ال 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 شكلها مبشر وابسط
نيجى ل QT
بتسمحلك تكتب برامج ادائها عالى وبصورة منظمة
بتستخدم SIGNALS/SLOTS Technique
مش شرط إنك تكتب برامجك بال C++ تقدر تكتبها بال Python بإستخدام PyQT
او Java
وتقدر تستخدمها مع اى لغة من لغات ال .NET !! ايوه believe it
وفى طبعا غيرهم كل اللى عليك تفتح Google !
فى شئ مهم عايز اوضحه -طبعا للناس اللى لسه ناوية تبدأ-
تقدر تستخدم QT Designer فى تصميم ال GUI وتتخزن فى ملف .ui
ui=user interface وهى ملف ui وبيكون فيه كل مايتعلق بالتصميم بتاعك ودا فى حد ذاته شئ كويس عشان يضمن ال Portability بين اللغات لأن ا للى هيتم كالتالى ..
انت هتحول ملف ال .ui دا ل class مكتوب باللغة اللى هتكتب بيها ال Project بإستخدام tool زى uic
فيحول ملف ال ui دا لل Class فيه ال GUI Logic وكل اللى عليك إنك implement ال CODE !
ملف ال ui بيكون مشابه لدا
ولما تستخدم uic هيتحول ل C++
وتكمل انت الباقى !
ال 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
6- مش بتستخدم حاجة زى VM !
تقدر تطلع على ال Features من هنا
افضل شيئين لل QT
1- C++ GUI Programming with Qt
2- ال QT Documentation
وكل ماكان معاك Editor يكون فيه حاجات زى ال Code Completion وال Syntax highlighting يكون افضل
لفت إنتباهى الأخ مسلم عادل لل 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
ال 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 شكلها مبشر وابسط
نيجى ل QT
بتسمحلك تكتب برامج ادائها عالى وبصورة منظمة
بتستخدم SIGNALS/SLOTS Technique
مش شرط إنك تكتب برامجك بال C++ تقدر تكتبها بال Python بإستخدام PyQT
او Java
وتقدر تستخدمها مع اى لغة من لغات ال .NET !! ايوه believe it
وفى طبعا غيرهم كل اللى عليك تفتح 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>
كود:
/******************************************************************************** ** 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
6- مش بتستخدم حاجة زى VM !
تقدر تطلع على ال Features من هنا
افضل شيئين لل QT
1- C++ GUI Programming with Qt
2- ال QT Documentation
وكل ماكان معاك Editor يكون فيه حاجات زى ال Code Completion وال Syntax highlighting يكون افضل
تعليق