QMouseEvent

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
egge
User
Beiträge: 5
Registriert: Mittwoch 23. Juli 2003, 15:02

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???
Mickey
User
Beiträge: 22
Registriert: Donnerstag 29. August 2002, 00:34
Wohnort: Frankfurt am Main
Kontaktdaten:

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.
Gruß,

:M:
egge
User
Beiträge: 5
Registriert: Mittwoch 23. Juli 2003, 15:02

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:
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

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
Antworten