QT, move() funktioniert nicht
-
nur wenn der User versucht das zu verschieben.
-
Und wie kann ich es dann unterdrücken dass der Benutzer das Fenster nicht verschieben kann?
-
gibt es nicht die Funktion "setMovable( bool )" ?
sry, grad geschaut, gibt es nicht.
Welche QT-Version benutzt du?
-
Qt 3.3 ...
bool Fenster::eventFilter( QObject *o, QEvent *e ) { if(e->type() == QEvent::Move) { qDebug("lol"); return TRUE; //eat } return FALSE; }
Funktioniert auch nicht... kann man die Events unterwegs nicht "auffressen"?
-
Wenn ich mich richtig erinnere, ist unter X11 hauptsächlich der Window Manager für die Positionierung der Fenster zuständig. Die Anwendungen können nur Hinweise geben und Änderungen anfordern. Deshalb ist es schwer dies gegen den Window Manager durchzusetzen.
Aber je nach Window Manager hat man da gute Chancen. Zum Beispiel kann man dem kwin von KDE sagen, dass er die Positionierung eines Fensters erzwingen soll. Wie das aus einem Programm heraus geht, weiss ich grad nicht, aber man kann es manuell mit Alt+F3 -> Erweitert -> Einstellungen für spezielle Fenster -> Geometire -> Position machen.
Eine andere Möglichkeit ist, ein Fenster ganz ohne Rand zu machen. Dann hat es auch keine Dekoration und kannn nicht verschoben werden. Siehe dazu das Example toplevel.
-
Wo finde ich das Example Toplevel?
-
hshs schrieb:
Wo finde ich das Example Toplevel?
Im qt-source gibt es das Verzeichnis examples und darin toplevel. Bei meiner Suse Installation liegt es in /usr/share/doc/packages/qt3/examples/toplevel/.
Um den Code zu sehen, solltest du die .ui Datei mit dem designer öffnen.
-
hshs schrieb:
Funktioniert auch nicht... kann man die Events unterwegs nicht "auffressen"?
http://doc.trolltech.com/3.3/qobject.html#installEventFilter
-
Ich weiss nicht, ob das mit Eventfiltern gehen wird. Denn wie sagt die Doku:
"This event handler can be reimplemented in a subclass to receive widget move events. When the widget receives this event, it is already at the new position."
Das hört sich für mich danach an, dass der Event erst dann erzeugt wird, wenn schon der Move längst gegessen ist.
-
Nimm doch einfach nur ein Frame, welches keine Titelzeile hat.
Dann kann kein User das verschieben und kein Windowmanager bringt es
zum Flickern.