Pagina principala
Informatii
Internationalizarea
pROgrame KDE/Qt
Download
Documentatii
Despre LKR
Contact
Resurse
Harta site-ului

Tutorial interfata grafica XML KDE


   Kurt Granroth
   5 Septembrie 2000

Linie cu linie

KEdit are putine elemente de meniu, asa ca voi acoperi doar o mica parte din ele astfel incit sa va puteti face o imagine despre cum puteti face asta.


  file = new QPopupMenu();
  file->insertItem(BarIcon("filenew"),i18n("&New..."),
                   this, SLOT(file_new()), KStdAccel::openNew());
  file->insertItem(BarIcon("fileopen"), i18n("&Open..."),
                   this, SLOT(file_open()), KStdAccel::open());
  menuBar()->insertItem(i18n("&File"), file);
ORIG: setupMenuBar()

Aceasta creeaza meniul File si insereaza doua elemente de meniu: itemii New si Open. Apoi ataseaza meniul File la bara de meniuri.

Dorim sa stergem aceste linii si sa le inlocuim cu urmatoarele:


  KStdAction::openNew(this,SLOT(file_new()),actionCollection());
  KStdAction::open(this,SLOT(file_open()),actionCollection());
NOU: setupActions()

Asta este tot. Nu trebuie sa va faceti griji caror meniuri le sint asociate aceste actiuni si cum sint ele reprezentate vizual. Apelati doar metodele statice corespunzatoare elementului dumneavoastra si pasati ca argumente SLOTUL dumneavoastra si o colectie de actiuni si ati terminat.

Acesta este modul in care veti manipula 90% din toate elementele standard.

Elementul "Open Recent" merita o atentie mai deosebita deoarece este un caz special. Urmatoarele linii de cod arata vechiul mod de tratare al itemului:


  recentpopup = new QPopupMenu();
  file->insertItem(i18n("Open &Recent..."), recentpopup);
  connect(recentpopup, SIGNAL(activated(int)), SLOT(openRecent(int)));
VECHI: "Open Recent"

Aceste trei linii vor fi inlocuite cu urmatoarea:


 recent = KStdAction::openRecent(this, SLOT(file_openRecent(const KURL&)),
                                 actionCollection());
NOU: "Open Recent"

Pentru a incarca si salva aceste inregistrari veti avea nevoie de un pointer catre un obiect KConfig setat pentru un grup adecvat. Acestea sint functiile ce trebuie apelate:


  recent->loadEntries(kc_ptr);
  recent->saveEntries(kc_ptr);
Incarcare/Salvare "Open Recent"

Vom reveni asupra acestor lucruri mai tirziu.

Actiuni non-standard

Vom continua parcurgerea metodei setupMenuBar() si vom observa ca majoritatea elementelor sint elementele standard. Mergem mai departe pina cind intilnim elementele "Open URL" si "Save To URL". Acestea sint elemente specifice aplicatiei.


  file->insertItem(i18n("Open &URL..."),
                      this, SLOT(file_open_url()));
  file->insertItem(i18n("Save &To URL..."),
                      this, SLOT(file_save_url()));
VECHI: "Open URL" si "Save To URL"

Asta e singura data cind codul corespunzator actiunilor este mai lung decit codul original.


(void)new KAction(i18n("Open &URL..."),0,this, SLOT(file_open_url()),
                  actionCollection(), "file_open_url");
(void)new KAction(i18n("Save &To URL..."),0,this, SLOT(file_save_url()),
                  actionCollection(), "save_to_url");
NOU: "Open URL" si "Save To URL"

Numele interne ("file_open_url" si "save_to_url") sint cumva arbitrare, dar va trebui sa retinem ceea ce reprezinta pentru mai tirziu.

Actiuni unice

Un alt exemplu pe care doresc sa-l prezint este folosirea itemilor ce pot comuta (toggle items).


options->setCheckable(TRUE);
toolID = options->insertItem(i18n("Show &Toolbar"),
                                this,SLOT(toggleToolBar()));
statusID = options->insertItem(i18n("Show St&atusbar"),
                                  this,SLOT(toggleStatusBar()));
VECHI: statusbar si toolbar

Retineti de asemenea ca acestea au fost validate in mod implicit in constructorul clasei. Ei bine, vom inlocui aceste linii cu:


KStdAction::showToolbar(this,SLOT(toggleToolBar()),actionCollection());
KStdAction::showStatusbar(this,SLOT(toggleStatusBar()),actionCollection());
NOU: statusbar si toolbar

Elementele vor fi controlate implicit fara ca noi sa fim nevoiti sa scriem nici o linie de cod. Vom vedea cum se vor schimba functiile de comutare mai tirziu.

Ultimul exemplu pe care il voi prezenta este meniul "Help".


QString about = i18n(""
  "KEdit %1\n\n"
  "Copyright 1997-98\n"
  "Bernd Johannes Wuebben\n"
  "wuebben@kde.org").arg(KEDITVERSION);
menuBar()->insertItem(i18n("&Help"),helpMenu(about));
VECHI: Meniu "Help"

Nu este nici un pericol daca stergeti aceste linii fara sa mai adaugati nimic. Meniul "Help" este manipulat in mod automat de catre program.

Remarca

In general puteti sterge metoda setupToolBar() definitiv.

Ultimul pas

Toata aceasta creare a "actiunilor" a fost frumoasa si grozava, dar este nefolositoare daca uitati sa construiti interfata grafica cu utilizatorul (GUI). Acest lucru este realizat cu urmatoarea metoda:


createGUI();
Crearea GUI

Citeva observatii despre aceasta metoda:

  1. Trebuie apelata dupa ce ati creat "actiunile". Nu va functiona daca este apelata inainte de crearea lor.
  2. Apelati aceasta metoda o singura data.
  3. Asigurati-va ca ati construit aplicatia cu make install si nu doar cu make - altfel nu veti observa nici un efect al schimbarilor in UI.
  4. Numele fisierului folosit este cel al fisierului XML specific aplicatiei. Daca nu il specificati folosind calea absoluta, el va fi cautat in directorul de date al aplicatiei.
  5. Daca lasati parametrul fisier necompletat, atunci va fi folosit un fisier denumit [app-name]ui.rc (asadar in exemplul nostru am omis numele fisierului deoarece avem keditui.rc). Daca nu exista nici un fisier cu acest nume, doar elementele UI standard vor fi construite. Acest lucru e la indemina daca nu aveti nici o "actiune" specifica aplicatiei.

Din nou, trebuie sa apelati metoda createGUI() dupa ce creati "actiunile" altfel nimic nu se va intimpla!



Traducere de Daniel Ionescu. Adaptare de Claudiu Costin.