【问题标题】:error C2976: 'QMap' : too few template arguments in QMetaObject::invokeMethod错误 C2976:“QMap”:QMetaObject::invokeMethod 中的模板参数太少
【发布时间】:2012-10-27 07:11:39
【问题描述】:

我尝试从对象调用 QMetaObject::invokeMethod 到调用者对象 我有这个对象:

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

但我收到此错误:

error C2976: 'QMap' : too few template arguments

为什么它定义明确的类型

【问题讨论】:

    标签: qt signals-slots


    【解决方案1】:

    问题在于 C++ 预处理器不知道模板,而Q_ARG 是一个宏。

    当预处理器看到时:

    Q_MAP(foo<bar,baz>,blop)
    

    它被解释为三个不同的参数(引号使其更明显):

    Q_MAP( "foo<bar" , "baz>" , "blop" )
    

    由此产生的扩展没有意义。

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

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

    【讨论】:

      猜你喜欢
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      相关资源
      最近更新 更多