gpt4 book ai didi

python - QMenu 剥离的信号或事件

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:05 24 4
gpt4 key购买 nike

是否有信号/事件可用于 QMenu 撕下?

我有一个 QMenu 子类,其中有 .setTearOffEnabled(True),但如果用户点击可撕下的“栏”。

我无法使用 QtCore.Qt.WindowStaysOnTopHint,因为这会导致我的菜单已经处于撕裂状态。

例如:如果我的主工具区比撕下的大,我点击我的主工具,撕下的窗口就会在它后面。

最佳答案

在以下代码中,当按下撕下(虚线)时发出点击信号:

import sys
from PyQt5 import QtCore, QtWidgets


class Menu(QtWidgets.QMenu):
clicked = QtCore.pyqtSignal()

def mouseReleaseEvent(self, event):
if self.isTearOffEnabled():
tearRect = QtCore.QRect(
0,
0,
self.width(),
self.style().pixelMetric(
QtWidgets.QStyle.PM_MenuTearoffHeight, None, self
),
)
if tearRect.contains(event.pos()):
self.clicked.emit()
QtCore.QTimer.singleShot(0, self.after_clicked)
super(Menu, self).mouseReleaseEvent(event)

@QtCore.pyqtSlot()
def after_clicked(self):
tornPopup = None
for tl in QtWidgets.QApplication.topLevelWidgets():
if tl.metaObject().className() == "QTornOffMenu":
tornPopup = tl
break
if tornPopup is not None:
print("This is the tornPopup: ", tornPopup)
tornPopup.setWindowFlag(QtCore.Qt.WindowStaysOnTopHint)


if __name__ == "__main__":

app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QMainWindow(parent=None)
menu = Menu("Menu", tearOffEnabled=True)
menu.clicked.connect(lambda: print("clicked"))
w.menuBar().addMenu(menu)
for i in range(5):
action = QtWidgets.QAction("action{}".format(i), w)
menu.addAction(action)
w.show()
sys.exit(app.exec_())

关于python - QMenu 剥离的信号或事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55599238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com