如何在右键单击 Qdoublespinbox 时向 QtCore.Qt.DefaultContextMenu 添加操作?

how to add an action to QtCore.Qt.DefaultContextMenu on Qdoublespinbox on right cilck?

我使用 Qt Designer 开发了一个相当复杂的 GUI 工具。

有关该工具的更多详细信息,请参阅:https://github.com/3fon3fonov/trifon

我定义了许多 QDoubleSpinBox 条目,默认情况下 Qt Designer 将其右键单击菜单策略设置为:

setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)

现在我想在此菜单中添加更多操作,但我根本无法理解它是如何工作的! Qt Designer 中没有任何东西可以让我制作 "CustomContextMenu"。我知道为此我可能需要一些编码(我需要帮助,因此我在这里寻求帮助),但我还需要为所有 SpinBox-es 全局制作它。

很抱歉没有发布代码,因为它对于这个表单来说相当大。有兴趣的请看"gui.py"下的github。但是,在 .ui 文件中,没有任何迹象表明可以控制这些按钮的上下文菜单策略。 相反,我发布了该工具的图像(抱歉图像不好,但是当单击右键并显示菜单时,PrtSc 似乎不起作用)

在此处查看 GUI 图像

因为我们想要将 QAction 添加到默认上下文菜单,我们首先覆盖 contextMenuEvent 事件并使用 QTimer 调用过滤 [=15= 的函数] 并获取显示的 QMenu 并在其中添加 QAction:

doublespinbox.py

from PyQt5 import QtCore, QtWidgets

class DoubleSpinBox(QtWidgets.QDoubleSpinBox):
    minimize_signal = QtCore.pyqtSignal()

    def __init__(self, *args, **kwargs):
        super(DoubleSpinBox, self).__init__(*args, **kwargs)
        self.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)

    def contextMenuEvent(self, event):
        QtCore.QTimer.singleShot(0, self.add_actions)
        super(DoubleSpinBox, self).contextMenuEvent(event)

    @QtCore.pyqtSlot()
    def add_actions(self):
        for w in QtWidgets.QApplication.topLevelWidgets():
            if isinstance(w, QtWidgets.QMenu) and w.objectName() == "qt_edit_menu":
                w.addSeparator()
                minimize_action = w.addAction("minimize this parameter")
                minimize_action.triggered.connect(self.minimize_signal)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = DoubleSpinBox()
    w.show()
    sys.exit(app.exec_())

要在 Qt Designer 中使用 DoubleSpinBox,首先将 doublespinbox.py 放在您的 .ui:

旁边
├── ..
├── rvmod_gui.ui
├── doublespinbox.py   
├── ...

那么您必须升级小部件才能这样做,右键单击 QDoubleSpinBox 并 select 通过将以下内容添加到对话框中 "Promote to ..." 选项:

然后点击“添加”按钮,然后点击“提升”按钮。

对于另一个 QDoubleSpinBox,右键单击并 select 新的升级到选项,其中 DoubleSpinBox 选项是。


你可以找到一个例子here