QToolButton:更改菜单位置

时间:2011-12-07 12:56:25

标签: qt

当使用带有QToolButton菜单的菜单时,按钮下方会显示。有没有办法在按钮的左/右显示菜单?

2 个答案:

答案 0 :(得分:3)

该位置在 [Qt安装目录] /src/gui/widgets/qtoolbutton.cpp 的函数void QToolButtonPrivate::popupTimerDone()中进行了硬编码。除非你从头开始实现自己的弹出菜单,否则似乎很难覆盖它。

答案 1 :(得分:1)

我知道这个问题很久以前就得到了回答,但是我想为这个问题添加一个新的答案,因为接受的答案已经不再有效了。实际上很容易改变QToolButton上的菜单位置。您需要子类化QMenu并覆盖事件函数。当有节目事件时,只需更改菜单的位置即可。

这是一个使用PySide的简单示例:

from PySide import QtCore, QtGui

class MyMenu(QtGui.QMenu):
    def event(self,event):
        if event.type() == QtCore.QEvent.Show:
            self.move(self.parent().mapToGlobal(QtCore.QPoint(0,0))-QtCore.QPoint(0,self.height()))
        return super(MyMenu,self).event(event)

if __name__ == "__main__":
    app = QtGui.QApplication([])
    w = QtGui.QWidget()
    w.setGeometry(100,100,500,500)
    tb = QtGui.QToolButton(w)
    tb.setText("HELLO")
    tb.setGeometry(70,70,40,30)
    m = MyMenu("Menu",tb)
    m.addAction("Exit")
    tb.setMenu(m)
    w.show()
    app.exec_()