c – 级联和信号/插槽

前端之家收集整理的这篇文章主要介绍了c – 级联和信号/插槽前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
关于这一点我正在圈子里跑来跑去.只是无法绕过信号和插槽.

只是寻找一些机制,可以在我的C中发出信号时自动更新我的UI.

例:

我在Qml中有两个带有text:_app.method的标签,它返回一个值.

我有一个按钮,onClicked运行Q_INVOKABLE方法.该方法在完成时发出信号,例如,获取地理坐标并更新上述文本:赋值所依赖的值.

我想要的是SOMETHING更新文本:一旦这些值改变就分配.

我只需要清楚地解释这些信号/插槽.文档中的唯一示例似乎只假设QML或C,而不是两者的混合.示例代码包含示例,但未在文档中具体说明.

如果你有简单的描述,我相信我可以适应它.例如,1:在QML中定义,2:在hpp文件中定义,3:在cpp文件中定义这些.

我尝试过使用QObject的setPropery(“text”,“value”),但尝试此操作时我的应用程序崩溃了.

告诉我,如果我错了……

1)在QML中:

Button { 
    id: aButton 
    text: _app.value 
    onClicked: {
        _app.valueChanged.connect(aButton.onValueChanged); 
        _app.value = _app.value + 1;
    } 
    function onValueChanged (val) {
        aButton.text = "New value: " + val;
    }
}

2)在HPP中:

Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged)
public:
    int value();
    void setValue(int i);
signals:
    void valueChanged(int);
private:
    int m_iValue;

3)在CPP中:

int class::value()
{
    return m_iValue;
}

void class::setValue(int i)
{
// name is same as HPP WRITE Q_PROPERTY statement
    m_iValue = i;
    emit valueChanged(m_iValue);
}

那么,会发生的是,在QML中,onClick方法使用QML函数连接信号;这意味着,现在我们正在监听值的变化,当它发生变化时,将调用函数.然后,我们更改值…因为Q_PROPERTY将写入值设置为名为setValue的函数,所以使用新值调用setValue;在内部,m_iValue被更改,并且发生了一个emit,它告诉正在监听valueChanged的人是否有新值.

嘿,我的QML正在听! (通过_app.valueChanged.connect脚本).因此,正在监听它的QML对象(Button)使用新值调用onValueChanged函数(因为发出valueChanged(m_iValue)).

请告诉我,我已经想到了这个??!?!

解决方法

如果您使用的是Q_PROPERTY宏,则无需使用明确的函数绑定onValueChanged信号来更改按钮的文本.而且你也不需要用m_iValue发出valueChanged信号.在相应文件中进行下面提到的更改

QML:

Button {
    horizontalAlignment: HorizontalAlignment.Center
    verticalAlignment: VerticalAlignment.Center
    id: aButton
    text: _app.value
    onClicked: {
        _app.value = _app.value + 1
    }
}

HPP:

signals:
    void valueChanged();

CPP:

emit valueChanged();

原文链接:https://www.f2er.com/c/110297.html

猜你在找的C&C++相关文章