2016-12-23 9 views
0

У меня есть компонент в C++ со свойством «шаг»:C++ объект не получает значение при подключении QML свойство изменяется

class cppcomponent : public QObject 
... 
Q_PROPERTY(QVariant step READ getStep WRITE setStep NOTIFY stepChanged) 

Я пытаюсь соединить это свойство QML.

TextInput { 
    text: cppcomp.step 
} 

Он работает в одном направлении. Начальное значение получает QML. Однако, когда я изменяю значение в QML, мой метод setStep не вызывается.

Он работает только, когда я устанавливаю свойство компонента C++ явно в onAccepted:

TextInput { 
    text: cppcomp.step 
    onAccepted: { 
     cppcomp.step = step.text 
    } 
} 

ли я на самом деле должны установить его в явном виде?

+0

Как вы изменяете стоимость в QML? Возможно, вы перепутали привязку? В качестве альтернативы, если у вас есть только простые геттеры и сеттеры, вы можете заменить свои «READ» и «WRITE» на «MEMBER». – DuKes0mE

+0

ЧЛЕН? никогда не слышал об этом. Я проверю. Я изменяю значение, просто вводя его в TextInput –

+0

А я вижу. Да, таким образом вы сбросите значение 'text' в свой TextInput и замените его новым значением, но вы не измените' step' – DuKes0mE

ответ

1

Ваш код должен работать хорошо, за исключением того, что step не может быть определен. Если вы хотите добраться до TextInput, просто опустите его id. Для того, чтобы подтвердить, что ваша идея работает правильно, запустите этот код:

QtObject { //A bare QObject with one property 
     id:cppcomp 
     property string step: "Working" 
    } 

    TextInput { 
     text: cppcomp.step+"!" 
     onAccepted: cppcomp.step = text 
    } 

Каждый раз, когда вы нажимаете ввести когда TextInput сфокусирована новый ! должен появиться.

(Протестировано с Qt 5.7)

+0

Не совсем ответ, но неявно я прочитал «да, вы должны реализовать onAccepted». P.S .: классный трюк с QtObject и отсутствием id –