3

QActionsは、1つの場所で設計および管理し、QMenus、QToolBars、および理論的には任意のQWidget(結局のところすべてのQWidgetにはaddAction()関数があります)で表示およびインターフェースできるため、優れています。さらに、デザイナーで操作できるので便利です(ユーザーが微調整できるように、インターフェイスの大部分をデザイナーに保持する必要があります)。

私は問題に遭遇しました、しかし:\

私がやりたいのは、グループ内のいくつかのアクション(アイコンやテキストなど)を表示することです。これを行うにはいくつかの方法があります。

  1. QToolBarの使用:QToolBarにはすでに多数の構成オプション(アイコン、テキスト、両方など)があるため、これは完璧な場合があります。残念ながら、メインウィンドウ以外にQToolBarsを追加できないようです(デザイナーを使用している場合)。プログラムで実行できますが、ツールバーにもコードを入力する必要があります(良くありません)。

  2. 通常のQWidgetの使用:私はこれをしばらく試しましたが、まったく成功しませんでした。デザイナでQWidgetsにアクションを追加する際に問題が発生するだけでなく、プログラムでアクションを追加しても表示できません(contextMenuPolicyをActionsContextMenuに設定しようとしました)。

これらのパスのどれが柔軟なもの(微調整に役立つオプション)につながる可能性があるが、設計者からもアクセスできる可能性があるかについて、誰かが何か提案がありますか?

ありがとう!

4

1 に答える 1

1

したがって、問題の真実は、QToolBarクラスがウィジェットとしてデザイナーに公開されなかったということです。ロードされると、それに完全にアクセスできます。あなたの問題には2つの比較的簡単な解決策があります-あなたがそれをする必要がある頻度に依存します。

1:UIファイルをハックする

  1. UIファイルを作成する場合は、新しい空白のQWidgetをそのファイルにドラッグします。
  2. ファイルをディスクに保存します
  3. テキストエディタで開き、QWidgetクラスをQToolBarに変更します
  4. Designerで再度開くと、UIファイルにQToolBarが含まれています。

これをたまにしか行わない場合、これは悪い方法ではありません。

2:QToolBarDesignerプラグインを作成します

それを行うための少し長い方法(ただし、これを頻繁に使用する場合はより良い)は、QToolBarを自分でDesignerに公開することです。この方法で少し面倒なのは、ドラッグ/ドロップで移動できないことだけです...しかし、それでも使用して、レイアウトなどすべてを配置できます。

私は主にPyQtを扱っているので、これはプラグインがPyQtでどのように見えるかですが、C++でそれを行う方法については標準のドキュメントを読むことができます。

#!/usr/bin/python

''' Auto-generated ui widget plugin '''

from PyQt4.QtDesigner import QPyDesignerCustomWidgetPlugin
from PyQt4.QtGui import QIcon
from PyQt4.QtGui import QToolBar as WidgetClass

class QToolBarPlugin( QPyDesignerCustomWidgetPlugin ):
    def __init__( self, parent = None ):
        super(QToolBarPlugin, self).__init__( parent )

        self.initialized = False

    def initialize( self, core ):
        if ( self.initialized ):
            return

        self.initialized = True

    def isInitialized( self ):
        return self.initialized

    def createWidget( self, parent ):
        return WidgetClass(parent)

    def name( self ):
        if ( hasattr( WidgetClass, '__designer_name__' ) ):
            return WidgetClass.__designer_name__
        return WidgetClass.__name__

    def group( self ):
        if ( hasattr( WidgetClass, '__designer_group__' ) ):
            return WidgetClass.__designer_group__
        return 'ProjexUI'

    def icon( self ):
        if ( hasattr( WidgetClass, '__designer_icon__' ) ):
            return QIcon(WidgetClass.__designer_icon__)
        return QIcon()

    def toolTip( self ):
        if ( hasattr( WidgetClass, '__designer_tooltip__' ) ):
            return WidgetClass.__designer_tooltip__
        elif ( hasattr( WidgetClass, '__doc__' ) ):
            return str(WidgetClass.__doc__)
        return ''

    def whatsThis( self ):
        return ''

    def isContainer( self ):
        if ( hasattr( WidgetClass, '__designer_container__' ) ):
            return WidgetClass.__designer_container__
        return False

    def includeFile( self ):
        return 'PyQt4.QtGui'

    def domXml( self ):
        if ( hasattr( WidgetClass, '__designer_xml__' ) ):
            return WidgetClass.__designer_xml__

        return '<widget class="QToolBar" name="toolbar"/>'
于 2012-08-22T00:53:32.863 に答える