无框架pyqt / qml窗口

时间:2014-04-05 14:10:22

标签: qt pyqt qml

我已经使用qt / qml完成了无框窗口,但现在我无法使用win7窗口连接器(向右和向左转角)并通过将窗口拖动到屏幕顶部来最大化窗口。有办法处理这些信号吗?

main.py

class MainDialog(QtQuick.QQuickView):
def __init__(self, parent = None):
    super(MainDialog, self).__init__(parent)

    self.maxed = False

    self.ctx = self.engine().rootContext()
    self.ctx.setContextProperty("view", self)
    self.ctx.setContextProperty("maximized", self.maxed)

    self.setSource(QtCore.QUrl("Main.qml"))
    self.setResizeMode(QtQuick.QQuickView.SizeRootObjectToView)

    self.setFlags(QtCore.Qt.FramelessWindowHint
        | QtCore.Qt.Window
        | QtCore.Qt.WindowSystemMenuHint

    )
    self.setColor(QtGui.QColor(QtCore.Qt.transparent))

    self.engine().quit.connect(App.quit)

main.qml

import QtQuick 2.1

Rectangle {
id: main

width: 500
height: 600

visible: true
border.color: "black"

opacity: .95
    MouseArea {
        anchors.fill: frame

        onPressed: {
            frame.mouse_x = mouseX
            frame.mouse_y = mouseY
        }

        onPositionChanged: {
            view.x += mouse.x - frame.mouse_x
            view.y += mouse.y - frame.mouse_y
        }

        onDoubleClicked: !maximized ? view.set_max() 
            : view.set_normal()
    }
}

1 个答案:

答案 0 :(得分:2)

如果您的主窗口没有装饰,则用户无法拖动任何内容,因此无法移动或调整窗口大小。

对于移动窗口,您可以提供移动窗口的窗口小部件,最简单的情况是在窗口小部件上处理鼠标单击事件将窗口转换为"移动",在这种情况下窗口的鼠标移动处理程序根据鼠标的位置移动窗口。在发布时,转换回"非移动"。或者,您可以将应用程序背景上的鼠标单击解释为"窗口拖动"然后你将派生和处理鼠标事件来移动窗口。

要调整大小,您必须在窗口中创建一些项目,用户可以拖动以调整大小(除非您想使用滚轮但不遵循标准界面设计)。单击该项目时,您将再次处理鼠标事件,并将其解释为"窗口调整大小"。