Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » KDevelop / Qt / wxWidget » Abfrage vor Beenden

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
25.11.2003, 12:36 Uhr
~Frank
Gast


closeEvent ist eine Memberfunktion von QWidget. Von QWidget ist so gut wie alles
abgeleitet, was du so auf den Bildschirm bringen kannst (auch QMessageBox).
Du mußt dir als deine eigene MessageBox von QMessageBox ableiten und die closeEvent Methode überschreiben.

Irgendwie so:

C++:
void MyMessageBox::closeEvent( QCloseEvent* ce )
{
// irgendwas machen ...
       ce->accept(); oder ce->ignore();
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
25.11.2003, 12:37 Uhr
typecast
aka loddab
(Operator)


Nein du musst einfach eine eigene Klasse von QMainWindow ableiten und dann in den protected-Teil einfach die Funktion virtual void closeEvent() reinschreiben und das dann implementieren.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
25.11.2003, 12:40 Uhr
Kasperdelasopa



??? Nix verstanden!
Loddab, Wie sieht den deine Version in einem Quellcodebeispiel aus?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
25.11.2003, 12:45 Uhr
typecast
aka loddab
(Operator)


Genau das was Frank gepostet hat. Hier mal ein Beispiel:

C++:
...
class MyWdiget : public QWidget
{
  ...
  protected:
         virtual void closeEvent(QCloseEvent* ce);
  ...
};

void MyWidget::closeEvent(QCloseEvent* ce)
{
      // hier mal schauen ob wirklcih beendet werden soll
     if (ende)
            ce->accept();
     else
            ce->ignore();
}



dann in der main.cpp


C++:
int main(int argc, char* argv[])
{
      QApplication a(argc, argv);
      MyWdiget mw;
      a.setMainWidget(&mw):
      mv.show();
      return a.exec();
}




Bearbeitung von loddab:
Code verbessert

--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)

Dieser Post wurde am 25.11.2003 um 13:26 Uhr von Loddab editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
25.11.2003, 12:57 Uhr
~Frank
Gast


@Loddab

Ja, richtig. Hab die Frage nicht richtig gelesen. Dachte es soll überprüft werden ob die Messagebox geschlossen werden soll :-)
Prinzip ist ja das gleiche.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
25.11.2003, 13:24 Uhr
Kasperdelasopa



Also ich habe jetzt den code (" protected: virtual void closeEvent;") in meine Klasse einefügt, und in meiner main.cpp ist eh alles so wie es im 2. code steht, aber dann kamen nur Fehler beim Compilieren.
Ich habe es so einefügt:

C++:
protected:
    virtual void closeEvent;

    void Test::closeEvent(QCloseEvent* ce)
{
// hier mal schauen ob wirklcih beendet werden soll
if (ende)
ce->accept();
else
ce->ignore();
}




Dann kamen die Fehler beim compilieren:


Code:
test.h:175: error: variable or field `closeEvent' declared void
test.h:175: error: `closeEvent' declared as a `virtual' field
test.h:178: warning: extra qualification `Test::' on member `closeEvent'
ignored
test.h:184: error: declaration of `void Test::closeEvent(QCloseEvent*)'
test.h:175: error: conflicts with previous declaration `int Test::closeEvent'
test.h: In member function `virtual void Test::closeEvent(QCloseEvent*)':
test.h:180: error: `ende' undeclared (first use this function)
test.h:180: error: (Each undeclared identifier is reported only once for each
function it appears in.)



Sorry ich bin halt ein neuling


Bearbeitung von loddab:
code-Tags gesetzt

Dieser Post wurde am 25.11.2003 um 13:25 Uhr von Loddab editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
25.11.2003, 13:28 Uhr
typecast
aka loddab
(Operator)


Der Fehler lag bei mir. Ich habe falchen Code gepostet (ist oben schon verbessert). Im protected-Teil muss es

C++:
virtual void closeEvent(QCloseEvent* ce);


heißen.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
25.11.2003, 13:32 Uhr
Kasperdelasopa



Ok soweit so gut, und wie rufe ich jetzt die Messageox auf bevor das Programm beebdet wird?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
25.11.2003, 13:44 Uhr
~Frank
Gast



C++:
virtual void closeEvent(QCloseEvent* ce) {
        switch( QMessageBox::information( this, "Capture", "Message",
                                          "Exit", "Cancel",
                                          0, 1 ) ) {
                                          case 0:
                                              ce->accept();
                                              break;
                                          case 1:
                                          default: // just for sanity
                                              ce->ignore();
                                              break;
        }
}



Gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
25.11.2003, 13:45 Uhr
Kasperdelasopa



und wo muss des stehen? im main oder in meiner Klasse?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ KDevelop / Qt / wxWidget ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: