История изменений
Исправление 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]);
}
Как-то так.