Seite 1 von 1

Problem mit QDialog - nach hide(); geht show(); nicht

Verfasst: 18. Juni 2009 12:15
von zimti
Hallo,

ich habe ein Problem. Ich erstelle mehrere QDialoge die im hintergrund laufen sollen und daher setze ich alle bis auf einen zu Anfang auf hide().

später nach einem keyEvent z.B. mit taste 1 möchte ich den Aktuellen Dialog hide setzten und dafür einen anderen mit show anzeigen lassen.

das hide klappt super.. weil alles weg ist.. aber das show bringt nix

was mache ich falsch?
muss ich noch irgendwas anderes beachten ?

---
QApplication app(argc, argv);
.....
würde ich show und hide hier schon aufrufen ist alles gut..
....
return app.exec();
---
aber ich mache es ja aus einem keyEvent heraus.!!

Verfasst: 18. Juni 2009 13:14
von upsala
Wenn du es aus einem keyEvent heraus machst, würde ich auch diesen Code zeigen und nicht irgendeinen, der überhaupt nichts mit dem Thema zu tun hat.

Verfasst: 18. Juni 2009 13:39
von zimti
Jeps.. hier mein Code.. (vereinfacht)

Meine Main:

Code: Alles auswählen

int main(int argc, char **argv)
{

	QApplication app(argc, argv);
	
	HauptFenster my;
	my.show();

    	return app.exec();
  }
}
Mein HauptFenster

Code: Alles auswählen

HauptFenster::HauptFenster(QWidget *parent): QDialog(parent)
{

  setMaximumSize(300,200);
  setMinimumSize(300,200);
  setContentsMargins(0,0,0,0);
  setWindowFlags(Qt::FramelessWindowHint);
  ...

  myFenster1 = new Fenster1(this);
  myFenster2 = new Fenster2(this);

  myFenster1->show();
  myFenster2->hide();
}
keyEvent

Code: Alles auswählen

HauptFenster::keyPressEvent(QKeyEvent* event)
{

 if (event->text() == QString("1")) {

   myFenster1->hide();
   myFenster2->show();

  }
}

Fenster1

Code: Alles auswählen

Fenster1::Fenster1(QWidget *parent) : QDialog(parent)
{
  setMaximumSize(300,200);
  setMinimumSize(300,200);
  setContentsMargins(0,0,0,0);
  setWindowFlags(Qt::FramelessWindowHint);
	
	....
}
Fenster2

Code: Alles auswählen

Fenster2::Fenster2(QWidget *parent) : QDialog(parent)
{
  setMaximumSize(300,200);
  setMinimumSize(300,200);
  setContentsMargins(0,0,0,0);
  setWindowFlags(Qt::FramelessWindowHint);
	
	....
}

Sage ich im HaptFenster show() oder hide() dann klappt es.

aber wenn ich nun die "1" drücke verschwindet mit dem hide mein fenster 1, aber das Fenster2->show() funktioniert nicht

Verfasst: 18. Juni 2009 16:18
von zimti
vll hilft das noch:

wenn ich im keyEvent folgemdes mache

Code: Alles auswählen

HauptFenster::keyPressEvent(QKeyEvent* event)
{

 if (event->text() == QString("1")) {

   myFenster1->hide();
   myFenster1->show();

  }
}
dann verschwindet das Fenster zwar, aber es wird nicht wieder angezeigt

:( :?: ich raffe den fehler nicht?

ich könnte mir vorstellen das es nicht geht, weil ich danach kein ...exec() habe..
-> ein Fenster wir ja erst an der Stelle neu gezeichnet
aber wie sollte ich exec() an der stelle aufrufen??

Verfasst: 19. Juni 2009 11:55
von zimti
Habs...

Fenster1 und Fenster2 müssen wohl von QWidget erben und nicht von QDialog..

naja.. warum habe ich noch nicht ganz verstanden...aber es macht das was ich wollte :-)