当变量在QML中改变其值时,如何在Qt中执行函数?

时间:2015-02-04 09:12:07

标签: c++ qt signals signals-slots

error: no matching function for call to 'SimulationMode::connect(QString&, const char*, SimulationMode* const, const char*)'
QObject::connect (m_standingAgvID, SIGNAL (f(int)), this, SLOT (d(int)));

此处,m_standingAgvIDQString变量的对象,也在Q_PROPERTY中使用。

f(int)和d(int)已在cpp代码的相应信号和槽区域中定义和声明。

考虑:

  

QString不发出信号。也许你应该告诉我们你是什么   试图实现。 - cmannett85

  

QString本身不是QObject,它不能连接信号和插槽。    - Tay2510

我有一个简单的变量,我们说int类型是一个类成员,我把它变成了Q_PROPERTY

此变量将在QML中设置。当其值发生变化时,我想在Qt中调用一个信号。

这就是全部。

1 个答案:

答案 0 :(得分:4)

使用关于int的示例,可以这样做:

class foo : public QObject
{
    Q_OBJECT
    Q_PROPERTY( int value READ getValue WRITE setValue NOTIFY valueChanged )
public:
    explicit foo( QObject* parent = nullptr ) :
        QObject{ parent }, i_{ 0 } {}
    virtual ~foo() {}

    int getValue() const { return i_; }
public slots:
    void setValue( int value )
    {
        if ( value != i_ ) {
            i_ = value;
            emit valueChanged( i_ );
        }
    }
signals:
    void valueChanged( int value );
private:
    int i_;
};

简而言之,您必须手动发出有关成员的更改通知信号。