无框 pyqt/qml 窗口
Posted
技术标签:
【中文标题】无框 pyqt/qml 窗口【英文标题】:Frameless pyqt/qml window 【发布时间】:2014-04-05 14:10:21 【问题描述】:我已经使用 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】:如果您的主窗口没有装饰,则用户无法拖动任何内容,因此无法移动或调整窗口大小。
对于移动窗口,您可以提供一个小部件来移动窗口,最简单的情况是处理该小部件上的鼠标单击事件,将窗口转换为“移动”,在这种情况下,窗口的鼠标移动处理程序根据鼠标的位置移动窗口.释放时,转换回“不动”。或者,您可以将鼠标单击应用程序的背景解释为“窗口拖动”,然后您将派生并处理鼠标事件以移动窗口。
要调整大小,您必须在窗口中创建一些用户可以拖动以调整大小的项目(除非您想使用滚轮但不遵循标准界面设计)。当单击该项目并将它们解释为“窗口调整大小”时,您将再次处理鼠标事件。
【讨论】:
以上是关于无框 pyqt/qml 窗口的主要内容,如果未能解决你的问题,请参考以下文章