Seite 1 von 1

QMouseEvent

Verfasst: Mittwoch 23. Juli 2003, 15:06
von egge
Hi! :)

Ich bin gerade dabei eine GUI mit Python und Qt zu programmieren.

Ich möchte ein Objekt (z.B. ein QFrame) mit Hilfe der Maus verschieben. Ich weiss das es mit QMouseEvent gehen soll, allerdings hab ich es bis jetzt nicht geschafft. :cry:

Kann mir jemand weiter helfen oder einen Tip geben???

Nicht so

Verfasst: Montag 28. Juli 2003, 23:48
von Mickey
So funktioniert das nicht - Fenster verschieben ist die Aufgabe des Fenstermanagers.

Bei Qt kommen solche Events nicht an, da eine Titelleiste nicht direkt zum Fenster gehört.

Ich weiss nicht genau, was Du machen willst, aber schau doch mal lieber bei QCanvas rein.

Re: Nicht so

Verfasst: Donnerstag 7. August 2003, 19:22
von egge
Mickey hat geschrieben:So funktioniert das nicht - Fenster verschieben ist die Aufgabe des Fenstermanagers.

Bei Qt kommen solche Events nicht an, da eine Titelleiste nicht direkt zum Fenster gehört.

Ich weiss nicht genau, was Du machen willst, aber schau doch mal lieber bei QCanvas rein.

Hi Mickey!!

Erste einmal vielen dank, dass Du mir weiter helfen wolltest. Ich hab zwar deinen Rat verfolgt und mir QCanvas angeschaut, allerdings hat es mir nicht viel geholfen.

Naja, ich hab mein Problem auch so gelöst. Falls du interesse hast:

Code: Alles auswählen

import sys, string
from qt import *


class Glyph(QFrame):
    def __init__ (self, *args):
        apply (QFrame.__init__, (self, ) + args)
        self.setFrameShape(QFrame.StyledPanel)
        self.setFrameShadow(QFrame.Raised)
        self.PushButton2 = QPushButton(self,"OK 1")
        self.PushButton2.setGeometry(QRect(10,10,40,30))
        self.PushButton2.setText("OK 1")
        self.PushButton2_3 = QPushButton(self,"OK 2")
        self.PushButton2_3.setGeometry(QRect(150,120,40,30))
        self.PushButton2_3.setText("OK 2")
        self.setMouseTracking(0)

    def mousePressEvent (self, ev):
        if ev.button () != Qt.LeftButton:
            return
        self.xold = ev.globalX()
        self.yold = ev.globalY()
		
    def mouseMoveEvent (self, ev):
        if ev.state () != Qt.LeftButton:
            return
        dx = ev.globalX() - self.xold
        dy = ev.globalY() - self.yold
        self.move(self.x() + dx, self.y() + dy)
        self.xold = ev.globalX()
        self.yold = ev.globalY()

class MainWindow (QMainWindow):
    def __init__ (self, *args):
        apply (QMainWindow.__init__, (self, ) + args)
        self.workspace = QWorkspace (self)
        self.resize (800, 600)
        self.setCentralWidget(self.workspace)
	
        glyph = Glyph(self)
        glyph.setGeometry(QRect(90,110,200,160))
        glyph.show()

a = QApplication (sys.argv)
mw = MainWindow ()
mw.show ()
a.connect (a, SIGNAL ('lastWindowClosed ()'), a, SLOT ('quit ()'))
a.exec_loop ()
Mein neues Problem ist jetzt, wie binde ich ein QScrollView ein, damit rechts und unten am Rand ein Scrollbalken erscheint, falls das bewegliche Frame aus dem Fenster verschoben wird.
Ích hab schon einiges Versuch, bin aber kein Schritt vorangekommen. Hast du vielleicht eine Idee?


Gruß egge :wink:

Verfasst: Donnerstag 7. August 2003, 19:28
von hans
Mal eine Zwischenfrage an Egge: Warum erzeugst du den Code manuell und nicht mit dem QT Designer?

Ich muß allerdings gleich gestehen, dass dein manuell erzeugter Code unschlagbar kmpakt ist. Ein mittels IDE erzeugter Code kann da nicht mithalten. Trotzdem finde ich den QT designer durchaus brauchbar.

Hans