Qt 错误C2976:&x27;QMap';:QMetaObject::invokeMethod中的模板参数太少

Qt 错误C2976:&x27;QMap';:QMetaObject::invokeMethod中的模板参数太少,qt,signals-slots,Qt,Signals Slots,我尝试从对象调用QMetaObject::invokeMethod到调用方对象 我从对象中得到了以下信息: bool bReturnInvokeMethod = false; bool bInvokeMethod1= QMetaObject::invokeMethod(m_pCollector, "setStack", Qt::BlockingQueuedConnection,

我尝试从对象调用QMetaObject::invokeMethod到调用方对象 我从对象中得到了以下信息:

bool bReturnInvokeMethod = false;
bool bInvokeMethod1= QMetaObject::invokeMethod(m_pCollector,
                            "setStack",
                            Qt::BlockingQueuedConnection,
                            Q_ARG(QMap<QString,QVector<std::string > >, linksQTResultMap));

<>为什么定义良好的类型

< p>问题是C++预处理器不知道模板,而<代码> qyARG是宏。< /P> 当预处理器看到:

Q_MAP(foo<bar,baz>,blop)
Q_图(foo,blop)
它被解释为三个不同的参数(引用以使其更可见):

Q_图(“foo”、“blop”)
由此产生的扩张毫无意义

通常可以解决这一问题的方法是使用typedef:

typedef QMap<QString,QVector<std::string> > MyStringVectorMap;
...
Q_MAP(MyStringVectorMap, linksQTResultMap)
...
typedef QMap MyStringVectorMap;
...
Q_映射(MyStringVectorMap、linksQTResultMap)
...

<>代码> 问题是C++预处理器不知道模板,而<代码> qyARG是宏。< /P> 当预处理器看到:

Q_MAP(foo<bar,baz>,blop)
Q_图(foo,blop)
它被解释为三个不同的参数(引用以使其更可见):

Q_图(“foo”、“blop”)
由此产生的扩张毫无意义

通常可以解决这一问题的方法是使用typedef:

typedef QMap<QString,QVector<std::string> > MyStringVectorMap;
...
Q_MAP(MyStringVectorMap, linksQTResultMap)
...
typedef QMap MyStringVectorMap;
...
Q_映射(MyStringVectorMap、linksQTResultMap)
...