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

Alles rund um die Programmierung mit Qt
Antworten
zimti
Beiträge: 6
Registriert: 3. Juni 2009 17:49

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

Beitrag 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.!!
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
zimti
Beiträge: 6
Registriert: 3. Juni 2009 17:49

Beitrag 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
zimti
Beiträge: 6
Registriert: 3. Juni 2009 17:49

Beitrag 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??
zimti
Beiträge: 6
Registriert: 3. Juni 2009 17:49

Beitrag 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 :-)
Antworten