2011-12-07 12 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_() 
関連する問題