LINUX.ORG.RU

История изменений

Исправление sjinks, (текущая версия) :

Это извращение :-)

У меня готового решения нет, но я бы попробовал сделать так:

const QMetaObject* meta = object->metaObject();
for (int i=meta->methodOffset(); i<meta->methodCount(); ++i) {
    QString signature = QString::fromLatin1(meta->method(i).signature());

/*
signature будет вида method(double,int)
Извлекаем метод, проверяем его на сопадение с переданным именем слота.
Если совпадают, проверяем количество аргументов (meta->method(i).parameterTypes().size()).
Если количество вариантов совпало, то создаём требуемое количество QGenericArgument:

*/
QGenericArgument args[10];
for (int j=0; j<meta->method(i).parameterTypes().size(); ++j) {
    args[j] = QGenericArgument(meta->method(i).parameterTypes().at(j), &(j-й параметр - я не знаю, как они передаются твоей функции));
    args.append(arg);
}

QMetaObject::invoke(object, method, Qt::QueuedConnection, args[0], args[1], ..., args[9]);
break;
}

Как-то так.

Исправление sjinks, :

Это извращение :-)

У меня готового решения нет, но я бы попробовал сделать так:

const QMetaObject* meta = object->metaObject();
for (int i=meta->methodOffset(); i<meta->methodCount(); ++i) {
    QString signature = QString::fromLatin1(meta->method(i).signature());

/*
signature будет вида method(double,int)
Извлекаем метод, проверяем его на сопадение с переданным именем слота.
Если совпадают, проверяем количество аргументов (meta->method(i).parameterTypes().size()).
Если количество вариантов совпало, то создаём требуемое количество QGenericArgument:

*/
QGenericArgument args[10];
int n = 0;
for (int j=0; j<meta->method(i).parameterTypes().size(); ++j, ++n) {
    args[n] = QGenericArgument(meta->method(i).parameterTypes().at(j), &(j-й параметр - я не знаю, как они передаются твоей функции));
    args.append(arg);
}

QMetaObject::invoke(object, method, Qt::QueuedConnection, args[0], args[1], ..., args[9]);
break;
}

Как-то так.

Исходная версия sjinks, :

Это извращение :-)

У меня готового решения нет, но я бы попробовал сделать так:

const QMetaObject* meta = object->metaObject();
for (int i=meta->methodOffset(); i<meta->methodCount(); ++i) {
    QString signature = QString::fromLatin1(meta->method(i).signature());

/*
signature будет вида method(double,int)
Извлекаем метод, проверяем его на сопадение с переданным именем слота.
Если совпадают, проверяем количество аргументов (meta->method(i).parameterTypes().size()).
Если количество вариантов совпало, то создаём требуемое количество QGenericArgument:

*/
QGenericArgument args[10];
int n = 0;
for (int j=0; j<meta->method(i).parameterTypes().size(); ++j, ++n) {
    args[n] = QGenericArgument(meta->method(i).parameterTypes().at(j), &(j-й параметр - я не знаю, как они передаются твоей функции));
    args.append(arg);
}

QMetaObject::invoke(object, method, Qt::QueuedConnection, args[0], args[1], ..., args[9]);

}

Как-то так.