Prefer QMetaType over QVariant during a type information query.
authorJędrzej Nowacki <jedrzej.nowacki@nokia.com>
Mon, 21 May 2012 16:20:45 +0000 (18:20 +0200)
committerQt by Nokia <qt-info@nokia.com>
Thu, 24 May 2012 08:50:49 +0000 (10:50 +0200)
As a side effect the patch probably fix special case, when an interface
wants a variant and one of the parameters has to be converted. Before
QVariant::nameToType was returning only builtin types ids.

Change-Id: I473a9bcbd9249acf7c232492fa62c53de3ff5c71
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
src/qdbus/qdbus/qdbus.cpp
src/qdbus/qdbusviewer/propertydialog.cpp
src/qdbus/qdbusviewer/propertydialog.h
src/qdbus/qdbusviewer/qdbusviewer.cpp

index 198f08b..b5fc37a 100644 (file)
@@ -336,7 +336,7 @@ static int placeCall(const QString &service, const QString &path, const QString
                     // UChar because it can't decide if it's a character or a number
                     p = QVariant::fromValue<uchar>(p.toUInt());
                 } else if (id < int(QMetaType::User) && id != int(QVariant::Map)) {
-                    p.convert(QVariant::Type(id));
+                    p.convert(id);
                     if (p.type() == QVariant::Invalid) {
                         fprintf(stderr, "Could not convert '%s' to type '%s'.\n",
                                 qPrintable(argument), types.at(i).constData());
index 15c4e8f..0223de7 100644 (file)
@@ -73,7 +73,7 @@ void PropertyDialog::setInfo(const QString &caption)
     label->setText(caption);
 }
 
-void PropertyDialog::addProperty(const QString &aname, QVariant::Type type)
+void PropertyDialog::addProperty(const QString &aname, int type)
 {
     int rowCount = propertyTable->rowCount();
     propertyTable->setRowCount(rowCount + 1);
@@ -82,7 +82,7 @@ void PropertyDialog::addProperty(const QString &aname, QVariant::Type type)
     if (name.isEmpty())
         name = QLatin1String("argument ") + QString::number(rowCount + 1);
     name += QLatin1String(" (");
-    name += QLatin1String(QVariant::typeToName(type));
+    name += QLatin1String(QMetaType::typeName(type));
     name += QLatin1String(")");
     QTableWidgetItem *nameItem = new QTableWidgetItem(name);
     nameItem->setFlags(nameItem->flags() &
@@ -90,7 +90,7 @@ void PropertyDialog::addProperty(const QString &aname, QVariant::Type type)
     propertyTable->setItem(rowCount, 0, nameItem);
 
     QTableWidgetItem *valueItem = new QTableWidgetItem;
-    valueItem->setData(Qt::DisplayRole, QVariant(type));
+    valueItem->setData(Qt::DisplayRole, QVariant(type, /* copy */ 0));
     propertyTable->setItem(rowCount, 1, valueItem);
 }
 
index d2ca035..e08e5c7 100644 (file)
@@ -53,7 +53,7 @@ class PropertyDialog: public QDialog
 public:
     explicit PropertyDialog(QWidget *parent = 0, Qt::WindowFlags f = 0);
 
-    void addProperty(const QString &name, QVariant::Type type);
+    void addProperty(const QString &name, int type);
     void setInfo(const QString &caption);
 
     QList<QVariant> values() const;
index a80d4cf..b8a6d2b 100644 (file)
@@ -243,7 +243,7 @@ static QString getDbusSignature(const QMetaMethod& method)
     // create a D-Bus type signature from QMetaMethod's parameters
     QString sig;
     for (int i = 0; i < method.parameterTypes().count(); ++i) {
-        QVariant::Type type = QVariant::nameToType(method.parameterTypes().at(i));
+        int type = QMetaType::type(method.parameterTypes().at(i));
         sig.append(QString::fromLatin1(QDBusMetaType::typeToSignature(type)));
     }
     return sig;
@@ -280,9 +280,9 @@ void QDBusViewer::callMethod(const BusSignature &sig)
         if (paramType.endsWith('&'))
             continue; // ignore OUT parameters
 
-        QVariant::Type type = QVariant::nameToType(paramType);
+        int type = QMetaType::type(paramType);
         dialog.addProperty(QString::fromLatin1(paramNames.value(i)), type);
-        types.append(QMetaType::type(paramType));
+        types.append(type);
     }
 
     if (!types.isEmpty()) {