Контакты

Наибольший вклад в теги

Все теги (3)

Лучшие ответы пользователя

Все ответы (4)
  • Как сделать двунаправленный биндинг(связь) между Qt (C++) и QML?

    MaxQwerty
    @MaxQwerty
    C++, Qt, QML, QtQuick, Ruby, Linux
    Вам нужно использовать не
    engine.rootObjects().at(0)->setProperty("appCore", qVariantFromValue(appCore));
    а пробросить этот AppCore как новый компонент:
    //это должно быть до строки 
    //QQmlApplicationEngine engine;
    qmlRegisterType<AppCore>("com.myown.project", 1, 0, "AppCore");

    Потом в QML-файле объявляете
    import com.myown.project 1.0
    и можете использовать элемент AppCore как обычный. так как он прямой потомок от QObject, то он будет невидимым, подобно обычному QtObject. Но теперь вам доступно для биндинга его свойство AppCore:
    AppCore
    {
        id: appCoreId
        val1: 100500;
    }

    Теперь, нужно достать инстанс этого класса обратно в С++. Для этого можно использовать поиск по id:
    //создавать придётся именно так:
    QQmlEngine engine;
    QQmlComponent component(&engine, QUrl(QStringLiteral("qrc:/main.qml")));
    QObject *object = component.create();
    
    //получаем созданный на стороне  QML истанс класса AppCore
    AppCore* appCore = object->findChild<AppCore*>("appCoreId");


    Более подробно можно почитать тут:
    doc.qt.io/qt-5/qtqml-cppintegration-topic.html
    Ответ написан
  • Как обработать websocket в qml?

    MaxQwerty
    @MaxQwerty
    C++, Qt, QML, QtQuick, Ruby, Linux
    При срабатывании сигнала onClientConnected у вас есть объект webSocket - его-то и можно использовать для какого-нибудь ассоциативного контейнера, в котором будут хранится все соединённые сокеты-клиенты. Для инициализации такого контейнера лучше обработать сначала сигнал clientConnected.
    Ответ написан