Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 210новых вакансий за сутки·93 612вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 266
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 126
  • Облачные технологии14 083
  • QA вакансии3 456
  • Backend вакансии2 115
  • Инженер данных1 809
  • Продакт-менеджер1 261

Разработка

  • Android1 862
  • iOS1 700
  • Fullstack вакансии986
  • AI вакансии950
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 688
  • Java6 537
  • Node.js2 026
  • .NET1 722
  • Kotlin1 611
  • Rust1 458
  • C#710
  • PHP682
  • C++571

DevOps и инфраструктура

  • Kubernetes7 772
  • DevOps вакансии6 054
  • Linux-инфраструктура5 493
  • Terraform / IaC4 275
  • CI/CD3 239
  • Мониторинг и Observability1 790
  • SRE568
  • Кибербезопасность458

Аналитика и данные

  • Data Scientist1 143
  • Бизнес-аналитик923
  • Аналитик данных857
  • Системный аналитик152

Другие направления

  • Проджект-менеджер620
  • UI/UX дизайн146
  • Ручное тестирование14

По регионам

  • Вакансии в США44 276
  • Вакансии в Европе23 819
  • Вакансии в Канаде4 471
  • Работа в России3 904

По формату

  • Удалённые вакансии74 928
  • Релокация в США44 273
  • Гибридная работа12 388
  • Офисная работа7 083

По уровню

  • Senior вакансии42 625
  • Middle вакансии20 854
  • Junior вакансии6 721

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме QtВсе вопросы
QtMiddleТеория

Как QML интегрируется с C++ (выставление C++-классов в QML)?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

C++-класс регистрируется в QML через qmlRegisterType() или макрос QML_ELEMENT. После этого Q_PROPERTY, Q_INVOKABLE-методы и сигналы класса становятся доступны в QML напрямую.

Способ 1: qmlRegisterType (Qt 5 / совместимо с Qt 6)

Регистрирует класс как инстанцируемый тип QML. После регистрации можно писать MyClass { } прямо в .qml-файле.

// counter.h
#include <QObject>
class Counter : public QObject
{
    Q_OBJECT
    Q_PROPERTY(int value READ value NOTIFY valueChanged)
public:
    explicit Counter(QObject *parent = nullptr) : QObject(parent), m_value(0) {}
    int value() const { return m_value; }
public slots:
    void increment() { ++m_value; emit valueChanged(); }
signals:
    void valueChanged();
private:
    int m_value;
};
// main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QtQml>
#include "counter.h"

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    // uri="com.example", major=1, minor=0, qml-имя="Counter"
    qmlRegisterType<Counter>("com.example", 1, 0, "Counter");
    QQmlApplicationEngine engine;
    engine.load(QUrl("qrc:/main.qml"));
    return app.exec();
}
// main.qml
import QtQuick 2.15
import com.example 1.0

Item {
    Counter {
        id: counter
    }
    Text { text: counter.value }
    MouseArea {
        anchors.fill: parent
        onClicked: counter.increment()
    }
}

Интеграция QML с C++

Qt предоставляет несколько механизмов для того, чтобы C++-классы стали «первоклассными» объектами в QML. Выбор метода зависит от того, нужно ли создавать экземпляры типа прямо в QML или только обращаться к одному заранее созданному объекту.

Способ 2: QML_ELEMENT / QML_NAMED_ELEMENT (Qt 6, предпочтительный)

Макрос QML_ELEMENT в теле класса и настройка qt_add_qml_module в CMake автоматически регистрируют тип без ручного вызова qmlRegisterType:

// counter.h
#include <QObject>
#include <QtQml/qqmlregistration.h>
class Counter : public QObject
{
    Q_OBJECT
    QML_ELEMENT
    Q_PROPERTY(int value READ value NOTIFY valueChanged)
    // ... (как выше)
};
# CMakeLists.txt
qt_add_qml_module(app
    URI com.example
    VERSION 1.0
    SOURCES counter.h counter.cpp
    QML_FILES main.qml
)

Способ 3: Singleton через qmlRegisterSingletonType

Когда нужен ровно один экземпляр (например, сервис настроек):

qmlRegisterSingletonType<AppSettings>(
    "com.example", 1, 0, "AppSettings",
    [](QQmlEngine *, QJSEngine *) -> QObject * {
        return new AppSettings();
    });
import com.example 1.0
Text { text: AppSettings.theme }  // нет id, обращение по имени типа

Способ 4: setContextProperty

Передать уже существующий объект в корневой контекст (см. вопрос о QML-контексте). Подходит для «глобальных» объектов уровня приложения.

Что доступно из QML автоматически

  • Q_PROPERTY — читается и пишется как свойство QML, изменения через NOTIFY-сигнал запускают биндинги.
  • Публичные slots и методы с макросом Q_INVOKABLE — вызываются как обычные JS-функции.
  • Q_ENUM / Q_FLAG — становятся перечислениями вида MyClass.ValueA.

Подводные камни

  • Отсутствие Q_OBJECT: без макроса Q_OBJECT moc не обработает класс, сигналы и Q_PROPERTY просто не будут работать — и ошибку компилятора при этом не получить.
  • Потоки: QML-движок работает в GUI-потоке; вызов слотов из фонового потока требует Qt::QueuedConnection.
  • Владение памятью: объекты, созданные в C++ и переданные QML, по умолчанию остаются под управлением C++; объекты, созданные внутри QML, управляются движком — смешивать без осторожности опасно (двойное удаление).
  • Устаревший QQmlEngine::setObjectOwnership: явно задавайте QQmlEngine::CppOwnership для объектов, которые QML не должен удалять.
  • Версия URI: в Qt 6 с QML_ELEMENT версии мажорного/минорного модуля контролируются CMake-конфигурацией, ручные вызовы qmlRegisterType с другой версией конфликтуют.
  • Типы возврата: методы, возвращающие QObject*, работают; возвращающие пользовательские C++ типы без регистрации в мета-системе — нет.
  • Отладка: включайте QML_IMPORT_PATH и запускайте с -qmljsdebugger для диагностики ошибок регистрации типов.

Частые вопросы на собеседовании

  • Как Qt работает с многопоточностью? Что такое QThread и паттерн worker-object?
  • Как работает управление памятью в Qt?
  • В каких проектах Qt оправдан, а где он становится источником лишней сложности?
  • Что такое иерархия объектов Qt и как работает владение по принципу parent-child?

Типичные ошибки

  • Объяснять QML и C++ integration только по синтаксису, без жизненного цикла и стоимости.
  • Игнорировать ошибки, null/empty состояния, порядок инициализации или режим сборки.
  • Давать пример, который работает в демо, но ломается при изменении владельца ресурса.
  • Смешивать signals/slots с generic callbacks и забывать про thread affinity.

Что проверяет интервьюер

  • Кандидат формулирует точную модель для QML и C++ integration, а не только определение.
  • Пример компилируем, безопасен по lifetime и соответствует версии технологии.
  • Названы trade-off, ограничения и диагностируемые симптомы ошибки.
  • Понимает границу между C++ кодом, runtime/framework metadata и editor/UI слоем.

Как вы знаете этот вопрос?

Проверить себя по теме Qt →

Источники

  • https://doc.qt.io/qt-6/qtqml-cppintegration-overview.html
←Предыдущий вопросЧто такое Qt и какие платформы он поддерживает?Следующий вопрос→Как соединять signals и slots в Qt 5 vs Qt 6 (синтаксис нового стиля)?

Связанные темы

Qtobject-lifetimeperformance-debuggingui-architecture