Post on 05-Jan-2019
QT Framework
• QT Class Library• QT Designer• QT Assistant• QT Linguist
http://trolltech.com
QT Designer
• Graafinen käyttöliittymäeditori• Voidaan käyttää itsenäisenä ohjelmana tai
integroida kehitysympäristöön– Visual Studio integration– Eclipse integration
• Designer Demo– http://dist.trolltech.com/video/browser.html
QT Assistant
• Dokumentaatio• Erillinen help-ohjelma, joka voidaan
kustomoida käyttäjän tarpeiden mukaan• Toiminta samankaltaista kuin selaimissa
– Bookmarks– HTML– Next / Prev
Crossplatform environment
• Qt / Windows• Qt / MAC• Qt / X11• Qtopia Core (embedded Linux)• Qt Jambi (QT for Java)
Crossplatform environment
• Sovellukset ajetaan natiivisti (ei tulkata)– Tehokasta
• QT kapseloi käyttöjärjestelmäkohtaisia apeja– Tiedostojen käsittely– Verkko-ominaisuudet– Prosessit– Säikeet– Tietokanta yhteydet– jne.
Dual Lisencing Model
• Maksullinen kaupallinen versio– QT Console Edition– QT Desktop Light Edition– QT Desktop Edition
• Open Source versio– GPL (v2)
Qt Class Library Modules
• Core Module• GUI Module• Network Module• OpenGL 3D Visualization Module• Database Module• XML Module
QT Core Module
• QT Object Model• QT event processing model• QT container classes• Threading• Process Handling• File I/O
QThread
QString
QVector
QMetaType
QSettings
QObject
QPoint
QT GUI Module
• Käyttöliittymäkirjasto• Fontit• Styles
QButton
QWidget
QPen
QClipboard
QDialog
QImage
QResizeEvent
Hello world#include <QApplication>#include <QPushButton>
int main(int argc, char *argv[]){
QApplication app(argc, argv);QPushButton hello("Hello world!");hello.resize(100, 30);hello.show();return app.exec();
}
http://doc.trolltech.com/4.3/tutorial-t1.html
Parent object
QWindow* pWindow = new QWindow();QPushButton pButton = new QPushButton(pWindow);// The destructor of a parent object// destroys all child objects!delete pWindow;
QObject
QWidget
QPushButton
Constructor:QWidget(QWidget* pParent = 0);
QPointer
• ”Turvallinen osoitin”• Osoitin nollataan automaattisesti kun objekti
johon se osoittaa tuhotaan• Käytä QPointeria kuten normaaleja osoittimia
QPointer<QLabel> pLabel = new QLabel;QPointer<QLabel> pLabel2 = pLabel;pLabel->setText(”otsikko”);// Myös pLabel2 nollautuu!delete pLabel;
Signals and Slots
• QT:n callback-tekniikka
http://doc.trolltech.com/4.3/signalsandslots.html
Signals and Slots
QPushButton* pButton = new QPushButton();connect(pButton,SIGNAL(clicked()),this,SLOT(on
Clicked());
CMyClass::onClicked(){
// Add event handler code here}
Signals and Slotsclass CMyClass : public QObject{
Q_OBJECT
public:// declare public members here
private:// declace private members here
signals:void someSignal(int nIndex);
slots:void clicked();// slots work also as normal member function
};
Meta Object System
• Signaalit ja eventit tarvitsevat toimiakseen QT:nmeta-object mekanismia
• Kaikki QObject-luokasta suorasti tai epäsuorastiperityt objektit voivat hyödyntää meta-objectmekanismia
• Luokan header-koodiin pitää lisätä Q_OBJECTmakro
• Luokan käännetään meta-object kääntäjällä(moc) käännösprosessin yhteydessä (moc-file)
Meta Object Systemclass CMyClass : public QObject{
Q_OBJECT
public:// declare public members here
private:// declace private members here
signals:void someSignal(int nIndex);
slots:void clicked();// slots work also as normal member function
};
Layoutit (QLayout)• QHBoxLayout• QVBoxLayout• QGridLayout
QWidget *window = new QWidget;QPushButton *button1 = new QPushButton("One");QPushButton *button2 = new QPushButton("Two");QPushButton *button3 = new QPushButton("Three");QPushButton *button4 = new QPushButton("Four");QPushButton *button5 = new QPushButton("Five");QHBoxLayout *layout = new QHBoxLayout;layout->addWidget(button1);layout->addWidget(button2);layout->addWidget(button3);layout->addWidget(button4);layout->addWidget(button5);window->setLayout(layout);window->show();
Paint Systemclass RenderArea : public QWidget{
Q_OBJECTprotected:
}
RenderArea::paintEvent(QPaintEvent* event){
QPainter painter(this);painter.setPen(pen);QRect rect(10, 20, 80, 60);painter.drawEllipse(rect);painter.restore();
}
Eventvoid paintEvent(QPaintEvent *event);
QT event loop• Kapseloi käyttöjärjestelmän eventit• Ohjelmoija voi luoda omia eventtejä (QEvent::user)• QObject-luokasta perityt luokat voivat vastaanottaa eventtejä• Yleensä virtuaalifunktiota, jotka ylimääritellään omassa koodissa• Esim
– QMouseEvent– QKeyEvent– QTimerEvent– QResizeEvent– QCloseEvent– QPaintEvent
• QtCoreApplication::sendEvent();• QtCoreApplication::postEvent();
virtual void paintEvent ( QPaintEvent * event )
void event(QEvent* event);bool MyWidget::event(QEvent *event){
if (event->type() == QEvent::KeyPress){
QKeyEvent *ke = static_cast<QKeyEvent *>(event);if (ke->key() == Qt::Key_Tab){
// special tab handling herereturn true;
}}else if (event->type() == MyCustomEventType){
MyCustomEvent *myEvent = static_cast<MyCustomEvent *>(event);// custom event handling here return true;
}return QWidget::event(event);
}
Model / View programming
• MVC-variaatio, jossa V+Csulautettu yhteen
• Model ja Viewkommunikoivat QT:n signal-slot mekanismilla
• Delegate-luokkaa huolehtiivarsinaisesta piirrosta
Model / View programming• Views
– QListView– QTableView– QTreeView– QAbstarctItemView
• Models– QAbstarctItemModel– QDirModel– QStandardItemModel– QSqlQueryModel– QAbstractListModel
Lähteet• Throlltech
– http://trolltech.com/products/qt• QT in depth
– http://trolltech.com/products/qt/indepth/indepth• QT Reference Documentation
– http://doc.trolltech.com/4.3/index.html• QT Model-View programming
– http://doc.trolltech.com/4.3/model-view-programming.html• QT Tutorial
– http://doc.trolltech.com/4.3/tutorial.html• QT Classes
– http://doc.trolltech.com/4.3/classes.html