 |
|
 |
 | P8: Un semn de carte destept C++ |  |
Trimis: 13/07/2007 19:09 |
|
|
| Ad_Infinitum |
| Administrator |

 |
 |
| 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. |
|
|
|
|
|
|
Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro
|
|