簡體   English   中英

如何使用QMenu將索引發送到插槽

[英]How to send index to slot with a QMenu

我正在嘗試使用調出QMenuQPushButton來獲得類似QComboBox的行為 即,當選擇一個動作時,我想連接到插槽,並讓該插槽打印出所選項目的索引。 相關的類定義:

from PySide import QtGui, QtCore

class PushIt(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)  
        menBut=self.makeQMenuButton()
        self.show()        

    def makeQMenuButton(self):
        button=QtGui.QPushButton("Men...you!", self)           
        pushMenu=QtGui.QMenu(button)
        #Set up each element of menu
        menBut1=pushMenu.addAction("Select me!")
        menBut2=pushMenu.addAction("Don't select me!")
        #What to do when each one is activated
        menBut1.activated[int].connect(self.menButSlot)
        menBut2.activated[int].connect(self.menButSlot) 
        button.setMenu(pushMenu)       
        return button

    @QtCore.Slot(int)
    def menButSlot(self, menDat):
        print "Menu button ", menDat

有點工作。 例如,當我按下按鈕1時,它返回:

Menu button -3

這與我使用組合框所獲得的結果非常接近,除了計數似乎以-3而不是0開頭。我以為它將以0開頭,所以我認為我根本沒有訪問索引,但是在玩弄我不了解的力量。

我正在Windows 7的iPython / Anaconda中使用PySide。

根據Pavel Strakhov的評論,不贊成使用QMenu.activated信號。 他建議使用QSignalMapper將索引發送到插槽。 效果很好,如下所示:

class PushIt(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)  
        menBut=self.makeQMenuButton()
        self.show()        

    def makeQMenuButton(self):
        button=QtGui.QPushButton("Men...you!", self)           
        #Set up qmenu and its items
        pushMenu=QtGui.QMenu(button)
        menBut1=pushMenu.addAction("Select me!")
        menBut2=pushMenu.addAction("Don't select me!")
        button.setMenu(pushMenu)   

        #set up mapping to create your own indexing scheme
        menuMapping=QtCore.QSignalMapper(self)
        menuMapping.setMapping(menBut1, 0)
        menuMapping.setMapping(menBut2, 1)

        menBut1.triggered.connect(menuMapping.map)
        menBut2.triggered.connect(menuMapping.map)
        menuMapping.mapped[int].connect(self.menButSlot) 

        return button

    @QtCore.Slot(int)
    def menButSlot(self, menDat):
        print "Home-grown triggered index:", menDat

這與我希望的完全一樣(盡管我仍然對我收到的activated的奇怪負值感到好奇)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM