Why Qt signal will not work after use class as pro

2019-06-08 03:58发布

I have a c++ class like below and i used this class after registering that in an qml page and that signals works well in qml page

class1.cpp

QString Class1::message(){
    return m_Message;
}
void Class1::setMessage(QString m){
    m_Message=m ;
    emit messageChanged();
}
void Class1::invokeEvent(){
    setMessage("The Second Message");
}
Class2* Class1::getClass2Obj(){
    class2obj.plusplusClickCount();
    return &class2obj;
}

class1.h

class Class1 : public QObject
{
    Q_OBJECT
    QString m_Message;
    Class2 class2obj;
public:
    explicit Class1(QObject *parent = nullptr);

    Q_PROPERTY(QString message READ message WRITE setMessage NOTIFY messageChanged)

    void setMessage(QString m);
    QString message();
    Q_INVOKABLE  void invokeEvent();
    Q_INVOKABLE Class2 *getClass2Obj();
signals:
    void messageChanged();
public slots:
};

I used this class in Page1.qml and signal work well and with getClass2Obj method i will return an object of Class2( that like Class1) and send it to Page2.qml as you see in below:

Page1.qml

Rectangle {
Class1{
    id:cl
    onMessageChanged: {
        txt.text=cl.message;
    }
}    
Button{
    onClicked: {
        cl.invokeEvent();//this will raise onMessageChanged and work well
    }
}
Button{
    onClicked: {
        mainWindow.stackView.push("/Page2.qml",{cl2:cl.getClass2Obj()})//here i send an object of class2 to page2.qml
    }
}
}

in the page2.qml now object of class2 has stord in cls2.and all are fine but just onMessageChanged not raisd.

Page2.qml

Rectangle {
property Class2 cl2: Class2{
    onMessageChanged: {
        console.log("On Message Changed Event From Class2")//will not work ! why?
        txt.text=message;//will not work ! why?
    }
}
Text {
    id: txt     
}
Button{
    onClicked: {
        cl2.invokeMessage("The Second Message From Page 2")
    }
}    
}

In page2.qml when i change the property Class2 cl2: Class2{} to Class2{} and get object with an alias property onMessageChanged will raise but i have another things in class2 object (like properties ans so on) that i need it.now i want to know how do this work well and why signal not work

0条回答
登录 后发表回答