我有一个自定义结构,它的哪些实例与QAction实例相关联。我希望在执行操作时使用我的结构的相应实例执行一个插槽。
我设法使用QSignalMapper通过对QObject进行子类化来封装我的结构的实例来使其工作。但是,当它们到达插槽时,我的结构的所有值都不正确 - 它们似乎未初始化。
如果我发送一个原始类型(例如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;
}