Seite 1 von 1
[gelöst] Mausklick im oberen Fensterbereich abfangen
Verfasst: 27. Mai 2005 09:50
von Saiyaman
Wie geht das? Ich hab den Fensterrahmen jetzt deaktiviert und nun muss ich ja einen neuen erstellen (bsp. ein buntes Frame

) und wenn der Benutzer da rein klickt und verschiebt, soll sich das Fentser verschieben.
Wie realisiere ich sowas? Im Qt-Designer?
MfG
Verfasst: 27. Mai 2005 11:01
von FlorianBecker
Hallo Saiyaman,
du macht ein Widget und setzt es dementsprechend in deiner Anwendung. Allerdings wieso nimmt man eine eigene Winbar, wenn man diese dann wie eine normale benutzt? Dann kannst doch auch gleich bei der Standard Winbar bleiben?
Verfasst: 27. Mai 2005 11:02
von FlorianBecker
Andere Frage, dein Thema runde Fenster ist das gelöst?
Verfasst: 27. Mai 2005 13:03
von Saiyaman
Ja. Es reichte mir, den Rahmen auszublenden um mein eigenen "Stil" rüberzubringen.
Und da ich den Rahmen nun ausgeblendet habe und diese hässliche std. Winbar weg is, brauch ich eine in meinem Stil
MfG
Verfasst: 27. Mai 2005 14:26
von FlorianBecker
Einfach ein Widget machen und das dementsprechend zeichnen:
Code: Alles auswählen
Xgq2Titlebar::Xgq2Titlebar(QWidget *p) : QWidget(p) {
moving = false;
active = false;
setBackgroundMode(NoBackground);
}
void Xgq2Titlebar::setPixmapActive(int pixId) { nActiveId = pixId; }
void Xgq2Titlebar::setPixmapInactive(int pixId) { nInactiveId = pixId; }
void Xgq2Titlebar::setState(bool state) { active = state; update(); }
void Xgq2Titlebar::paintEvent(QPaintEvent *) { Xgq2Modeller::instance()->bltTo(getPixmapId(), this, 0, 0); }
int Xgq2Titlebar::getPixmapId() {
if (active)
return nActiveId;
else
return nInactiveId;
}
void Xgq2Titlebar::mousePressEvent(QMouseEvent * e) {
if (e->button() != RightButton) {
if (!moving) {
moving = true;
mDragStart = e->pos();
mLastPos = e->globalPos();
}
active = true;
update();
return;
}
}
void Xgq2Titlebar::mouseDoubleClickEvent(QMouseEvent *) { emit(shaded()); }
void Xgq2Titlebar::mouseReleaseEvent(QMouseEvent * e) {
if (e->button() != RightButton) {
moving = false;
update();
return;
}
}
void Xgq2Titlebar::mouseMoveEvent(QMouseEvent * e) {
QPoint diff = e->globalPos() - mLastPos;
if (abs(diff.x()) > 10 || abs(diff.y()) > 10) {
// Moving starts only, when passing a drag border
moving = true;
}
if (moving)
parentWidget()->move(e->globalPos() - mDragStart);
}
Verfasst: 15. Juni 2005 13:44
von Saiyaman
Danke. Hat geklappt.
MfG