Как мне реагировать на нажатие кнопки QML в С++

Я пытаюсь запустить другую страницу QML из своего кода C++, подключившись к слоту clicked() кнопки в моем QML, но это не работает.

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

И С++

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, пожалуйста, будьте осторожны :) Что я могу делать неправильно?


person Tjaart    schedule 02.11.2012    source источник
comment
Разве это не считается плохой практикой (доступ к элементам пользовательского интерфейса из С++)? Я пытался сам узнать, как подключить мой объектный метод С++ к объектному сигналу qml...   -  person johnildergleidisson    schedule 04.06.2013
comment
@JoaoMilasch да, это так. Это был просто пример. Основная цель состояла в том, чтобы код C++ реагировал на нажатие кнопки.   -  person Tjaart    schedule 04.06.2013


Ответы (1)


Вы должны заключить имя объекта в кавычки:

Button {
    objectName: "btnLogin"
    ...
    ...
}
person Nishant Shah    schedule 02.11.2012
comment
Я предполагаю, что эта ошибка связана с тем, что свойство id не имеет кавычек. - person Dielson Sales; 20.01.2013