QMdiSubWindow merkt sich seine Position nicht!

Alles rund um die Programmierung mit Qt
Antworten
QuornJulio
Beiträge: 26
Registriert: 8. Dezember 2011 21:57

QMdiSubWindow merkt sich seine Position nicht!

Beitrag von QuornJulio »

Hallo,

ich möchte innerhalb des QMdiAreas ein "fenster" zur verfügung stellen,
welches der user bewegen kann. den windows-typischen "rahmen" möchte
ich nicht haben.

Nun stelle ich mein QMdiSubWindow wie folgt zusammen:

Code: Alles auswählen

QMdiSubWindow* mMdiSubWindow = new QMdiSubWindow(this->mdiArea, Qt::FramelessWindowHint);
mMdiSubWindow->setWidget(mCustomWidget);
this->mdiArea->addSubWindow(mMdiSubWindow);
this->mdiArea->setActiveSubWindow(mMdiSubWindow);
setCentralWidget(this->mdiArea);
in meinem mCustomWidget habe ich ein QLabel (eigene "Titelleiste") und eine QTabelView.
auf dem QLabel führe ich ein installEventFilter(this) aus. (wobei this mCustomWidget ist)
in der methode eventFilter von mCustomWidget leite ich den QMouseEvent weiter an
mousePressEvent, mouseMoveEvent und mouseReleaseEvent.

ich kann mit dem QLabel das QMdiSubWindow innerhalb von QMdiArea verschieben.

Code: Alles auswählen

if(moving) {
  QObject* qParent = this->parent();
  QMdiSubWindow* mSubWindow = qobject_cast<QMdiSubWindow*>(qParent);
  QPoint qPoint = mSubWindow->mapToParent(event->pos() - offset);
  mSubWindow->move(qPoint);
  QRect& qRect = const_cast<QRect&>(mSubWindow->geometry());
  qRect.setX(qPoint.x());
  qRect.setY(qPoint.y());
}
alles soweit gut. möchte ich es allerdings erneut verschieben, "springt" das QMdiSubWindow
zurück zum ursprungspunkt (also vom QMdiArea, als parent, aus gesehen auf 0,0).

ich weiß nicht, wie ich es dem QMdiSubWindow begreiflich machen kann, daß sich seine
position geändert hat.

für tipps wäre ich euch sehr dankbar.

gruss
QuornJulio
QuornJulio
Beiträge: 26
Registriert: 8. Dezember 2011 21:57

QMdiSubWindow merkt sich seine Position nicht!

Beitrag von QuornJulio »

hallo,

hat niemand eine idee? dankbar wäre ich auch für links, die mir weiterhelfen.
ich habe zwar gegooglelt, finde leider nur nichts brauchbares.

gruss
QuornJulio
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QMdiSubWindow merkt sich seine Position nicht!

Beitrag von franzf »

Mir ist nicht klar, was du genau haben willst, deine Formulierungen wie "in der methode eventFilter von mCustomWidget leite ich den QMouseEvent weiter an mousePressEvent, mouseMoveEvent und mouseReleaseEvent." machen in meinem Augen wenig Sinn.
Das geschickteste wird sein, du extrahierst die Problemklassen, machst daraus ein neues Projekt und postest den Code hier. Bitte aufpassen, dass es auch kompiliert - danke. Denn beschreibn kann man viel, man sieht nur nicht, was der Code sonst noch treibt ;)
QuornJulio
Beiträge: 26
Registriert: 8. Dezember 2011 21:57

QMdiSubWindow merkt sich seine Position nicht!

Beitrag von QuornJulio »

hallo franzf,

es ist ein geziptes eclipse-project.
ich hätte da CustomWidget.hpp/.cpp und MainWindow.hpp/.cpp, die wichtig wären.
die classen sind sehr "einfach" gebaut und es ist mir möglich/sollte möglich sein, das projekt zu kompilieren.
nur so am rande - ich benutze Qt 4.7.4.

ich danke dir für deine hilfe.

gruss
QuornJulio
Dateianhänge
Demo.zip
(9.58 KiB) 121-mal heruntergeladen
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QMdiSubWindow merkt sich seine Position nicht!

Beitrag von franzf »

eventFilter ist hier doch unnötig. Frag direkt im mouseXXXEvent, ob die Maus im Label ist, wenn ja -> Schieben. Ansonsten ignorieren (oder was auch immer).
Dass du Probleme hast liegt an der falschen Verwendung der mapTo/mapFrom/-Funktionen. Versuch am besten anhand eines kleinen Beispiels das zu verstehen, dann kriegst du das Problem sicher in den Griff.
QuornJulio
Beiträge: 26
Registriert: 8. Dezember 2011 21:57

QMdiSubWindow merkt sich seine Position nicht!

Beitrag von QuornJulio »

hallo franzf,

hab den eventFilter rausgenommen. stümmt, war unnötig.
mit der richtigen verwendung von mapToXXX klappt das jetzt auch.

vielen dank für deine hilfe.

gruss
QuornJulio
Antworten