Russian Qt Forum

Qt => Qt Quick => Тема начата: Go0gle от Июль 09, 2012, 20:01



Название: Обработка сигнала из С++ в QML
Отправлено: Go0gle от Июль 09, 2012, 20:01
Здравствуйте, помогите пожалуйста разобраться с одним моментом.

---Test.h---
Код:
class TestClass : public QObject
{
    Q_OBJECT
public:
    explicit TestClass(QObject *parent = 0);

   
    Q_PROPERTY(QString firstName READ getFirstName WRITE setFirstName NOTIFY firstNameChanged)

signals:
    void firstNameChanged( const QString& name);
   

public slots:
    QString getFirstName()  const { return m_name; }
    int setFirstName(QString name);
    void changeName();

   
private:
    QString m_name;
    QPushButton* m_changeNameButton;
};

---Test.cpp---
Код:
TestClass::TestClass(QObject *parent) :
    QObject(parent)
{
    m_changeNameButton = new QPushButton("Change");
    connect(m_changeNameButton,SIGNAL(clicked()),this,SLOT(changeName()));
    m_changeNameButton->show();

    changeName();
}

int TestClass::setFirstName(QString name)
{
    m_name = name;
    emit firstNameChanged(m_name);
}

void TestClass::changeName()
{
    setFirstName("New Name");
}

--main.qml---
Код:
Rectangle {

    id: mainWindow
    width: 600
    height: 600
    color: "#343434"

    Test
    {
        onFirstNameChanged: {
            console.log("QML: Name changed!");
        }
    }

}


Вопрос в следующем....

Как видите в конструкторе я вызываю   changeName(); При этом я должен получить сообщение  из QML , но я его не получаю...
Но если я нажму на кнопку, то сообщение успешно выводиться на экран, хотя опять же с помощью кнопки я вызываю тот же метод changeName();

Подскажите , пожалуйста, в чем может быть проблема? 


Название: Re: Обработка сигнала из С++ в QML
Отправлено: Patrin Andrey от Июль 10, 2012, 08:56
До тех пор, пока конструктор полностью отработает, объект ещё не создан.