Esimerkissä tutkitaan kuinka luodaan Library, jossa on myös käyttöliittymä. Tehdään Library nimeltään mydll.
Libraryyn lisätään Ui, jossa on painike ja tekstikenttä. Kun painiketta painetaan käyttäjä antama arvo "palautetaan" Librarystä ja Ui suljetaan.
Librarystä "exportataan" funktiot
- openDllDialog, joka avaa Ui-formin
- returnFromDll, joka palauttaa Librarystä arvon
Kun Library(mydll) on luotu, tehdään "exe-projekti" eli sovellus, joka hyödyntää Libraryä. Sovellus toimii seuraavasti:
- Kun sovellus käynnistetään avautuu oheinen Ui
Kuva1. Suorituksen aloitus
- Kun painiketta painetaan avautuu oheinen Ui(joka on libraryssä)
Kuva2. Libraryn Ui
- Kun edelliseen kirjoitetaan jokin sana (esim. test), Ui suljetaan ja palataan aiempaan Ui:hin, joka näyttää tältä
Kuva3. Suorituksen loppu
Library (dll)
- Luo uusi projekti (C++ Library) nimeltään mydll
- Type=Shared Library
- Qt module=Gui
- Lisää Ui:
- Klikkaa projektin nimeä->Add New->Qt->Qt Designer Form Class
- Valitse Dialog without Buttons
- Anna nimeksi Dialog
- Muokkaa pro-tiedostoa seuraavasti
QT += gui
QT += widgets
- Lisää Ui-formiin painike(nimi=btnSet) ja lineEdit(nimi=textValue)
- Luo buttonille clicked-slot
- Lisää dialog.h tiedoston private osaan rivi
QString dialogValue;
- Lisää edelliselle muuttujalle Getter ja Setter
- Lisää buttonin clicked slottiin rivit
QString a=ui->textValue->text();
this->setDialogValue(a);
this->close();
- Muokkaa tiedosto mydll.h muotoon
#ifndef MYDLL_H
#define MYDLL_H
#include "mydll_global.h"
#include "dialog.h"
#include <QString>
#include <QObject>
#include <QDebug>
class MYDLL_EXPORT Mydll
{
public:
Mydll();
void openDllDialog();
QString getDllValue() const;
private:
Dialog *objectDialog;
QString dllValue;
};
#endif // MYDLL_H
- Muokkaa tiedosto mydll.cpp muotoon
#include "mydll.h"
Mydll::Mydll()
{
}
void Mydll::openDllDialog()
{
objectDialog=new Dialog;
objectDialog->exec(); //huom! Tässä on käytettävä nimenomaan exec-metodia
dllValue=objectDialog->getDialogValue();
qDebug()<<"opendialog dllValue="+dllValue;
delete objectDialog;
}
QString Mydll::getDllValue() const
{
qDebug()<<"getDialogvalue dllValue="+dllValue;
return dllValue;
}
- Käännä sovellus (huom! Et voi suorittaa sitä)
Suoritettava sovellus ("exe-projekti")
- Luo uusi Qt-Widget sovellus (nimeksi vaikka useDll)
- Lisää pro-tiedostossa Library (ohjeet alla) ja käännä sovellus
- Lisää Ui:ssa button ja lineEdit (kts. kuva3)
- Lisää tiedostoon mainwindow.h rivi
#include "mydll.h"
Ja private osaan rivi
Mydll *objectMyDll;
- Lisää luokan muodostimeen (tiedostossa mainwindow.cpp) rivi
objectMyDll=new Mydll;
Ja tuhoa em. olio luokan tuhoajassa.
- Lisää buttonin clicked slottiin rivit
objectMyDll->openDllDialog();
QString valueFromDll=objectMyDll->getDllValue();
ui->textValue->setText(valueFromDll);
- Testaa, että sovellus toimii edellä kuvatulla tavalla.
Libaryn lisääminen
Seuraava ohje toimii vain kun käytössä on qmake
- pro-tiedostossa klikkaa tyhjällä alueella hiiren oikeaa painiketta ja valitse "Add Library"
- avautuneessa ikkunassa valitse "External Library" ja paina Next
- tee valinnat kuten alla (riippuen käyttöjärjestelmästäsi)