【问题标题】:How to execute a function in Qt when a variable changes its value in the QML?当变量在 QML 中更改其值时,如何在 Qt 中执行函数?
【发布时间】:2015-02-04 09:12:07
【问题描述】:
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 中调用一个信号。

就是这样。

【问题讨论】:

  • QString 不发出信号。也许你应该告诉我们你想要达到的目标。
  • 你在哪里声明了f(int)?因为QString 肯定没有这样的成员(也没有信号/插槽)。
  • QString本身不是QObject,不能连接信号和槽。
  • @JBL "f(int) 和 d(int) 已在 cpp 代码的相应信号和插槽区域中定义和声明。"

标签: c++ qt signals signals-slots


【解决方案1】:

使用您关于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_;
};

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

【讨论】:

  • 那么,我应该在哪里用 c++ 编写代码,当该变量更改值时应该执行该代码?
  • 好吧,如果你执行的代码在foo里面,那么你可以把它放在setValue(int value)里面,否则就像连接任何其他类一样连接到valueChanged信号。
  • @TheIndependentAquarius 你读过关于Signals & Slots?的文件吗?这些例子可以帮助你理清思路。
猜你喜欢
  • 2014-05-29
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
相关资源
最近更新 更多