QActionインスタンスに関連付けられているインスタンスのカスタム構造体があります。アクションの実行時に、構造の対応するインスタンスでスロットを実行したいと思います。
QObjectをサブクラス化して構造体のインスタンスをカプセル化することにより、QSignalMapperを使用してこれを機能させることができました。ただし、スロットに到着したときの構造体の値はすべて正しくありません。初期化されていないようです。
構造体の代わりにintなどのプリミティブ型、またはQActionのようなものを送信すると、すべてが正常に機能します。
私がやろうとしていることをすることは可能ですか?もしそうなら、私は何が欠けていますか?
ありがとう、アラン
編集:コードサンプルを追加
以下は、QSignalMapperを配線する方法です。注:STRUCT_WRAPPERはQObjectから派生しています。
/* Connect signal mapper to selected slot */
connect(signalMapper, SIGNAL(mapped(QObject *)), this,
SLOT(on_selected(QObject *)));
/* For all structures */
for(x = 0; x < structureCount; x++)
{
/* Create action */
QAction * action = ui.menu->addAction("Name");
/* Get current structure */
MY_STRUCT myStruct = structList[x];
/* Create wrapper */
STRUCT_WRAPPER * structWrapper = new STRUCT_WRAPPER(this, myStruct);
/* Map struct to action */
signalMapper->setMapping(action, structWrapper);
}
そして、これが私が初期化されていない値を取得しているスロットです:
void on_selected(QObject * object)
{
/* Get structure wrapper */
STRUCT_WRAPPER * structWrapper = (STRUCT_WRAPPER *)object;
/* Get structure */
MY_STRUCT myStruct = structWrapper->GetStruct();
/* ID is always uninitialised */
int id = myStruct.ID;
}