2

QMenuでサブメニューを開く方向を制御する方法を探しています。デフォルトの動作では、十分な画面領域がない場合を除いて、右に開いてから左に開きます。

画面の右端にメニューがある場合(例:chromeの設定レンチ)、ネストされたメニューが複数ある場合、デフォルトの動作により、左から開くと右から開くの間で、それらが前後にpingを実行します。これは厄介なユーザーエクスペリエンスです。

私が欲しいのは、QMenuに常に左側のサブメニューを開くように指示する方法です。QMenuにはこれを直接制御することはできませんが、Qtには、プラットフォーム固有の動作のための魔法の「アプリケーション」または「グローバル」設定がたくさんあることがよくあります。誰か知ってるのかなぁ!

以前にC#でToolStripMenuを使用してこれを行ったことがあるので、一部のツールキットにこの機能があることを知っています。

4

1 に答える 1

3

私が考えることができる1つのオプションがあります。を介して特定のメニューの方向を設定でき、setLayoutDirection(QtCore.Qt.RightToLeft)スペースがある場合は常に左に展開されます。

ただし、トップレベルのメニューが左から右に配置されている場合、サブメニューが右から左に配置されている場合、見栄えがよくありません。少なくとも、私の Windows 7 ではそうではありません:

import sys
from PyQt4 import QtGui, QtCore

app = QtGui.QApplication(sys.argv)
main = QtGui.QMainWindow()
menubar = QtGui.QMenuBar()

menus = []
submenus = {}
for x in range(10):
    # top menus
    menu = QtGui.QMenu('Top %d' % x)
    menus.append(menu)

    # set direction
    menu.setLayoutDirection(QtCore.Qt.RightToLeft)

    # add to menubar
    menubar.addMenu(menu)

    for y in range(5):
        # a sub-menu
        submenu = QtGui.QMenu('Level 1 - %d' % y)

        # some dummy actions
        submenu.addAction('Level 2 - 1')
        submenu.addAction('Level 2 - 2')

        # keep reference
        submenus[(x,y)] = submenu
        # add to the top menu
        menu.addMenu(submenu)

main.setMenuBar(menubar)
main.show()

sys.exit(app.exec_())

ここに画像の説明を入力

于 2012-01-06T08:52:58.283 に答える