Seite 1 von 1

welches event bei minimierung?

Verfasst: 3. August 2010 09:45
von samsamsam
hallo.

ich bin seit 2 stunden dabei, etwas eigentlich einfaches zu lösen: ich würde gerne rausfinden, welches event gesendet wird, wenn man oben in der window-leiste den waagerechten strich(unter windows ist er waagerecht) zum minimieren des fensters drückt.


dazu hab ich mir folgendes angeguckt:
http://doc.trolltech.com/4.6/qevent.html#Type-enum

habe aber da nichts gefunden.

dnn hab ich folgendes ausprobiert:

Code: Alles auswählen

bool MainWindow::event( QEvent *e )
{
	
	qDebug() <<e->type() ;
	return e->type();
} 
ich fand geraus, dass sowohl beim minimieren als auch beim wiederherstellen des fensters e->type() == 76 ist.

kennt jemand eine lösung, damit ich ganz einfach abfange, wann der benutzer das fenster minimiert haben will?

Verfasst: 3. August 2010 10:12
von franzf
Höh? Da bräuchte es ein komplettes Beispiel, wie du an den komischen Wert kommst.
Eigentlich sollte das changeEvent() implementiert, dort nach type() geswitched, und der QEvent::WindowStateChange abgefangen werden. An den alten state kommst du durch den oldState des gesendeten events (dieses natürlich casten nach QWindowStateChangeEvent*), der neue steckt in this->windowState().

Verfasst: 3. August 2010 10:48
von samsamsam
ich verstehe nur eines nicht: wenn ich also

Code: Alles auswählen

void MainWindow::changeEvent(QEvent* evt)
{
				
     if(evt->type() == QEvent::WindowStateChange)
				{
					QWindowStateChangeEvent* e = dynamic_cast<QWindowStateChangeEvent*>(evt);
					
					if(dynamic_cast<QWindowStateChangeEvent*>(evt)->oldState() == Qt::WindowMaximized)
					
.......
}
so wie du geschrieben hast erfrage, was der oldstate ist, hab ich noch lange nicht den currentstate. ob das fenster minimiert wurde, als es noch maximized war oder minimiert wurde, als es nur zur hälfte gross is, spielt doch keine rolle. old state könnte "Qt::WindowMaximized" oder was anderes aber nur new state ist von bedeutung. QWindowStateChangeEvent hat aber keine funktion zum erfragen und in qevent::type() gibts kein type-enum, der genau die minimierung beschreibt.

Verfasst: 3. August 2010 11:04
von franzf
Hab ich doch oben schon geschrieben:
durch den oldState des gesendeten events (dieses natürlich casten nach QWindowStateChangeEvent*), der neue steckt in this->windowState().
Ich hab trotzdem ein kleines Beispiel für dich gestrickt:

Code: Alles auswählen

#include <QWidget>
#include <QWindowStateChangeEvent>
#include <QApplication>
#include <QDebug>

class Window : public QWidget
{
    void changeEvent(QEvent* e) {
        if( e->type() == QEvent::WindowStateChange ) {
            QWindowStateChangeEvent* wcente = static_cast<QWindowStateChangeEvent*>(e);
            qDebug() << "old" << wcente->oldState() << "new" << this->windowState();
        }
    }
};

int main(int argc, char** argv) {
    QApplication app(argc, argv);
    Window w;
    w.show();
    return app.exec();
}

Verfasst: 3. August 2010 11:23
von samsamsam
oh ok wer lesen kann ist klar im vorteil.

danke das hat wunderbar geklappt. :)