Übergabe eines Signals

Alles rund um die Programmierung mit Qt
Antworten
Linuxguru
Beiträge: 96
Registriert: 14. Januar 2007 02:09

Übergabe eines Signals

Beitrag von Linuxguru »

hallo,

es ist ja möglich über einen pointer auf die eigenschaften eines objektes zuzugreifen.
nun hab ich folgendes.
ich hab in klasse 1 ein button, der wiederum bekommt den slot connectdisconnect(). ich übergebe den button an klasse 2 und möchte von da aus den klick in klasse 1 ausführen.

ist so etwas möglich?

danke
Zuletzt geändert von Linuxguru am 20. Juni 2007 19:42, insgesamt 2-mal geändert.
RD1978
Beiträge: 84
Registriert: 5. Juni 2007 08:00
Wohnort: Stralsund (DDR)

Beitrag von RD1978 »

hallo,

Du könntest von Klasse 2 aus das Signal clicked() des Buttons mit einem eigenen Signal verbinden, welches Du in Klasse 1 verarbeitest.

Code: Alles auswählen

QObject::connect( button, SIGNAL( clicked() ), this, SIGNAL( meinSignal() ) );
Aber warum so umständlich? ;-)

MfG RD1978
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Re: Übergabe eines Signals

Beitrag von patrik08 »

Linuxguru hat geschrieben:hallo,

es ist ja möglich über einen pointer auf die eigenschaften eines objektes zuzugreifen.
nun hab ich folgendes.
ich hab in klasse 1 ein button, der wiederum bekommt den slot connectdisconnect(). ich übergebe den button an klasse 2 und möchte von da aus den klick in klasse 1 ausführen.

ist so etwas möglich?

danke

Mit http://doc.trolltech.com/4.2/qpointer.html kannst du in jeder richtung verbinden... rauf und runter...

Aber meistens macht man es hierarchisch..

eltern->sohn->sub->button(actionxx)

Signale und event oder signale senden geht auch .... viele wege gehen nach Rom...

Code: Alles auswählen


#include <QApplication>
#include <QtGui>
int main(int argc, char *argv[]) {
    QApplication a( argc, argv );
    Form::self()->setWindowTitle("Mein Programm");
    Form::self()->show();

     a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
    return a.exec();
} 


public:   
 static Form* self( QWidget* = 0 );

private:
 Form( QWidget* = 0 );
 static QPointer<Form> _self;

QPointer<Form> Form::_self = 0L;
Form* Form::self( QWidget* parent )
{
	if ( !_self )
	_self = new Form( parent );
	return _self;
}


.........................
speack português italiano deutsch english castellà qt
Linuxguru
Beiträge: 96
Registriert: 14. Januar 2007 02:09

Beitrag von Linuxguru »

hallo,
Aber warum so umständlich? Wink

Code: Alles auswählen

QObject::connect( button, SIGNAL( clicked() ), this, SIGNAL( meinSignal() ) );
würde funktionieren, wenn ich in klasse 2 "button" von klasse 1 aufrufe. das problem, was ich noch habe ist, das meine funktion auch in klasse 1 liegt..

ich bräuchte praktisch an den übergebenen button noch den SLOT Klasse1::meinSignal();, den ich von klasse 2 aus aufrufen kann.

hintergrund ist, das ich in klasse 1 eine ftp verbindung starten kann. jetzt arbeite ich an einem manger der in einem eigenen fenster abgeleitet von QWidget liegt. von daher müsste ich auf das klickereigniss in klasse 1 zugreifen können.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Irgendwie hast Du das Signal/Slot-Konzept noch nicht verstanden. Du hast ein Button in Klasse1 und die Funktion ist auch in Klasse1, warum dann nicht der connect in Klasse1? Klicken kannst Du dann doch von überall. Du kannst auch zusätzlich noch einen connect von Klasse1 nach Klasse2 oder umgekehrt machen.

Oder ich verstehe dein Problem nicht.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Linuxguru
Beiträge: 96
Registriert: 14. Januar 2007 02:09

Beitrag von Linuxguru »

hallo @macman,

du hast mein problem perfekt verstanden.. :wink:

das mit den signal und slot hab ich auch verstanden, nur evtl etwas grundlegendes nicht.

ich weiss nicht, wie ich von klasse 2 nach klasse 1 klicke.
die funktion ist in klasse 1 und der button in klasse 2.

ich kann zwar objekte per pointer an klasse 2 übergeben, aber wie mach ich das mit den funktionen.

beide klassen sind von QWidget abgeleitet.

dank dir für deine hilfe ;-)
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Linuxguru hat geschrieben:die funktion ist in klasse 1 und der button in klasse 2.

Code: Alles auswählen

connect(Klasse2->button, SIGNAL(clicked()), Klasse1, SLOT(myFunction()));
Ob Du den connect nun in Klasse1 oder 2 machst, ist eigentlich egal, nur müssen die jeweiligen Pointer bekannt sein.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Antworten