http://alpha-thema-online.uv.ro
Fa-ti si tu propriul forum, pe www.myforum.ro!
Pagina de start a forumului http://alpha-thema-online.uv.ro Autentificare Inregistrare FAQ Membri Cautare

Pagina de start a forumului http://alpha-thema-online.uv.ro » C / C++ / C# » P8: Un semn de carte destept C++
Creaza un subiect nou  Raspunde la subiect Subiectul anterior :: Subiectul urmator 
P8: Un semn de carte destept C++
MesajTrimis: 13/07/2007 19:09 Raspunde cu citat (quote)
Ad_Infinitum
Administrator
Administrator
Ad_Infinitum
Data inscrierii: 23/Iun/2007
Mesaje: 212




P8 este o imbunatatire a lui P6 fiind capabil sa-i trimita lui P7 legaturile pe care le are intr-o lista. Asta ii da posibilitate lui P7 sa deschida legaturile favorite.

main.cpp-------
Citat:

#include <kapp.h>
#include "p8.h"

int main( int argc, char **argv )
{
KApplication a( argc, argv, "p8" );

MainList *mylist=new MainList;
mylist->resize( 300, 200 );

a.setMainWidget( mylist );
mylist->show();

return a.exec();
}




p8Iface.h---------------
Citat:

#include <dcopobject.h>
#include <qstring.h>

class p8Iface : virtual public DCOPObject
{
K_DCOP

k_dcop:
virtual void add( const QString s ) = 0;

};



p8.h-------------
Citat:

#include "p8Iface.h"
#include <qlistview.h>

class MainList : public QListView, virtual public p8Iface
{
Q_OBJECT

public:

MainList();

void add ( const QString url );
public slots:

void setURLInBrowser ( QListViewItem *item );

};



p8.cpp------------------
Citat:

#include "p8.h"
#include <klocale.h>
#include <kapp.h>
#include <dcopclient.h>
#include <kdebug.h>

MainList::MainList() : QListView ( 0L, "Bookmarks" ),
DCOPObject ( "bookmarkList" )
{
addColumn( i18n("My Bookmarks") );
connect( this, SIGNAL(clicked(QListViewItem *)),
this, SLOT(setURLInBrowser(QListViewItem *)));

DCOPClient *client=kapp->dcopClient();
client->attach();
client->registerAs("p8");
}

void MainList::add( const QString url )
{
insertItem ( new QListViewItem ( this , url ) );
}

void MainList::setURLInBrowser( QListViewItem *item )
{
if (item==0L) return;
DCOPClient *client=kapp->dcopClient();
QByteArray params;
QDataStream stream(params, IO_WriteOnly);
stream << item->text(0);
if (!client->send("p7-*", "browser", "setURL(QString)", params))
kdDebug() << "Error with DCOP\n";
}




Fisierele main.cpp si p8Iface.h sint similare cu cele ale lui P6 si de aceea nu le mai comentam.

Citat:


connect(this, SIGNAL(clicked(QListViewItem *)),
this, SLOT(setURLInBrowser(QListViewItem *)));



Am adaugat un nou slot, setURLInBrowser(QListViewItem *), care trimite legatura din QListViewItem navigatorului (P7).

Acest exemplu ne arata cum conectam un semnal al unui obiect la un slot al aceluiasi obiect. Desigur aceasta nu este cea mai buna cale, dar cel putin se preteaza la un tutorial ca acesta.

In caz ca nu va amintiti din P6, QListViewItem este clasa care reprezinta un element intr-o lista QListView. Cind dati clic pe un element, obiectul QListView emite un semnal catre slotul la care este legat, primind ca parametru elementul QListViewItem pe care s-a dat clic.

Citat:


void MainList::setURLInBrowser( QListViewItem *item )
{
if (item==0L) return;




In acest slot, întâia data ne asiguram ca utilizatorul a dat clic pe un element. Daca utilizatorul da clic pe o zona fara elemente, widget-ul tot trimite un semnal dar parametru este NULL. In cazul acesta nu facem nimic.

Citat:

DCOPClient *client=kapp->dcopClient();
QByteArray params;
QDataStream stream(params, IO_WriteOnly);
stream << item->text(0);



Avem o legatura de trimis. Obtinem obiectul DCOPCLient la fel cum am facut-o si in exemplele P5 si P7 ca sa trimitem mesajele si dupa aceea pregatim debitul de date.

Cu item->text(0) primim textul de pe prima coloana a elementului pe care s-a dat clic (prima coloana este si singura pe care am creat-o), dupa care o salvam.

Citat:


if (!client->send("p7-*", "browser", "setURL(QString)", params))
kdebugError("Error with DCOP");
}



In cele din urma trimitem un apel DCOP catre aplicatia p7, obiectului browser si metodei setURL(QString) cu parametrul params.

Sintem aproximativ de sfirsitul tutorialului, dar mai intii vom face citeva modificari pentru a simplifica codul sursa, întrebuințând ultimele tehnologii.

Traducere de Bogdan Daniel Vatra. Adaptare de Claudiu Costin.
Vezi profilul utilizatorului Trimite mesaj privat

P8: Un semn de carte destept C++
 Pagina de start a forumului http://alpha-thema-online.uv.ro » C / C++ / C#
Nu puteti crea un subiect nou in acest forum
Nu puteti raspunde in subiectele acestui forum
Nu puteti modifica mesajele proprii din acest forum
Nu puteti sterge mesajele proprii din acest forum
Nu puteti vota in chestionarele din acest forum
Ora este GMT + 3 ore  
Pagina 1 din 1  

  
  
 Creaza un subiect nou  Raspunde la subiect  


Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro
    Powered by phpBB © 2001-2004 phpBB Group. phpBB Skin by Vjacheslav Trushkin.