MoveEvents Problem
MoveEvents Problem
Hallo,
ich möchte ein Widget während des Verschiebens leicht durchsichtig machen. Wie das via setWindowOpacity geht weiss ich.
Aber welche Events nutze ich dafür am besten? MoveEvent wir ja erst ausgelöst, wenn der Move beendet ist. Aber welcher Event startet den Move?
Ich wäre für einen kurzen Tip dankbar.
ich möchte ein Widget während des Verschiebens leicht durchsichtig machen. Wie das via setWindowOpacity geht weiss ich.
Aber welche Events nutze ich dafür am besten? MoveEvent wir ja erst ausgelöst, wenn der Move beendet ist. Aber welcher Event startet den Move?
Ich wäre für einen kurzen Tip dankbar.
Der move dauert doch eh länger, oder? Dann sollte es egal sein, wenn beim ersten moveEvent das Fenster noch nicht durchscheinend ist, oder?
Ansonsten kannst du natürlich deine eigene Window-Deko schreiben. Schau dir dazu mal z.B. qmmp an. Keine System-Deko sondern ne eigene. Darin kannst du dann nen mousePressEvent() abfangen und die opacity ändern, am besten dynamisch faden![Smile :)](./images/smilies/icon_e_smile.gif)
Oder du versuchst dich in den WindowManager einzuklinken, hab da aber absolut keine Ahnung, und es wird auch ganz schön umfangreich, wenn dein App auf Windows, Mac und Linux (allein letzteres hat ja zig Manager...) laufen soll.
Ansonsten kannst du natürlich deine eigene Window-Deko schreiben. Schau dir dazu mal z.B. qmmp an. Keine System-Deko sondern ne eigene. Darin kannst du dann nen mousePressEvent() abfangen und die opacity ändern, am besten dynamisch faden
![Smile :)](./images/smilies/icon_e_smile.gif)
Oder du versuchst dich in den WindowManager einzuklinken, hab da aber absolut keine Ahnung, und es wird auch ganz schön umfangreich, wenn dein App auf Windows, Mac und Linux (allein letzteres hat ja zig Manager...) laufen soll.
qmmp bringt mich da nicht weiter. Ich habe nicht die Zeit mich durch ein ganzes Projekt zu arbeiten um dort den Move zu suchen.
Desweiteren wird das MoveEvent einmalig und nur am Ende des Movings ausgeführt (When the widget receives this event, it is already at the new position.)
Bringt also alles nichts
Desweiteren wird das MoveEvent einmalig und nur am Ende des Movings ausgeführt (When the widget receives this event, it is already at the new position.)
Bringt also alles nichts
Probiers doch wenigstens aus, wäre nämlich die leichteste Variante!toem hat geschrieben:Desweiteren wird das MoveEvent einmalig und nur am Ende des Movings ausgeführt (When the widget receives this event, it is already at the new position.)
Bringt also alles nichts
Code: Alles auswählen
#include <QWidget>
#include <QMoveEvent>
#include <QDebug>
class Window : public QWidget
{
Q_OBJECT
protected:
void moveEvent(QMoveEvent *e)
{
qDebug() << e->oldPos() << e->pos();
}
};
Code: Alles auswählen
QPoint(0,0) QPoint(0,0)
QPoint(0,0) QPoint(36,43)
QPoint(36,43) QPoint(46,43)
QPoint(46,43) QPoint(49,43)
QPoint(49,43) QPoint(50,43)
QPoint(50,43) QPoint(54,43)
QPoint(54,43) QPoint(60,43)
QPoint(60,43) QPoint(61,43)
QPoint(61,43) QPoint(64,43)
QPoint(64,43) QPoint(66,43)
QPoint(66,43) QPoint(69,43)
QPoint(69,43) QPoint(72,43)
QPoint(72,43) QPoint(73,43)
QPoint(73,43) QPoint(74,43)
QPoint(74,43) QPoint(76,43)
QPoint(76,43) QPoint(76,54)
QPoint(76,54) QPoint(76,56)
QPoint(76,56) QPoint(76,59)
QPoint(76,59) QPoint(76,61)
QPoint(76,61) QPoint(76,63)
Aber funktionieren wird es nicht, denn dich interessiert schon der erste Klick in die Window-Deko. Denn der Weg über das moveEvent geht nur mit einem Timer, der nach bestimmter Zeit, wenn nicht bewegt wurde, die Transparenz wieder rückgängig macht.
Und ich hab jetzt mal 1 Minute durch qmmp geschaut. Dich interessieren wohl in qmmp/src/ui die MainWindow und TitleBar.
Und die Zeit sollstest du dir schon nehmen, die Konsequenzen deiner Entscheidungen zu überdenken, und eine Lösung zu suchen die auch funktioniert, auch wenn du dafür mal ein bisschen in anderen Projekten schnüffeln musst...
Heißt das du kriegst den ganzen Output erst wenn du fertig bewegt hast?
Um auszuschließen, dass es ein Problem mit deiner Console ist, versuch mal das:
Um auszuschließen, dass es ein Problem mit deiner Console ist, versuch mal das:
Code: Alles auswählen
#include <QListWidget>
#include <QMoveEvent>
class Window : public QListWidget
{
Q_OBJECT
protected:
void moveEvent(QMoveEvent *e)
{
QString label = "("+
QString::number(e->oldPos().x()) + ", " +
QString::number(e->oldPos().y()) + ") -> (" +
QString::number(e->pos().x()) + ", " +
QString::number(e->pos().y()) + ")";
addItem(label);
}
};
Dann sag auch mal welches OS/Compiler du verwendest.
Und wenn es nicht geht, ist es für dich eh keine Lösung. Dann musst du dich mit einer eigenen Deko auseinandersetzen, wenn die Transparenz beim Verschieben ein kritisches Feature ist
Dazu mainwindow und titlebar von qmmp.
http://qmmp.ylsoftware.com/index_en.php
Und wenn es nicht geht, ist es für dich eh keine Lösung. Dann musst du dich mit einer eigenen Deko auseinandersetzen, wenn die Transparenz beim Verschieben ein kritisches Feature ist
![Wink ;)](./images/smilies/icon_e_wink.gif)
http://qmmp.ylsoftware.com/index_en.php