void DBusOperationQueueHandler::Operation::copy(const char *name,
        const QList<QGenericArgument *> &args)
{
    Q_ASSERT(name != NULL);

    m_name = new char[qstrlen(name) + 1];
    qstrcpy(m_name, name);

    QListIterator<QGenericArgument *> it(args);
    while (it.hasNext()) {
        QGenericArgument *arg = it.next();
        int type = QMetaType::type(arg->name());
        if (!QMetaType::isRegistered(type)) {
            qCritical()
                    << Q_FUNC_INFO
                    << QString(QLatin1String("Type %1 not registered."))
                    .arg(QLatin1String(arg->name()));
        } else {
            Q_ASSERT(arg->name() != NULL);

            char *localName = new char[qstrlen(arg->name()) + 1];
            qstrcpy(localName, arg->name());
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0)
            void *localData = QMetaType::construct(type, arg->data());
#else
            void *localData = QMetaType::create(type, arg->data());
#endif

            m_args << (new QGenericArgument(localName, localData));
        }
    }
}
Beispiel #2
0
void BasicHandler::handle(const QString &member, QGenericArgument val0,
    QGenericArgument val1, QGenericArgument val2,
    QGenericArgument val3, QGenericArgument val4,
    QGenericArgument val5, QGenericArgument val6,
    QGenericArgument val7, QGenericArgument val8)
{
    // Now we try to find a handler for this message. BTW, I do love the Trolltech guys ;-)
    // and now we even have a fast lookup! Thanks thiago!

    QString handler = member.toLower();
    handler[0] = handler[0].toUpper();

    if (!handlerHash().contains(handler)) {
        if (_defaultHandler == -1) {
            qWarning() << QString("No such Handler: %1::%2%3").arg(metaObject()->className(), _methodPrefix, handler);
            return;
        }
        else {
            void *param[] = { 0, Q_ARG(QString, member).data(), val0.data(), val1.data(), val2.data(), val3.data(), val4.data(),
                              val5.data(), val6.data(), val7.data(), val8.data(), val8.data() };
            qt_metacall(QMetaObject::InvokeMetaMethod, _defaultHandler, param);
            return;
        }
    }

    void *param[] = { 0, val0.data(), val1.data(), val2.data(), val3.data(), val4.data(),
                      val5.data(), val6.data(), val7.data(), val8.data(), val8.data(), 0 };
    qt_metacall(QMetaObject::InvokeMetaMethod, handlerHash()[handler], param);
}