不推荐使用警告:移动应用程序(删除标题栏)时的函数 - PySide6

7

当我移动应用程序时,会出现此警告:

C:\Qt\Login_Test\main.py:48: DeprecationWarning: Function: 'globalPos() const' is marked as deprecated, please check the documentation for more information.
  self.dragPos = event.globalPos()
C:\Qt\Login_Test\main.py:43: DeprecationWarning: Function: 'globalPos() const' is marked as deprecated, please check the documentation for more information.
  self.move(self.pos() + event.globalPos() - self.dragPos)
C:\Qt\Login_Test\main.py:44: DeprecationWarning: Function: 'globalPos() const' is marked as deprecated, please check the documentation for more information.
  self.dragPos = event.globalPos()

我使用了这段代码:

        self.remove_title()
        self.ui.appname_label.mouseMoveEvent = self.move_window

    def remove_title(self):
        self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)

        self.shadow = QGraphicsDropShadowEffect(self)
        self.shadow.setBlurRadius(20)
        self.shadow.setXOffset(0)
        self.shadow.setYOffset(0)
        self.shadow.setColor(QColor(0, 0, 0, 250))

        self.ui.frame.setGraphicsEffect(self.shadow)

    def move_window(self, event):
        if event.buttons() == Qt.LeftButton:
            self.move(self.pos() + event.globalPos() - self.dragPos)
            self.dragPos = event.globalPos()
            event.accept()

    def mousePressEvent(self, event):
        self.dragPos = event.globalPos()

有没有办法跳过这个警告?它可以运行,但是这个警告很烦人。


警告提示您该函数可能会在未来版本中被删除,并且在当前版本中其工作方式可能存在问题(导致弃用)。您是否已经查看文档以了解建议的更改?这可能值得一试,以避免在升级时代码完全无法工作。 - Kemp
是的,我已经检查过了,但没有找到任何解决此问题的方法。但如果只是一条信息,将来我会关注它。谢谢你的回答。 - bangKok
看起来 globalPos 已经被 globalPosition 替换了,它可能返回浮点数而不是整数作为位置。 - Kemp
尝试使用 globalPosition()。而且,正如所说的那样,这只是一个“警告”。 - musicamante
2个回答

5
这对我行得通。
p = event.globalPosition()
globalPos = p.toPoint()

例如,您可以像这样使用:
def mousePressEvent(self, event):
    p = event.globalPosition()
    globalPos = p.toPoint()
    self.dragPos = globalPos

3
为什么不直接使用 self.dragPos = event.globalPosition().toPoint() - sanab3343

2

event.pos()已被弃用,未来版本可能会删除。
尝试使用event.scenePosition()来避免抖动。

def mousePressEvent(self, event):
    if event.button() == Qt.LeftButton:
        self.offset = QPoint(event.position().x(),event.position().y())
    else:
        super().mousePressEvent(event)

def mouseMoveEvent(self, event):
    if self.offset is not None and event.buttons() == Qt.LeftButton:

        self.move(self.pos() + QPoint(event.scenePosition().x(),event.scenePosition().y()) - self.offset)
    else:
        super().mouseMoveEvent(event)

def mouseReleaseEvent(self, event):
    self.offset = None
    super().mouseReleaseEvent(event)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接