QObject将QSystemDeviceInfo :: Profile连接到QVariant

时间:2012-01-29 04:33:45

标签: c++ qt profile qml signals-slots

我的应用程序的QML部分需要知道我所处的状态。currentProfileChanged函数有一个信号给我QSystemDeviceInfo::Profile我要转换为{{1}因此,QML可以将配置文件理解为0到7之间的数字,但是这个函数:

QVaraint

给出了这个奇怪的错误:

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))));

如果我将任何一个或两个更改为仅QVariant,它也会抱怨不兼容的参数。

2 个答案:

答案 0 :(得分:0)

插槽功能不能具有与信号中的参数不匹配的参数。您的广告位应指定为..SLOT(changePower(QSystemDeviceInfo::Profile))..

答案 1 :(得分: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);
};