QMetaObject :: invokeMethod不接受非const参数

时间:2012-02-18 07:39:42

标签: c++ qt

我正在用Qt做一个项目,其中invoke方法在一个单独的线程上运行并从主线程调用。 如果我传递QByteArray为const,则构建并运行。 但是,如果我删除它构建的const但在我尝试运行时终止, 并抛出一个断言Q_ASSERT(b)

为什么会被终止?

我必须将一些数据附加到QByteArray

const bool b = QMetaObject::invokeMethod(m_thread, "calculateSpectrum",
                              Qt::AutoConnection,
                              Q_ARG(QByteArray, buffer),
                              Q_ARG(int, format.frequency()),
                              Q_ARG(int, bytesPerSample),
                              Q_ARG(qint64, dataLength));
    Q_ASSERT(b);
    Q_UNUSED(b) // suppress warnings in release builds

1 个答案:

答案 0 :(得分:4)

基本上QMetaobject :: invokemethod的签名是......

bool    invokeMethod ( QObject * obj, const char * member, Qt::ConnectionType type, QGenericReturnArgument ret, QGenericArgument val0 = QGenericArgument( 0 ), QGenericArgument val1 = QGenericArgument(), QGenericArgument val2 = QGenericArgument(), QGenericArgument val3 = QGenericArgument(), QGenericArgument val4 = QGenericArgument(), QGenericArgument val5 = QGenericArgument(), QGenericArgument val6 = QGenericArgument(), QGenericArgument val7 = QGenericArgument(), QGenericArgument val8 = QGenericArgument(), QGenericArgument val9 = QGenericArgument() );

现在我们正在使用Q_ARG宏,其语法是..

QGenericArgument    Q_ARG ( Type, const Type & value )

需要const参数。

现在当你删除这个const参数时,条件变为false,它将在运行时抛出一个断言。