【问题标题】:cascades and signals / slots级联和信号/插槽
【发布时间】:2013-02-02 05:17:30
【问题描述】:

我在这个问题上绕圈子。就是无法理解信号和插槽。

只是寻找一些机制,当我的 C++ 中出现信号时,可以自动更新我的 UI。

例子:

我在 Qml 中有两个带有文本的标签:_app.method 返回一个值。

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

我想要的是更新文本:一旦这些值发生变化就分配。

我只需要清楚地解释这些信号/插槽。文档中唯一的示例似乎只假设 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 发生了变化,并且发生了一个发射,它告诉正在监听 valueChanged 的​​人有一个新值。

嘿,我的 QML 正在听那个! (通过 _app.valueChanged.connect 脚本)。因此,正在监听的 QML 对象(按钮)调用了 onValueChanged 函数,并带有新值(因为发出 valueChanged(m_iValue)。

请告诉我我已经想通了??!?!

【问题讨论】:

    标签: c++ signals qml blackberry-cascades slots


    【解决方案1】:

    如果您使用 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:

    发出 valueChanged();

    【讨论】:

    • 哇...这要归功于 SIGNAL/SLOT 魔法。是否有任何特殊的关键字可以使这项工作发挥作用?
    猜你喜欢
    • 1970-01-01
    • 2012-07-13
    • 2015-05-20
    • 1970-01-01
    • 2019-04-20
    • 2013-11-13
    • 2012-10-15
    • 2015-07-18
    • 2013-09-27
    相关资源
    最近更新 更多