LinuxProfi . AT
ihr professioneller Linux Dienstleister
Wer für Maemo entwickelt (und das noch bequemer weise im QT-Creator machen will) kommt zu folgendem Problem:
Wer denkt dass er diese 3 kleinen Punkte locker lösen kann, ist hiermit aufgerufen sich mitzuteilen…
QDialog geht zwar betreffend des Retourwertes, allerdings kann der QT-Creator leider kein Menü an ein QDialog binden….
Ich habe es wie folgt gelöst:
Anstatt ich einen Retourwert vom StackedWindow erwarte, rufe ich einfach aus dem StackedWindow heraus eine (beliebige) Funktion aus der aufrufenden Klasse auf.
So geht´s :
Das aufrufende Programm (categoriemain.cpp)
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();
}
Die Headerdatei von cat_app.h
class Cat_app : public QMainWindow {
Q_OBJECT
public:
Cat_app(QWidget *parent = 0);
~Cat_app();
void setCat(QList &cat);
QList getCat();
void getAnzCat();
void createButtons(int);
bool getVeraendert();
void setParent(CategorieMain *oParameter);
protected:
void changeEvent(QEvent *e);
// Überschreiben des "closeEvent" - damit können wir beim schliessen des Fenster etwas machen bevor das Fenster dicht macht
void closeEvent(QCloseEvent *event);
private:
Ui::Cat_app *ui;
int nAktuellCat;
bool bVeraendert;
// Variable für das Elternfenster als Zeiger speichern
CategorieMain *oParent;
Der Sourcecode vom StackedWindow (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::closeEvent(QCloseEvent *event)
{
if (oParent != NULL) {
// Hier passierts !!!! Ich rufe eine Funktion des Parent auf - wirkt sich beim Schliessen dieses Fensters aus (früher braucht es Maemo nicht)
oParent->NeuZeichnen();
}
event->accept();
}