Size: a a a

2021 July 08

AS

Anatoly Shirokov in Qt
концепция
источник

EC

Evgeniy Chernyshov in Qt
string_view хорошо зашёл :)
источник

MG

Maksim Galkin in Qt
Всем привет.
Помогите разобраться со слотами в qml.
Есть main.qml и EditCellParam.qml. В EditCellParam.qml есть кнопка
   Button {
       id: button
       x: 100
       y: 144
       text: qsTr("SET")
       font.pixelSize: 20
       objectName: "setCellParamButton"
       signal setCellParameters(string str)

       onClicked:{
           console.log("setCellParameters onClicked")
           setCellParameters("param")
       }
   }
Пытаюсь передать сигнал от кнопки в объект C++.
QObject* pdmButSetCellParam = item->findChild<QObject* >("setCellParamButton");
if(pdmButSetCellParam )
 {
   QObject::connect(pdmButSetCellParam,
            SIGNAL(setCellParameters(QString)),
            &leafSPY,
            SLOT(slotSetCellParameters(QString)));
 }
Проходит без ошибок. Т.е. setCellParamButton находится, и connect проходит. Но при нажатии на кнопку, не отсылается сигнал в код С++
источник

AS

Anatoly Shirokov in Qt
все обработчики сигналов в qml имеют префикс on
источник

AS

Anatoly Shirokov in Qt
видимо, тебе требуется писать  SIGNAL(onSetCellParameters(QString))
источник

AS

Anatoly Shirokov in Qt
но идея что-то связывать на стороне C++ с QML такая себе
источник

AS

Anatoly Shirokov in Qt
лучше прокидывать C++ в QML и там наслаждаться байдингом и реактивностью
источник

MG

Maksim Galkin in Qt
Переименовал в onSetCellParameters, но все равно не работает.
onClicked:{
           console.log("setCellParameters onClicked")
           onSetCellParameters("param")
       }
я вижу что вызывается код qml, а до C++ не доходит
источник

MG

Maksim Galkin in Qt
а можно поподробней
источник

MG

Maksim Galkin in Qt
Все нашел, пошел читать
источник

AS

Anatoly Shirokov in Qt
источник

MG

Maksim Galkin in Qt
спасибо
источник

AS

Anatoly Shirokov in Qt
создаете полноценный класс C++ со свойствами, сигналами, Q_INVOKABLE методами, регистрируете его и инстанцируете на стороне QML и имеете все преимущества реактивности QML
источник

MG

Maksim Galkin in Qt
Ну так и было сделано. Но потом я захотел создать свой компонент  EditCellParam.qml. А как сообщить этому компоненту о объекте leafSPY, пока не понял
источник

MG

Maksim Galkin in Qt
Т.е. в этом компоненте есть кнопка, которая должна отправить сигнал объекту
источник

AS

Anatoly Shirokov in Qt
а вот ты пишешь объект leafSPY - это что
источник

AS

Anatoly Shirokov in Qt
как он создан?
источник

MG

Maksim Galkin in Qt
в main.cpp
QQmlContext *context = engine.rootContext();
   context->setContextProperty("leafSPY", &leafSPY);
в main.qml
Connections{
       target: leafSPY
}
источник

MG

Maksim Galkin in Qt
Его нужно как-то добавить в EditCellParam.qml?
источник

MG

Maksim Galkin in Qt
Если кнопочка создана в main.qml, то все работает на примере другого сигнала
Button {
           id: buttonConnect
           x: 22
           y: 8
           text: qsTr("Connect")
           onClicked: {
               leafSPY.connect()
               console.log("LeafSPY.connect()")

           }
       }
источник