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.
myLibrary
private:
int yearOfBirth;
int getAge();
int MyLibrary::getAge()
{
QDate currentDate = QDate::currentDate();
int currentYear = currentDate.year();
return currentYear - yearOfBirth;
}
# 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")
#include "mylibrary.h"
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);
}