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?
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_()
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With