I3MUP1+-+Exercise+11+-+QT+Intro

=Exercise 11 - QT=

Exercise 1 - HelloWorld
Ud fra teori slides var det ret nemt at lave en Hello World applikation: code format="cpp" int main(int argc, char *argv[]) {   QApplication app(argc, argv); QLabel *label = new QLabel("Hello world!"); label->show; return app.exec; } code

Exercise 2 - Button
Vi skulle lave en applikation som indeholder en button, og når der trykkes på den afsluttes programmet. Rimelig enkelt. Vi brugte google til at finde funktioner brugt i forbindelse med QPushButton. Vi prøvede samtidig at ændre lidt på Font.

code format="cpp" int main(int argc,char*argv[]) {   QApplication app(argc,argv);

QPushButton quit("QUIT"); quit.resize(75,30); quit.setFont(QFont("Times",18,QFont::Bold));

QObject::connect(&quit, SIGNAL(clicked),&app,SLOT(quit));

quit.show;

return app.exec; } code

Exercise 3.1 - Design in QT:
Efter lektionen var det rent at opstille det ønskede interface. Vi sørgede for at navngivning af alle elementer var som ønsket. Desuden ændrede vi parametrene for de 2 dails således at SpeedDial havde sit maksimum ved 180 og EngineDial havde sit maksimum ved 6000.

Exercise 3.2:
Vi skal kun vise vores design gui, og ikke have nogen funktionalitet. Vi benyttede qmake4host i mappen hvor .ui filen, og der dannes herefter en header fil. Denne headerfil indeholder en klasse som vi kan arve fra. En klasse laves: code format="cpp"
 * 1) include "ui_CC.h"


 * 1) include 
 * 2) include 
 * 3) include 
 * 4) include 

class CruiseControllerGUI : public QDialog, private Ui_Form { public: CruiseControllerGUI{ setupUi(this); }

void resizeEvent(QResizeEvent*) {       horizontalLayoutWidget->resize(size); } }; code Main: code format="cpp"
 * 1) include "CruiseController.h"

int main( int argc, char * argv[]) {   QApplication app(argc,argv); CruiseControllerGUI *guiObj = new CruiseController; guiObj->show; return app.exec; } code

Exercise 3.3:
Vi skal nu implementere funktionalitetrene i vores CruiseControllerGUI klasse. Dette valgte vi at gøre ved at benytte QTimer til. Applikationen fik hastigheden til at stige med 0.1 km/h per 50 millisekund. Dette skal dog kun gøres hvis fartpiloten er OFF. Når man trykker ON stiger hastigheden ikke længere, og LABEL_STATUS ændrer sig. Vi valgte ikke at implementere det store i det andet dial, da det er fuldstændig det samme som DIAL_SPEED. DIAL_RPM viste bare 2500 hvis fartpilot var OFF og 1000 hvis det var ON.

code format="cpp"
 * 1) ifndef CRUISECONTROLLERGUI_H
 * 2) define CRUISECONTROLLERGUI_H


 * 1) include "ui_CC.h"


 * 1) include 
 * 2) include 
 * 3) include 
 * 4) include 


 * 1) define MAX_SPEED 200

class CruiseControllerGUI : public QDialog, private Ui_Form {	Q_OBJECT public: CruiseControllerGUI {		setupUi(this);

/*		Timer for Speed Dial */		updateTimer_ = new QTimer(this); connect(updateTimer_, SIGNAL(timeout) , this , SLOT(updateSpeed)); updateTimer_->start(50);

/*		Timer for Engine RPM Dial */		speedTimer_ = new QTimer(this); connect(speedTimer_, SIGNAL(timeout), this, SLOT(incrementSpeed)); speedTimer_->start(50); // milliseconds

/*		Connection the Buttons */		connect(BUTTON_ON, SIGNAL(clicked), this, SLOT(activate)); connect(BUTTON_OFF, SIGNAL(clicked) , this , SLOT(deactivate));

cruiseOn_ = false; }

void resizeEvent(QResizeEvent*) {		horizontalLayoutWidget->resize(size); }

void setRPM(int rpm) {		rpm_ = rpm; }

public slots: void activate {		cruiseOn_ = true; LABEL_STATUS->setText("ON"); }

void deactivate {		cruiseOn_ = false; LABEL_STATUS->setText("OFF"); }

void updateSpeed {		DIAL_SPEED->setValue(speed_); SPEED_VALUE->setText(QString::number(speed_));

DIAL_RPM->setValue(rpm_); RPM_VALUE->setText(QString::number(rpm_)); }

void incrementSpeed {		if(!cruiseOn_ && speed_ != MAX_SPEED) {			speed_ += 0.1; rpm_ = 2500; }		else rpm_ = 1000; }

private: QTimer* updateTimer_; QTimer* speedTimer_;

int rpm_; double speed_; bool cruiseOn_; };

code
 * 1) endif