QToolButton: change menu position

匿名 (未验证) 提交于 2019-12-03 01:20:02

问题:

When using menu with QToolButton menu is shown right under the button. Is there a way to display menu in the left/right of the button?

回答1:

The position is hard-coded in the function void QToolButtonPrivate::popupTimerDone() in [Qt install directory]/src/gui/widgets/qtoolbutton.cpp. It seems pretty hard to override that, unless you implement your own popup menu from scratch.



回答2:

I know this question was answered a while ago, but I wanted to add a new answer to this question since the accepted answer is no longer valid. It is actually quite easy to change the menu position on a QToolButton. You need to subclass QMenu and override the event function. When there is a show event, just change the position of the menu.

Here is a simple example using 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_() 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!