Qt および Maya のコントロールにアクセスする

Qt を使用して直接作成したコントロールは、通常、Maya の UI コマンドで認識されません。

これらのコントロールは isUI コマンドでリストされないため、button などの特定タイプのコントロールのコマンドでは認識されません。作成されたコントロールを認識するのは、button などのコマンドのみです。

ただし、Qt コントロールに一意の名前を付けるために setObjectName() を使用した場合は、control コマンドを使用してコントロールの有無をテストし、コントロールに基本的な操作を実行できます。

たとえば、ボタンに一意の名前を割り当てる場合は、次のようにします。

   button = new MyAction("Perform Action");
   button->setObjectName("myActionButton");

次に、control コマンドを使用してボタンを非表示にします。

if (`control -q -exists myActionButton`) {
   control -e -visible false myActionButton;
}

Qt を使用すると、Maya コマンドによって作成された UI 要素にアクセスできます。

MQtUtil C++ クラスには、Maya のコントロール、レイアウト、ウィンドウ、メニュー項目の基本となる Qt オブジェクトを取得するメソッドが用意されています。

たとえば、checkBox コマンドを使用して myCheckBox という名前の Maya checkBox コントロールを作成した場合、MQtUtil::findControl() クラスを使用して checkBox の QWidget ポインタを取得し、適切にキャストすることができます。

QWidget* control = MQtUtil::findControl("myCheckBox");
if (control) {
   QCheckBox* cb = qobject_cast<QCheckBox*>(control);
}

重要: コントロールのタイプがキャスト先のタイプと一致しない場合、キャスト操作を行うと nullptr が返されます。

QWidget ポインタを使用して QCheckBox のいずれかのプロパティにアクセスするか、QCheckBox で任意のメソッドを呼び出すことができます。

if (cb) {
    if (cb->isChecked()) {
        MGlobal::displayInfo("myCheckBox is checked");
      } else {
          MGlobal::displayInfo("myCheckBox is not checked");
      }
   }