QMainWindow aus QDialog anzeigen

Alles rund um die Programmierung mit Qt
Antworten
fatty
Beiträge: 14
Registriert: 1. Oktober 2007 15:22

QMainWindow aus QDialog anzeigen

Beitrag von fatty »

Hi,

ich habe ein Problem mit einem Programm zur Zeiterfassung. Es greift dafür auf eine MySQL Datenbank zu.
Im der main-Funktion wird eine Instanz des Login-Dialogs erstellt und bei erfolgreichem Login eine Instanz des MainWindows. Leider wird das MainWindow nicht angezeigt, obwohl ich im Konstruktor show() aufrufe. Wenn ich das MainWindow direkt in der main-Funktion erstelle wird es aber angezeigt.
An was kann das liegen?
Danke schonmal!

Hier ein Auszug meines Quellcodes:

Code: Alles auswählen

int main(int argc, char **argv)
{
    QApplication app(argc, argv); 
    LoginDialog LD;
    return app.exec();
}





LoginDialog::LoginDialog()
{
	ui_login.setupUi(this);
	show();
	
	dbLogin = QSqlDatabase::addDatabase("QMYSQL","LoginDb");
	dbLogin.setHostName("192.168.1.99");
	dbLogin.setDatabaseName("zeit");
	dbLogin.setUserName("zeit");
	dbLogin.setPassword("DVfKXyHbuIadH");
}

void LoginDialog::on_pbOk_clicked()
{

	if(mysql_check_user() && !((ui_login.letUser->displayText()).isEmpty()) && !((ui_login.letPassword->text()).isEmpty()))
	{	
		ZeitErfassung ZE(nick, password, sAppVersion, sVersionText1, sVersionText2);	
		close();
	}
	else
	{
		QMessageBox::critical(this, tr("Zeiterfassung"), tr("Die Logindaten sind nicht korrekt.\nZeiterfassung wird jetzt beendet."));
		close();
	}
}

ZeitErfassung::ZeitErfassung(QString mynick, QString mypassword, QString myAppVersion, QString myVersionText1, QString myVersionText2)
{
    ui.setupUi(this);
    show();
    .....
}


khrl01
Beiträge: 28
Registriert: 28. August 2007 13:06

Re: QMainWindow aus QDialog anzeigen

Beitrag von khrl01 »

fatty hat geschrieben:Hi,

void LoginDialog::on_pbOk_clicked()
{

if(mysql_check_user() && !((ui_login.letUser->displayText()).isEmpty()) && !((ui_login.letPassword->text()).isEmpty()))
{
ZeitErfassung ZE(nick, password, sAppVersion, sVersionText1, sVersionText2);
close();
-->> Hier wird der Destructor von ZE aufgerufen...
Damit ist das Fenster weg....
// Besser
pZE = new ZeitErfassung(nick,password,sAppVersion);
// wobei pZE eine Membervariable vom
// Typ ZeitErfassung* ist..
}
else
{
QMessageBox::critical(this, tr("Zeiterfassung"), tr("Die Logindaten sind nicht korrekt.\nZeiterfassung wird jetzt beendet."));
close();
}
}

[/code]
gruss karl-heinz
fatty
Beiträge: 14
Registriert: 1. Oktober 2007 15:22

Beitrag von fatty »

Vielen Dank, hat funktioniert.

Kurze Frage noch:
Was ist der Unterschied zwischen ZeitErfassung* und *ZeitErfassung ?
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

fatty hat geschrieben:Was ist der Unterschied zwischen ZeitErfassung* und *ZeitErfassung ?
http://download.pearsoned.de/leseecke/h ... /kap08.htm
http://download.pearsoned.de/leseecke/html/c++_21Tg/data/kap08.htm hat geschrieben: Der Indirektionsoperator (*) kommt bei Zeigern in zwei unterschiedlichen Versionen vor: Deklaration und Dereferenzierung. Bei der Deklaration eines Zeigers gibt das Sternchen an, daß es sich um einen Zeiger und nicht um eine normale Variable handelt. Dazu ein Beispiel:

unsigned short * pAlter = 0; // einen Zeiger auf unsigned short erzeugen

Wenn der Zeiger dereferenziert wird, gibt der Indirektionsoperator an, daß auf den Wert an der im Zeiger abgelegten Speicheradresse zuzugreifen ist und nicht auf die Adresse selbst:

*pAlter = 5; // Der Speicherzelle, deren Adresse in pAlter steht, den Wert 5 zuweisen
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.
fatty
Beiträge: 14
Registriert: 1. Oktober 2007 15:22

Beitrag von fatty »

allet klar :)
Antworten