小编Axe*_*yan的帖子

如何通过QWebChannel发送自定义数据

我在通过Qt的网络频道发送自定义类作为信号的参数时遇到问题。

对于编译和运行时,控制台中没有任何错误,甚至没有警告。即使这样,我的JavaScript信号处理程序中的参数也为null。它可以与QString,int和其他对象完美配合,但不能与我的对象配合使用。

我看到了这篇文章:如何注册一个类,以在Qt的QWebChannel信号中使用它。起初问题似乎很相似,但是他们的解决方案对我不起作用。我有一个公共默认构造函数,一个公共副本构造函数和一个公共析构函数。我同时使用了qRegisterMetaType()和Q_DECLARE_METATYPE,还是一无所有。

通过打印qwebchannel.js收到的消息,我意识到C ++发送空值。这意味着它不知道如何发送我的课程。

是否有人知道可能发生的事情或如何解决?(即使你不知道也要提出)

提前致谢!

编辑:经过研究,我意识到问题来自QWebChannel(singalhandler_p.h)中的这一行:

template<class Receiver>
void SignalHandler<Receiver>::dispatch(const QObject *object, const int signalIdx, void **argumentData)
{
    Q_ASSERT(m_signalArgumentTypes.contains(object->metaObject()));
    const QHash<int, QVector<int> > &objectSignalArgumentTypes = m_signalArgumentTypes.value(object->metaObject());
    QHash<int, QVector<int> >::const_iterator signalIt = objectSignalArgumentTypes.constFind(signalIdx);
    if (signalIt == objectSignalArgumentTypes.constEnd()) {
        // not connected to this signal, skip
        return;
    }
    const QVector<int> &argumentTypes = *signalIt;
    QVariantList arguments;
    arguments.reserve(argumentTypes.count());
    // TODO: basic overload resolution based on number of arguments?
    for (int i = 0; i < argumentTypes.count(); ++i) {
        const QMetaType::Type …
Run Code Online (Sandbox Code Playgroud)

c++ qt

5
推荐指数
0
解决办法
632
查看次数

标签 统计

c++ ×1

qt ×1