Seite 1 von 1

Anfängerfrage Signal and Slot in main.ccp

Verfasst: 27. Juni 2008 14:35
von pfusterschmied
Hoffe ich hab dies ins richte Forum gestellt.

Mein Programm soll eine simple Passwortabfrage erhalten, welche ich
in main.cpp aufrufe. Die Klasse login (log) liefert ein Signal an mein Hauptprogramm (mainprogramm), welche benutzerspezifischen Funktionen freigeschaltet. Dies funktioniert auch wunderbar.

Code: Alles auswählen

EPMprogramm mainprogramm;
login *log = new login();
	
		// Loginabfrage Signal
		QObject::connect(log, SIGNAL(loginAccept(QString,QString,int,int,int,int,int) ), &mainprogramm, SLOT(access(QString,QString,int,int,int,int,int) ) );
		log->show();
mainprogramm.show();
Nun soll das Hauptprogramm aber erst dann angezeigt werden, wenn der Login erfolgreich war. Ca. so:

Code: Alles auswählen

EPMprogramm mainprogramm;
login *log = new login();
	
		// Loginabfrage Signal
		QObject::connect(log, SIGNAL(loginAccept(QString,QString,int,int,int,int,int) ), &mainprogramm, SLOT(access(QString,QString,int,int,int,int,int) ) );
		log->show();
if(log->loginAccept(QString) == "OK")
{
  mainprogramm.show();
}
Funktioniert klarer weise nicht, da ja loginAccept ein Signal und keine Methode ist. Muss ich mir in der main.ccp eine eigene Klasse bauen die einen Slot bereitstellt oder kann man das irgendwie einfacher lösen?

Verfasst: 27. Juni 2008 14:53
von -=Freaky=-
AFAIK koennen nur klassen slots beinhalten.
aber sieh die mal die doku zu QSignalSpy an, den koenntest du evtl. dafuer benutzen.
vllt. nicht ganz so elegant, aber einfacher denk ich.

mfg,
julian

Verfasst: 27. Juni 2008 15:58
von Sephral
Hallo,

ich habe einen ähnlichen Mechanismus bei mir in der Anwendung und habe es so gelöst.

Mein Anmeldedialog ist in die Klasse "LdapAuth" verbannt die von QSplashScreen abgeleitet ist. Der Code dazu in der main sieht etwa so aus..

Code: Alles auswählen

QApplication a(argc,argv);
LdapAuth auth(NULL);
auth.show();	
a.exec();

if(!auth.m_bAuthOk)
	return 0;

// Ergebnis der Anmeldung auswerten und dann das
// eigentliche Programm starten mit benutzerspezifischen Einstellungen.
Vor dem Code muss eine QApplication erzeugt werden ("a").
Dann starte ich temporär den EventLoop der Application, lasse den Benutzer die Anmeldedaten eingeben, verifiziere die Daten und beende den EventLoop dann wieder (exit()). Anschließend kann ich das Ergebnis abfragen und das Hauptprogramm mit benutzerspezifischen Daten starten. Am Ende wird dann wieder ganz normal der EventLoop mit (a.exec()) gestartet.

Also bei mir klappt das sehr gut.

Ciao,
Sephral

Verfasst: 27. Juni 2008 16:14
von pfusterschmied
Danke für die Info, laut Doku wäre dies optimal.
Nur leider mekert bei mir der Compiler, dass irgendwelche *.h Files fehlern.

Ich habe es jetzt einfach so gelöst:

public bool methode in der login Klasse die die Eingabe überprüft.
Im Main spreche ich die Methode an und bekomme TRUE od. FALSE zurück
fertig!

Trotztdem vielen Dank