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

Aqu*_*irl -3 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)));
Run Code Online (Sandbox Code Playgroud)

这里m_standingAgvIDQString变量的对象,该变量也用在中Q_PROPERTY

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

考虑:

QString不发出信号。也许您应该告诉我们您想要达到的目标。– cmannett85

QString本身不是QObject,它无法连接信号和插槽。– Tay2510

我有一个简单的变量,让我们说int类型是类成员,并且我已经将其设为Q_PROPERTY

此变量将在中设置QML。当其值更改时,我想在中调用信号Qt

就这样。

cma*_*t85 5

使用关于ints 的示例,它将像这样完成:

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_;
};
Run Code Online (Sandbox Code Playgroud)

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

  • @TheIndependentAquarius您是否已阅读有关[** Signals&Slots?**]的文档(http://doc.qt.io/qt-5/signalsandslots.html)。这些示例可以帮助您阐明想法。 (2认同)