welches event bei minimierung?

Alles rund um die Programmierung mit Qt
Antworten
samsamsam
Beiträge: 43
Registriert: 9. Juni 2009 16:22
Wohnort: Dortmund

welches event bei minimierung?

Beitrag 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?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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().
samsamsam
Beiträge: 43
Registriert: 9. Juni 2009 16:22
Wohnort: Dortmund

Beitrag 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.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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();
}
samsamsam
Beiträge: 43
Registriert: 9. Juni 2009 16:22
Wohnort: Dortmund

Beitrag von samsamsam »

oh ok wer lesen kann ist klar im vorteil.

danke das hat wunderbar geklappt. :)
Antworten