1. ホーム
  2. c++

[解決済み] カスタムパラメータを使用したQAction

2022-02-26 21:59:03

質問

動的に作成されたQActionがクリックされたときに、パラメータ付きのスロットを実行したいのですが、QMenuでQActionを作成するときに変数を追加することができず、また、デフォルトの triggered() スロットに渡すことができません。

もっとわかりやすく言うと、こんな感じのアーカイブを作りたいんです。

connect(someAction, SIGNAL( triggered(MyClass*) ), this, SLOT( execute(MyClass*) );

どうすればいいのでしょうか?私はカスタムQActionを作成しようとしましたが、QMenuにそれを追加する方法がわかりません。 addAction(QAction) .

解決方法は?

パラメータは、アクション自体に QVariant を使って QAction::setData() 関数を使用します。例えば

QVariant v = qVariantFromValue((void *) yourClassObjPointer);
action->setData(v);

スロットの中で、ポインターを次のように取り出す必要があります。

void execute()
{
    QAction *act = qobject_cast<QAction *>(sender());
    QVariant v = act->data();
    YourClass yourPointer = (YourClass *) v.value<void *>();
}