Maemo und die lieben Fenster (QMainWindow vs. QDialog)

Während der Entwicklung eines Programmes für Maemo kommt (zumindest bei mir) die Frage hoch wie man bei einem StackedWindow folgende Eigenschaften erhält

  • StackedWindow soll ein Menü haben
  • StackedWindow soll einen Retourwert zurückgeben können, damit das aufgerufene Hauptfenster eine Information darüber bekommt was im Unterfenster passiert ist – es könnte ja Auswirkungen auf das Hauptfenster haben
  • Die Fenster sollen mit dem QT-Creator erstellt werden (und nicht alles jedesmal von Hand geschrieben)

Wer meint das diese simplen 3 Punkte keine Herausforderung wären darf mich gerne informieren.

QDialog würde sich da zwar anbieten, weil es einen Retourwert liefern kann, aber man kann im Creator leider kein Menü an ein QDialog binden.

ich habe es wie folgt gelöst:

void CategorieMain::Cat_Clicked(int i) {
Cat_app *win2 =new Cat_app(this);

// Wird für Maemo übersetzt ? dann die Eigenschaft "StackedWindow" setzen
#ifdef Q_WS_MAEMO_5
win2->setAttribute(Qt::WA_Maemo5StackedWindow);
#endif

win2->setCat(cat);
// Zeichnen der Buttons - als Parameter wird der Index des angeklickten Buttons übergeben....
win2->createButtons(i);
// Nachdem das Unterfenster ein "QMainWindow" ist (wegen des Menüs) gibt es keinen Retourwert im eigentlichen Sinne.
// Damit das Unterfenster trotzdem dieses Fenster neu zeichnen kann wird das Objekt "this" an das Childfenster übergeben.
// Im Childfenster kann damit die Funktion "NeuZeichnen()" aufgerufen werden
win2->setParent(this);

// Guckuck - Fenster da ?
win2->show();

}

damit dieser Aufruf klappt muss in dem Unterfenster (hier Cat_app ) folgendes festgelegt werden:

in der Headerdatei „cat_app.h“

public: 
void setParent(CategorieMain *oParameter);
.....
protected:
......
// Hiermit überschreiben die das "closeEvent" dieses Fensters "cat_app"
// Damit können wir (z.b:) beim schliessen des Fensters im Hauptfenster eine Funktion aufrufen
void closeEvent(QCloseEvent *event);
private:
// "CategorieMain" ist das aufrufende Fenster !!
CategorieMain *oParent;
.....

und schliesslich noch die Quellcodedatei „cat_app.cpp“

Cat_app::Cat_app(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Cat_app)
{
ui->setupUi(this);
bVeraendert = false;
oParent = NULL;
}

void Cat_app::setParent(CategorieMain *oParameter) {
// Objekt des Aufgerufenen Fensters (QMainWindow ?)
oParent = oParameter;
}

void Cat_app::closeEvent(QCloseEvent *event)
{
if (oParent != NULL) {
oParent->NeuZeichnen();
}

// Standardfunktion "accept" aufrufen - mehr brauchts momentan nicht ....
event->accept();
}

Mit dieser Konstellation ist es mir gelungen beim schliessen des StackedWindow´s im aufrufendem Fenster die Buttons neu zu zeichnen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert