Seite 1 von 1
Übergabe eines Signals
Verfasst: 18. Juni 2007 23:51
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
Verfasst: 19. Juni 2007 00:38
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
Re: Übergabe eines Signals
Verfasst: 19. Juni 2007 01:43
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;
}
Verfasst: 19. Juni 2007 16:05
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.
Verfasst: 20. Juni 2007 07:34
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.
Verfasst: 20. Juni 2007 19:45
von Linuxguru
hallo @macman,
du hast mein problem perfekt verstanden..
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

Verfasst: 21. Juni 2007 07:36
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.