Qt-ohjelmointi
Libraryn luominen, numeerisen tiedon lukeminen ja tulostaminen

Harjoituksessa tutkitaan kuinka library luodaan ja kuinka sitä käytetään sovelluksessa. Lisäksi tutkitaan kuinka LineEdit-kentästä luetaan arvo int-tyyppiseen muuttujaan ja tarkistetaan, että annettu arvo on kokonaisluku. Ja lisäksi kuinka int-muuttuja muokataan QStringiksi (jotta se voidaan tulostaa käyttöliittymään).

Librarylle käytetään Windowsissa tarkenninta dll ja Linuxissa tarkenninta so. Ne ovat valmiiksi käännettyjä kooditiedostoja, joita ei voidan kuitenkaan suorittaa, kuten exe-tiedostot. Libraryjä voidaan tehdä, kun halutaan jokin osa koodia itsenäiseksi kokonaisuudeksi. Samaa Libraryä voidaan hyödyntää myös useassa sovelluksessa.

Miksi kannattaisi tehdä library Qt:ssa? Voit lukea perusteluja tästä linkistä

LineEdit:stä luettu tieto on aina QString-tyyppiä, jos sitä halutaan käsitellä kokonaislukuna voidaan käyttää toInt-metodia seuraavasti:
int year=ui->lineEditYear->text().toInt(). Jos käyttäjä kuitenkin kirjoittaa tekstikenttään vahingossa kirjaimia, voi sovellus toimia virheellisesti. Esimerkissä esitetään kuinka tarkistetaan, että annettu tieto on kokonaisluku.

Labeliin kirjoitettava tieto on oltava QString-tyyppiä. Jos, tieto on kokonaisluku, se on muutettava Stringiksi tulostamista varten. Muunnos voidaan tehdä seuraavasti:
QString ageToPrint=QVariant(age).toString();, jossa siis age on kokonaisluku.

Libraryn luonti
  1. Luo uusi projekti, jonka tyypiksi valitset C++ Library ja anna sen nimeksi myLibrary
  2. Avaa tiedosto mylibrary.h ja lisää luokan alkuun rivit
    private:
        int yearOfBirth;
    
  3. Lisää jäsenmuuttujalle Setter
  4. Lisää tiedostossa mylibrary.h public osaan seuraava rivi
    int getAge();
    
  5. Luo getAge metodille toteutus cpp tiedostossa seuraavalla koodilla
    int MyLibrary::getAge()
    {
        QDate currentDate = QDate::currentDate();
        int currentYear = currentDate.year();
        return currentYear - yearOfBirth;
    }
    
  6. Käännä projekti
  7. Voit sulkea projektin
Libraryä hyödyntävä sovellus
  1. Luo uusi Qt Widget sovellus nimeltään use_dll, jossa on kuva1:n mukainen ui
  2. Käännä projekti ja luo buttonille clicked-event
cmake
  1. Avaa projektitiedosto (CMakeList.txt)
  2. Lisää tiedoston loppuun rivit:
    # Lisää kirjaston header-hakemisto
    target_include_directories(use_dll PRIVATE "C:/qt_applications/myLibrary")
    
    # Lisää linkitys kirjastoon
    target_link_libraries(use_dll PRIVATE "C:/qt_applications/build/libmyLibrary.dll.a")
    
  3. Aja build-valikosta komento run Cmake, jolloin näet menikö edellinen oikein
qmake
  1. Avaa projektitiedosto (pro-päätteinen tiedosto)
  2. Klikkaa projektitiedoston päällä hiiren oikeaa näppäintä ja valitse "Add Library" ja sitten "External Library"
  3. Klikkaa sitten Browse painiketta kohdassa Library File ja etsi kääntämäsi Libraryn build kansiosta tiedosto debug\libMyLibrary.a (Macissä tiedoston pääte on lib ja Linuxissa so) ja klikkaa Browse painiketta kohdassa Include path ja valitse kansio myLibrary.
    Poista ylimääräiset rastit kuten kuva2:ssa
  1. Avaa tiedosto mainwindow.h ja lisää sen alkuun rivi
    #include "mylibrary.h"
    
  2. Lisää buttonin clicked-eventiin koodit
    MyLibrary objectMyLibrary;
    bool ageNumberTest;
    int year=ui->lineEditYear->text().toInt(&ageNumberTest);
    if(!ageNumberTest){
        ui->labelResult->setText("Anna kokonaisluku!");
        ui->lineEditYear->setFocus();
    }
    else {
        objectMyLibrary.setYearOfBirth(year);
        int age=objectMyLibrary.getAge();
    
        QString ageToPrint=QVariant(age).toString();
        ui->labelResult->setText("Täytät tänä vuonna  "+ageToPrint);
    }
    
  3. Testaa sovellusta antamalla sekä kokonaislukuja, että kirjaimia.

kuva1


kuva1



Toggle Menu