如何在cpp文件中阻止qml中的按钮?

Posted

技术标签:

【中文标题】如何在cpp文件中阻止qml中的按钮?【英文标题】:How to block a button in qml in a cpp file? 【发布时间】:2020-06-22 15:28:33 【问题描述】:

当调用 cpp 中的函数时,我想阻止 qml 文件中的按钮。

我该怎么做?

【问题讨论】:

阻止是指禁用它,对吗? 是的,我不能再点击这个按钮了。 好的,然后将属性 enable.... 设置为 false... 以我的回答作为指导... 你可以考虑在你的qml中添加一个State,并禁用匹配特定状态的按钮。然后在你的 cpp 中就足以改变对象的状态。这应该是一种最简洁的方法,而不是从逻辑控制 gui 【参考方案1】:

你有一个按钮,假设你正在使用 qml 和 c++,你可以在它们之间进行交互,就像在 de doc 中解释的那样

then you can invoke the `setProperty` method 

// Using QQmlComponent
QQmlEngine engine;
QQmlComponent component(&engine,
        QUrl::fromLocalFile("MyItem.qml"));
QObject *object = component.create();
object->setProperty("width", 500);
...
delete object;

【讨论】:

如何在不更改主对象或创建新对象的情况下做到这一点?【参考方案2】:

在您的 c++ 函数中,您可以发出类信号,这在 QML 中也应该可见:

void yourFunction() 
    emit yourClassInstance.nameOfSignal;

您可以在 QML 中注册您的课程:

engine->rootContext()->setContextProperty(, );

之后,您可以使用 Connection 将信号从您的 c++ 类连接到 js 函数,如下所示:

Connection 
   target: <Name of your class in qml>

   onNameOfSignal: 
       // Disable button here
   

【讨论】:

以上是关于如何在cpp文件中阻止qml中的按钮?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 QML 中注册 QSerialPort?

如何创建一个每次单击按钮时向上移动形状的 x 值的按钮?

如何阻止 QML 项目被淘汰或其父项的边界

如何将对话框锚定到listview qt qml中的按钮

如何在QML中使用按钮,GroupBox,文本和ProgressBar设置基本的GridLayout

如何从 QT 项目中正确删除 QML 文件