gpt4 book ai didi

c++ - QMetaObject::invokeMethod 不接受非常量参数

转载 作者:搜寻专家 更新时间:2023-10-31 01:16:08 32 4
gpt4 key购买 nike

我正在用 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

最佳答案

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 参数时,条件变为假,它会在运行时抛出一个断言。

关于c++ - QMetaObject::invokeMethod 不接受非常量参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9339516/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com