Qt Remote Objects

менее 1 мин на чтение

В составе Qt есть прекрасная библиотека Qt Remote Objects (QtRO). Если вы уже используете этот фреймворк и вам понадобилась распределенная система или RPC, то стоит обратить внимание на нее. Документация по ней на мой взгляд несколько скуднее, чем на остальные части Qt, но наличие большого количества примеров позволяет быстро въехать что к чему.

Преимущества:

  • кодогенерация - бойлерплейт генерируется за вас, за пару минут можно получить рабочую систему;
  • работа с сетью - большой объем работы для подобных приложений обычно занимает обработка ошибок сетевого уровня, с QtRO мы об этом вообще не думаем;
  • код замаскирован под обычное для Qt взаимодействие через сигналы-слоты;
  • интеграция с экосистемой Qt. Это одновременно и очевидно и поразительно удобно.

В примерах к этой библиотеке есть код для клиента, который отображает древовидную модель (qt/examples/remoteobjects/modelviewclient) и сервера (qt/examples/remoteobjects/modelviewserver).

Код клиента настолько короткий, что вызвал у меня искреннее восхищение и восторг!

    QRemoteObjectNode node(QUrl(QStringLiteral("local:registry")));
    node.setHeartbeatInterval(1000);

    QTreeView view;
    view.setWindowTitle(QStringLiteral("RemoteView"));
    view.resize(640,480);

    QScopedPointer<QAbstractItemModelReplica> model(node.acquireModel(QStringLiteral("RemoteModel")));
    view.setModel(model.data());

    view.show();

Конечно, за кадром остаются вопросы производительности и гибкости. Но для быстрого старта функционала более чем достаточно.

Дата изменения: