我正在用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
答案 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,它将在运行时抛出一个断言。