API ガイド > Qt の使用 >

# loadUI コマンドの使用方法

Qt の Designer ツールを使用すると、インタフェースをインタラクティブに作成して移植可能な XML フォーマットで保存できます。Maya には、loadUI というコマンドがあり、MEL や Python のスクリプトで使用してこのようなファイルを Maya にロードし、可能な場合は Maya の標準コントロールに変換できます。

以下の図に、Qt Designer を使用して作成した、コンボボックス、テキスト フィールド、関連ラベル、下に 2 つのボタンを配置したボタン ボックスで構成された単純なダイアログを示します。

このダイアログをファイル /home/autodesk/createDialog.ui に保存してから Maya にロードし、以下の MEL コマンドを使用して表示するとします。

    string $dialog = `loadUI -uiFile "/home/autodesk/createDialog.ui"`;
    showWindow $dialog;

または Python の以下のコマンド

    import maya.cmds as cmds
    dialog = cmds.loadUI(uiFile='/home/autodesk/createDialog.ui')
    cmds.showWindow(dialog)

loadUI コマンドは、該当する Maya コマンドを実行することで、ファイルに指定したウィジェットを作成します。たとえば、前述の例にある 2 つのラベルは Maya の text コマンドを使用して作成します。comboBox コントロールは optionMenu コマンド、入力フィールドは textField コマンドで作成します。これで、作成したコントロールは通常の手順で作成したかのように MEL と Python のスクリプトで操作できます。

Qt Designer のウィジェットにダイナミック プロパティを追加することによって、コントロールの作成に使用したコマンドにフラグを渡すことができます。このプロパティの名前は -width の冒頭のハイフンなどを含め、フラグの名前に一致している必要があります。MEL ではなく Python を使用してコントロールを作成する場合は、冒頭のハイフンを + に置き換えて +width のようにします。同一のウィジェットに MEL と Python 両方のフラグを指定すると、動作が定義されないため、エラーとなります。フラグが引数を取る場合は、引数をプロパティの値として指定します。

以下の図に、Qt Designer の comboBox に -changeCommand プロパティを追加したところを示します。

対応する optionMenu コントロールを作成すると、-changeCommand フラグが設定されてコマンド文字列「newObjectType()」が実行されます。

loadUI コマンドで同等の Maya コントロールのない Qt ウィジェットを検出した場合でも、Qt ウィジェットが作成されますが、MEL または Python のスクリプトからアクセスすることはできません。この例として、ダイアログの下部にあるボタン ボックスを挙げます。ここでは、Maya に該当するコントロールがない QDialogButtonBox ウィジェットを使用しています。このため、ボタン ボックス自体もその中にあるボタンにもアクセスできません。ボタン ボックスを使用せずにダイアログに個別にボタンを配置した場合、loadUI コマンドは Maya の button コマンドを使用してボタンを作成しており、スクリプトへのアクセスが可能になっています。

ファイルのあらゆるレイアウトは汎用レイアウトとして作成され、Maya には layout コマンドを使用しなければアクセスできません。formLayout、columnLayout といった固有のレイアウト タイプ用のコマンドは使用しません。

Maya でコントロールまたはレイアウトに指定された名前は、Qt Designer の objectName プロパティに指定した名前です。 最上層のウィンドウの名前は一意である必要がありますが、指定した名前がすでに使用されている場合、loadUI コマンドで末尾に数字を追加して一意にします。