2012-01-29 9 views
1

私は、アプリケーションのQML部分を持っています。currentProfileChanged関数は、私にQVaraintに変換するQSystemDeviceInfo::Profileという信号を与えています。 QMLは0から7までの番号として、プロファイルを理解することができますが、この機能:QObject QSystemDeviceInfo :: ProfileをQVariantに接続します

QObject::connect(deviceInfo, 
    SIGNAL(currentProfileChanged(QSystemDeviceInfo::Profile)), 
    rootObject, 
    SLOT(changePower(QVariant(QSystemDeviceInfo::Profile)))); 

は、この奇妙なエラーを与える:

[Qt Message] Object::connect: No such slot 
    QDeclarativeItem_QML_3::changePower(QVariant(QSystemDeviceInfo::Profile)) 
    in C:/Users/Gerhard/QTProjects/Raker/main.cpp:142 

私はここで間違って何をしているのですか?

私はこれをしようとした場合:

QObject::connect(deviceInfo, 
    SIGNAL(currentProfileChanged(QSystemDeviceInfo::Profile)), 
    rootObject, 
    SLOT(changePower(QVariant(QSystemDeviceInfo::Profile)))); 

それはこのことを言う:

[Qt Message] Object::connect: No such slot 
    QDeclarativeItem_QML_3::changePower(QSystemDeviceInfo::Profile) 
    in C:/Users/Gerhard/QTProjects/Raker/main.cpp:142 

私はちょうどそれがまた、互換性のない引数文句QVariantにいずれかまたは両方を変更した場合。

答えて

0

として指定する必要があります。もっと簡単な方法があるように見えるので、タイプを変換してシグナルスロットを追加する必要がありましたが、

#include <QObject> 
#include <QVariant> 
#include <QSystemDeviceInfo> 
#include <QDebug> 

using namespace QtMobility; 


class changeVAriant : public QObject 
{ 
    Q_OBJECT 

public slots: 
    void toVariant(QSystemDeviceInfo::Profile prof) 
    { 
     emit newVariant(QVariant(prof)); 
    } 
signals: 
    void newVariant(QVariant); 
}; 
0

スロット機能には、信号のパラメータと一致しないパラメータを設定することはできません。あなたのスロットは、..SLOT(changePower(QSystemDeviceInfo::Profile))..

+0

おかげで、私はそれを試してみましたが、それは鶏が文句:/ /ユーザ/ゲルハルト/ QTProjects:[Qtのメッセージ]オブジェクト::接続:いいえ、そのようなスロットQDeclarativeItem_QML_3 :: changePower(QSystemDeviceInfo ::プロフィール)CでのRender/main.cpp:142 – Gerharddc

+0

Arnold Spenceが提案したように、 'changePower(QVariant(QSystemDeviceInfo :: Profile))'から 'changePower(QSystemDeviceInfo :: Profile)'にスロット宣言を変更すると、 – Neox

+0

になりますqmlの宣言は次のようになります:function changePower(power)。このように見える他のすべてのものはQVAriantを取ってから動作します。 – Gerharddc

関連する問題