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”