Generarea codului sursă (altă metodă)
Īnapoi
Īnainte

Cap. 7. Generarea codului sursă (altă metodă)

Fără a folosi funcţionalitatea de subclasare din KDevelop

Pasul 1 - Verificaţi că aţi salvat forma cu numele sigcreatedlg.ui şi īnchideţi Qt Designer. Dacă deschideţi acest fişier cu un editor de text, veţi vedea că nu este cod sursă C++, ci cod de marcare XML. Cu Qt Designer vine şi un utilitar de linie de comandă special numit uic. Această comandă este folosită pentru a converti fişierul .ui īn fişiere .h şi .cpp. Īn mod normal această operaţie este făcută automat de KDevelop.

Notć

Dacă dintr-un anumit motiv KDevelop nu generează fişierele .h şi .cpp din sigcreatedlg.ui, iată mai jos două comenzi pe care le puteţi executa manual īntr-o consolă, īn directorul sigcreate/src:
uic -o sigcreatedlg.h sigcreatedlg.ui
uic -o sigcreatedlg.cpp -i sigcreatedlg.h sigcreatedlg.ui

Pasul 2 - Acum trebuie să derivaţi clasa pe care KDevelop a generat-o pentru dumneavoastră (clasa SigCreate) din noua clasă dialog Qt Designer. Īn KDevelop afişaţi fişierul sigcreate.h selectīndu-l īn File Selector şi adăugaţi

#include "sigcreatedlg.h"
īn partea de sus a fişierului sigcreate.h, cu toate antetele de care aveţi nevoie.
#include <kapplication.h>
#include <qwidget.h>
#include <qlineedit.h>
#include <qmultilineedit.h>
#include <qcombobox.h>
#include <sigcreatedlg.h>

/** SigCreate este clasa de bază a proiectului */
class SigCreate : public SigCreateDlg
{
Īnlocuiţi public KMainWindow cu public SigCreateDlg deoarece SigCreate se trage din SigCreateDlg.

Īn fişierul sigcreate.h ar trebui să aveţi următoarele linii:

class SigCreate : public SigCreateDlg  {
  Q_OBJECT
public:
        /** constructor */
      SigCreate(QWidget *parent=0, const char *name=0);
        /** destructor */
      ~SigCreate();
};
Fişierul sigcreate.cpp ar trebui să arate ca mai jos:
#include "sigcreate.h"

SigCreate::SigCreate(QWidget *parent, const char *name) : SigCreateDlg(parent, name)
{
}

SigCreate::~SigCreate()
{
}
Pasul 3 - De asemenea trebuie să adăugaţi manual fişierele incluse. Īn sigcreate.h adăugaţi antetele următoare, cīte unul pentru fiecare din clasele pe care le-am folosit:
#include <qlineedit.h>
#include <qcombobox.h>
#include <qmultilineedit.h>
Pasul 4 - Comentaţi cīteva linii din fişierul main.cpp:
   /* if (app.isRestored())
    {
        RESTORE(SigCreate);
    }
    else*/
deoarece proiectul era iniţial generat să se bazeze pe KMainWindow ce oferă foarte multe funcţionalităţi.

Notć

Deoarece acest program este gīndit pentru un tutorial, nu reflectă un flux de programare "real". După ce aţi inclus fişierul .ui, creaţi o clasă nouă, SigCreate. Pentru a face acest lucru daţi clic dreapta pe Classes, selectaţi New Class... şi apoi va apărea dialogul Class Generator. Introduceţi numele clasei (SigCreate) şi al clasei de bază (SigCreateDlg). Nu uitaţi să selectaţi opţiunea generate a QWidget-childclass. La sfīrşit daţi clic pe OK. Nu am parcurs acel pas deoarece clasa SigCreate este fereastra noastră principală.

Avertisment

Clasa derivată nu poate fi numită ca fişierul .ui. Din fişierul .ui sīnt generate automat fişierele .h şi .cpp aşa că trebuie să aibă nume diferite. Puteţi să evidenţiaţi un fişier de interfaţă grafică adăugīnd dlg la numele lui. Clasa derivată din .ui s-ar putea numi de exemplu mainWindowDlg.

Acum generaţi proiectul pentru a vedea dacă totul este corect. Mai īntīi rulaţi Build->Run automake & friends, Build->Run configure, Build->Build Project şi Build->Install (sau Install ca utilizatorul root). La final porniţi programul cu Build->Execute Program (sau Shift+F9). Reţineţi că īn funcţie de configuraţia dumneavoastră, dacă nu aveţi acces de scriere īn $KDEDIR, s-ar putea să fie nevoie să executaţi Build->Install ca utilizatorul root. De asemenea puteţi să săriţi peste pasul cu instalarea. Pentru tutorialul de faţă nu este o problemă, dar la aplicaţiile reale s-ar putea să apară probleme. Interfaţa grafică trebuie să apară dar pentru moment butonul Create! nu merge. Īl vom rezolva implementīnd slotul slotCreateSig(). Vedeţi imaginea de mai jos.

Dacă la compilare vă loviţi de eroarea Syntax error before `{' token făcīnd referire la acolada dreaptă īnainte de linia cu Q_OBJECT din sigcreate.h, atunci aţi uitat să adăugaţi

#include "sigcreatedlg.h"
sau fişierul sigcreatedlg.h nu a fost creat (conform notei de mai sus).


Programul

Programul aproape gata


Īnapoi
Īnainte
Acasć