gpt4 book ai didi

c++ - 级联和信号/槽

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:21 29 4
gpt4 key购买 nike

我正在为这事兜圈子。就是无法理解信号和插槽。

只是在寻找某种机制,当我的 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 对象(Button)使用新值调用了 onValueChanged 函数(因为发出 valueChanged(m_iValue)。

请告诉我我已经弄明白了??!?!

最佳答案

如果您使用 Q_PROPERTY 宏,则无需将 onValueChanged 信号与显式更改按钮文本的函数绑定(bind)。而且您不需要使用 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();

关于c++ - 级联和信号/槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14925067/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com