qt framework - cs.tut.figrako/2008/luennot/qt_2008.pdf · qt designer • graafinen...

30
QT framework Juha Järvensivu [email protected] 2008

Upload: duongthuy

Post on 05-Jan-2019

267 views

Category:

Documents


0 download

TRANSCRIPT

QT framework

Juha Jä[email protected]

2008

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

QT Linguist

• QT:n lokalisointityökalu

QT Framework

• Cross-Platform Rich Client Development• Kaksoislinsensointi

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

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

QT Object Model

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

};

Signaalin emitointi// Kutsuu kaikkia connectoituneita.// kuuntelijoita..emit someSignal(2);

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