2012-11-02 55 views
5

我試圖通過掛鉤到我的QML中按鈕的clicked()槽中來啓動與我的C++代碼不同的QML頁面,但它不起作用。如何對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也是全新的,請溫柔:)我會做什麼錯?

+0

是不是這被認爲是不好的做法(從C++訪問UI元素)?我一直在努力學習如何將我的C++對象方法連接到一個qml對象信號... –

+0

@JaoaoMilasch是的。這只是一個例子。主要目標是讓C++代碼響應按鈕點擊。 – Tjaart

回答

8

您應環繞對象名稱加上引號:

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

我想這個錯誤來自id屬性沒有引號的事實。 –