[gelöst] Mausklick im oberen Fensterbereich abfangen

Alles rund um die Programmierung mit Qt
Antworten
Saiyaman
Beiträge: 111
Registriert: 20. Mai 2005 13:52

[gelöst] Mausklick im oberen Fensterbereich abfangen

Beitrag 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
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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?
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Andere Frage, dein Thema runde Fenster ist das gelöst?
Saiyaman
Beiträge: 111
Registriert: 20. Mai 2005 13:52

Beitrag 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
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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);
}
Saiyaman
Beiträge: 111
Registriert: 20. Mai 2005 13:52

Beitrag von Saiyaman »

Danke. Hat geklappt. :)

MfG
Antworten