首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QMetaObject::invokeMethod不接受非常量参数

QMetaObject::invokeMethod不接受非常量参数
EN

Stack Overflow用户
提问于 2012-02-18 15:39:42
回答 1查看 6.7K关注 0票数 2

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

为什么它会被终止?

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-28 19:02:02

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

代码语言:javascript
复制
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宏。

代码语言:javascript
复制
QGenericArgument    Q_ARG ( Type, const Type & value )

它需要一个const参数。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9339516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档