【问题标题】:How do I react to a QML button click in C++如何对 C++ 中的 QML 按钮单击做出反应
【发布时间】:2012-10-22 21:55:09
【问题描述】:

我正在尝试通过挂钩到我的 QML 中按钮的 clicked() 插槽,从我的 C++ 代码启动不同的 QML 页面,但它不起作用。

    Button {
        objectName: btnLogin
        text: qsTr("Login")
        id: btnLogin
    }

还有 c++

QObject *newButton = root->findChild<QObject*>("btnLogin");
QObject::connect(newButton, SIGNAL(clicked()), this, SLOT(loginClick()));

我的 hpp 文件中的插槽:

 public slots:  
    void loginClick();

还有我点击的方法:

void GConnectBB::loginClick() {
    int i = 0;

    Button *newButton = root->findChild<Button*>("btnLogin");
    if (newButton)
        newButton->setProperty("text", "New button text");
}


QObject *newButton = root->findChild<QObject*>("btnLogin"); 

当我通过调试器检查时为空。我对 C++ 非常生疏,对 Qt 完全陌生,请温柔 :) 我做错了什么?

【问题讨论】:

  • 这不被认为是一种不好的做法(从 c++ 访问 UI 元素)吗?我一直在努力学习如何将我的 c++ 对象方法连接到 qml 对象信号...
  • @JoaoMilasch 是的。这只是一个例子。主要目标是让 C++ 代码对按钮单击做出反应。

标签: qt qml blackberry-10 blackberry-cascades


【解决方案1】:

您应该用引号将对象名称括起来:

Button {
    objectName: "btnLogin"
    ...
    ...
}

【讨论】:

  • 我猜这个错误是因为 id 属性没有引号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 2022-06-29
  • 1970-01-01
  • 2015-10-27
相关资源
最近更新 更多