我正在用Qt做一个项目,其中invoke方法在一个独立的线程上运行,并从主线程调用。如果我将QByteArray作为const传递,它将构建并运行。但是,如果我删除const,当我尝试运行它时,它会构建但终止,并抛出一个assert 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发布于 2012-02-28 19:02:02
基本上,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,它将在运行时抛出一个断言。
https://stackoverflow.com/questions/9339516
复制相似问题