2016-04-28 5 views
0

bin ich auf das folgende Problem fest:qt C++ Signal Slot-Verbindungen für den Datenaustausch zwischen den Objekten

Ich habe ein QWidget namens PBVars mit vielen Line-Änderungen, die in durch eine Lese-Routine gefüllt sind. Jetzt möchte ich dem Benutzer die Möglichkeit geben, einige Felder zu bearbeiten, ohne alle Einträge löschen zu müssen. Dafür habe ich gedacht, einen neuen Dialog (genannt EGG) zu öffnen und alle Daten in EGG zu kopieren. Jetzt kann der Benutzer Daten ändern, klicken Sie auf "SaveValuesToGUI" und die Werte werden wieder in PBVars gespeichert. Das ist vielleicht eine Idee.

Ich konnte alle Daten von PBVars -> EGG lesen. Aber ich bin dabei, eine Signal-Slot-Verbindung von EGG -> PBVars herzustellen.

PBVars.h:

...  
EGG * egg ; 

PBVars.cpp:

PBVars::PBVars(QWidget *parent) : 
Tab(parent), ui(new Ui::PBVars) 
{ 
....  
egg = new EGG(); 
} 

    void PBVars::on_but_EditGeometry_clicked() 
    { ... 
    // fill Values_from_PBVars here 
    egg->show(); 
    egg->setLneEdits(Values_from_PBVars); 
    } 

Wo und wie kann ich die Verbindungs ​​schreiben. Ich denke, es sollte ein wenig wie

connect( egg ???, SIGNAL(on_pb_sendValuesToPropBasic_clicked()), 
     this, SLOT(write_GGE_ToPBVars(qsl))); 

, wo qsl den String mit den bearbeiteten Werten von Ei ist.

kann mir bitte jemand helfen? Vielen Dank !!

+1

'on_pb_sendValuesToPropBasic_clicked' sieht aus wie ein Slot. Machen Sie ein Signal in Ihrer 'EGG'-Klasse wie' sendData (const QStringList & data) 'und geben Sie dieses Signal im 'on_pb_sendValuesToPropBasic_clicked'-Slot aus. Verbinden Sie dann dieses Signal mit Ihrem 'write_GGE_ToPBVars' Slot. Außerdem würde die Syntax folgendermaßen aussehen: 'connect (ei, SIGNAL (sendData (QStringList), dies, SLOT (write_GGE_ToPBVars (QStringList)));' – thuga

+0

Verpasste eine schließende Klammer, sollte 'connect (ei, SIGNAL (sendData (QStringList)), dies, SLOT (write_GGE_ToPBVars (QStringList))); ' – thuga

Antwort

3

Wenn Sie Ihre Verbindungen möchten, Daten zu übertragen, müssen Sie passende Parameter im Signal haben und den Schlitz:

void someSignal(int) 
... 
void someSlot(int i) { ...use i here... } 

Und der tatsächliche Parameter angegeben wird, wenn Sie das Signal emit someSignal(someInt) emittieren.

Verwandte Themen