VirtualBox ja Qt - Esimerkkiprojekti

[size=150]Johdatus & alkutarinaa[/size]
Tämän artikkeli käsittelee lyhyesti Nokian ylläpitämää ja kehittämää QT-ohjelmointi ympäristöä, sekä hyvin lyhyesti Oraclen Virtualbox (tästä eteenpäin Vb) ohjelmaa. Jos artikkeli on suunnattu aloittelijalle, joten mitään monimutkaista koodi iloittelua ei ole. Päädyin käyttämään virtuaalista levyä lähinnä helpomman kokeilun ja siirrettävyyden takia. Alustana käytän WinXP:tä, mutta Qt ja Vb pyörivät myös Mac- ja Unix-järjestelmissä. Omaan taustaani liittyy elektroniikan, tietoliikennetekniikan ja ohjelmoinnin opiskelu. Työskentelen elektroniikan ja automaation parissa. Oletan artikkelin lukijalta jonkin verran tietämystä tietokoneista, elektroniikasta ja ohjelmoinnista.

[size=150]Käytettävät ohjelmat[/size]

Lataa Qt täältä. Artikkelissa versio 2010.5
Lataa Virtualbox täältä. Atikkelissa versio 4.0.4

QT
Qt [kju:t] on alustariippumaton ohjelmien ja GUI:den kehitysympäristö, jota voidaan käyttää myös komentorivi- ja palvelinohjelmistojen kehittämiseen. Lisää tietoa Qt: sta löytyy täältä. Ohjelmointikielenä käytetään C++ :aa, mutta Qt:n oma luokkakirjasto on pääosassa. Luokkakirjasto on jaettu kymmeneen moduliin, joista yleisemmin käytetyt ovat Qt Core Module ja GUI Module.

VirtualBox
Virtualbox:n virallinen nimi on Oracle VM VirtualBox. Ohjelma luo virtuaalisen kovalevyn ja mahdollistaa eri käyttöjärjestelmien virtualisoinnin. Vb löytyy lähes kaikkiin käyttöjärjestelmiin ja siitä on kaksi eri versiota, suljettu täysversio PUEL-lisensillä ja avoin OSE-versio. Lisää tietoa suomeksi ja englanniksi. Vb mahdollistaa käyttöjärjestelmien ja ohjelmien kokeilun ilman muutoksia nykyiseen kokoonpanoon.

[size=150]Vb asennus ja virtuaalikoneen luonti[/size]
Ensin asennetaan Vb nykyiseen k√§ytt√∂j√§rjestelm√§√§n (itsell√§ Win7), asennus on melko nopeaa ja menee ‚Äúnext,next,(valitse pikakuvakkeet) next,yes,install‚ÄĚ odottelua ‚ÄúJatka asentamista x 6, Finish.‚ÄĚ-tyyppisell√§ toiminnalla. Luodaan uusi virtuaalikovalevy. Siit√§ kertoo seuraava video.

Youtube: RP lukija-artikkeli: Virtuaalikoneen luonti ja levykuvan liittäminen

Huomattavia asioita:

  • Asennettava OS (alasveto valikko alussa)
  • RAM-muistin m√§√§r√§
  • Kiintolevyn tyyppi, dynaaminen/kiinte√§ ja sen maksimikoko
  • Asennusmedian m√§√§ritt√§minen (t√§ss√§ tapauksessa example.iso)

[size=150]Virtuaalikoneen käyttöönotto[/size]
Asennetaan haluttu k√§ytt√∂j√§rjestelm√§ virtuaalilevylle. Eli asennus k√§yntiin ja odottelemaan. Virustutkien yms asennus on omasta halusta kiinni, itse asensin 7-zipin ja Aviran. Kun ohjelma on asennettu, asennetaan Guest addons osa. N√§in saadaan virtuaalikoneen k√§yt√∂st√§ saumattomampaa. Kohdasta ‚ÄúLaitteet‚ÄĚ tai painamalla ‚ÄúHost + d‚ÄĚ (host viittaa n√§pp√§imeen, jolla irroitaudutaan virtuaalikoneesta, yleens√§ oikea ctrl). T√§st√§ asennuksesta ei ole videota, koska otin videot ennen artikkelin kirjoittamista. Alla on kuitenkin kuvankaappaus WinXP:n Guest addons asennuksen aloituksesta.


Guest Addons aloitusruutu

Seuraavaksi jaetaan jokin isäntä-OS:n kansio, jotta saadaan helposti siirrettyä tiedostoja käyttöjärjestelmien välillä. Alla oleva video kertoo lisää asennuksesta.

Youtube: RP lukija-artikkeli: Jaetun kansion luonti Vb:ssä

Seuraavaksi asennetaan QT. Eli asennus käyntiin, vastaillaan tuttuihin kysymyksiin ja hetken ajan päästä QT on asennettu. Olemme vihdoinkin valmiit aloittamaan koodauksen.

[size=150]QT:n käynnistys ja uuden projektin luonti[/size]
Alla olevassa videossa k√§ynnistet√§√§n Qt creator ja luodaan uusi widget-tyypin ohjelma. Qt:n avauduttua k√§yd√§√§n nopeasti n√§ytt√§m√§ss√§ mit√§ valikoista l√∂ytyy. Valitaan ‚ÄúCreate project‚ÄĚ ja sitten tehd√§√§n muutama kriittinen valinta ohjelman suhteen. Qt:ssa on kolme eri perustyyppist√§ ohjelmaa, widget, mainwindow ja dialog. Itse k√§yt√§n widgetti√§ kun kokeilen uutta tai teen pienen projektin. Main window on suuremman kokonaisuuden ohjelma. Lis√§√§ tietoa englanniksi luokista ja niiden k√§yt√∂st√§ t√§√§lt√§. Seuraavaksi p√§√§tet√§√§n teht√§vien tiedostojen nimet ja luodaanko UI tiedosto vai ei. Sitten siirryt√§√§n version hallintaan. Sitten valitaan k√§yt√∂ss√§ oleva QT versio. Lopuksi aukeaa UI tiedoston n√§ytt√∂.

Youtube: RP lukija-artikkeli: Qt:n käynnistys ja projektin luonti

[size=150]Käyttöliittymän luonti ja [/size]

Videolla tehd√§√§n UI esimerkki ohjelmaan ja k√§yd√§√§n hieman l√§pi Qt:n perusn√§ytt√∂j√§. Videolla on notepad pohjainen ‚Äúselostus‚ÄĚ. K√§ytt√∂liittym√§√§ ei ole ‚Äúpiirt√§√§‚ÄĚ vaan se voidaan tehd√§ suoraan koodilla. Ohjelmallisesti on helpompi luoda geneerinen k√§ytt√∂liittym√§. Jos esimerkiksi halutaan luoda l√§mp√∂tilan√§ytt√∂ tietokoneelle, niin voidana mikrolta pyyt√§√§ l√§mp√∂mittareiden m√§√§r√§ ja luoda tarvittava m√§√§r√§ numeron√§ytt√∂j√§. Videolla otetaan k√§ytt√∂√∂n my√∂skin QT assistant ohjelma, jossa l√∂ytyy tarvittavat luokkien toiminnallisuudet ja niiden kutsut sek√§ m√§√§ritykset.

Youtube: RP lukija-artikkeli:Qt, UI:n tekeminen ja perusnäyttöjen läpikäynti

[size=150]Toiminnallisuuden koodaus[/size]
Seuraavaksi tehd√§√§n v√§h√§n koodia, jotta k√§ytt√∂liittym√§n alle saadaan toimintaa. Koodit ja niiden muutokset l√∂ytyy alta. Videon koodista puuttuu kommentit, jotka olen lis√§nnyt alla oleviin koodeihin. Koodien per√§st√§ l√∂ytyy video, jossa koodien toiminnallisuus n√§kyy. Lis√§ksi videolla yhdistet√§√§n ui:n elementtien l√§hett√§m√§t signaalit koodissa oleviin funktiohin, t√§m√§kin tapahtuu graafisesti. My√∂skin koodin puolelta l√∂ytyy komento ‚Äúconnect‚ÄĚ, jonka k√§ytt√∂ l√∂ytyy esimerkiksi t√§√§lt√§. Esimerkkin√§ voidaan mainita ohjelmassakin oleva ‚Äúclicked‚ÄĚ-tapahtuma, joka tapahtuessa kutsutaan ‚ÄúbtnPressed‚ÄĚ-funktiota.

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

#include <QString> //lisätty QStringin käyttöönottoa varten, vastaa "normaalia" string muuttujaa

namespace Ui {
    class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
//luodaan yksityinen funktio, jota voidaan kutsua tapahtumalla (event)
private slots:
    void btnPressed();

private:
    Ui::Widget *ui;
    int numero; //yksityinen muuttuja
    QString txtLine; //tekstityyppinen muuttuja

};



#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    numero=0; //määritellään numerolle jokin alkuarvo
    ui->lcdNumber->display(10); //syötetään lcdNumber:lle arvo 10 -] tulee kun painaa "."
    ui->lineEdit->setText("käynnissä"); //eli tämä on kirjoitettu ui.lineEdit.setText("käynnissä");
}

Widget::~Widget()
{
    delete ui;
}

void Widget::btnPressed(){
    numero++; //kasvetaan numeroa yhdellä
    ui->lcdNumber->display(numero); //tulostetaan numero
    ui->lineEdit->setText("painettu"); //tulostetaan teksti
    if(numero%2){ //muuttuja jolla päätetään parillinen pariton
    ui->pushButton->setText("Pariton"); //kirjoitetaan painonappiin teksti
	}else{ //jos parillinen
	ui->pushButton->setText("Parillinen"); //kirjoitetaan teksti painonapppiin
		}
	}

Kopio koodit omaan projektiisi ja kokeile. Videolla ajetaan ohjelma ja kokeillaan toimivuus. Lopuksi muutetaan ohjelmaa hieman ja kokeillaan toimivuus.

Youtube: RP lukija-artikkeli: Koodin toimivuuden toteaminen ja muuttaminen

Nyt ensimm√§inen ohjelma on valmis. Jatkan artikkelia ‚ÄúRS232 portin liitt√§minen Qt:hen‚ÄĚ osiolla kun aika antaa my√∂ten.

‚ÄúFeel free to post your comment‚ÄĚ