2011-12-07 111 views

回答

3

該位置在功能void QToolButtonPrivate::popupTimerDone()[Qt安裝目錄] /src/gui/widgets/qtoolbutton.cpp中被硬編碼。除非你從頭開始實現自己的彈出式菜單,否則很難重寫它。

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_()