LinuxProfi . AT
ihr professioneller Linux Dienstleister
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
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