summaryrefslogtreecommitdiffstats
path: root/qt/examples/dbus.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt/examples/dbus.cpp')
-rw-r--r--qt/examples/dbus.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/qt/examples/dbus.cpp b/qt/examples/dbus.cpp
index e011381b..00172c62 100644
--- a/qt/examples/dbus.cpp
+++ b/qt/examples/dbus.cpp
@@ -213,11 +213,13 @@ void placeCall(const QString &service, const QString &path, const QString &inter
QVariantList params;
for (int i = 0; argc && i < types.count(); ++i) {
int id = QVariant::nameToType(types.at(i));
- if (id == QVariant::UserType || id == QVariant::Map) {
+ if ((id == QVariant::UserType || id == QVariant::Map) && types.at(i) != "QVariant") {
fprintf(stderr, "Sorry, can't pass arg of type %s yet\n",
types.at(i).constData());
exit(1);
}
+ if (id == QVariant::UserType)
+ id = QMetaType::type(types.at(i));
Q_ASSERT(id);
@@ -227,7 +229,13 @@ void placeCall(const QString &service, const QString &path, const QString &inter
else
p = QString::fromLocal8Bit(argv[0]);
- p.convert( QVariant::Type(id) );
+ if (id < QVariant::UserType)
+ // avoid calling it for QVariant
+ p.convert( QVariant::Type(id) );
+ else if (types.at(i) == "QVariant") {
+ QVariant tmp(id, p.constData());
+ p = tmp;
+ }
params += p;
--argc;
++argv;