Сигнал C ++ для слота QML в Qt

Я хочу отправить сигнал из C ++ в слот в моем файле QML. Я уже работал без параметров примитивного типа, хотя, если я хочу отправить QString в свой QML-слот, я получаю сообщение об ошибке при подключении.

Я подключаюсь в main.cpp

 QObject *contentView = rootObject->findChild(QString("contentView")); QObject::connect(&myObj, SIGNAL(finishedGatheringDataForItem(QString)), contentView, SLOT(updateViewWithItem(QString))); 

relavant часть моего файла qml

 Rectangle { objectName: "contentView" function updateViewWithItem(string) { console.log('got some Items'); } // slot } 

Ошибка:

 Object::connect: No such slot QDeclarativeRectangle_QML_2::updateViewWithItem(QString) 

Я думаю, было бы лучше, если вы проверите этот учебник:

http://doc.qt.io/qt-4.8/qtbinding.html

особенно этот раздел:

http://doc.qt.io/qt-4.8/qtbinding.html#receiving-signals

Я думаю, что ваша ошибка в этом случае может заключаться в том, что вы не объявили ее слотом или вы не сделали его invocable. Оба варианта описаны в учебнике Qt.

Кроме того, вам необходимо использовать QVariant для обмена данными между C ++ и QML. Вы также можете регистрировать типы, например, виджеты и прочее, чтобы их можно использовать в QML как «родной» тип, например прямоугольник. В большинстве случаев это не рекомендуется, за исключением случаев, когда вам нужен какой-то определенный extern-class или некоторые данные, которые вы не можете отобразить иначе в вашем QML-интерфейсе.

Причиной для QVariant является подход QML, основанный на сценарии. QVariant в основном содержит ваши данные и описание типа данных, поэтому QML знает, как правильно его обрабатывать. Вот почему вы должны указать параметр в QML с помощью String, int и т. Д. Но исходный обмен данными с C ++ остается QVariant

Раньше я использовал qmlRegisterType, но это очень неудобное решение для простых типов данных. Он скорее используется для более сложных данных, таких как пользовательские элементы Widgets, Canvas или Video, которые QML не поддерживает или не расширяет QStandardItemModels . Это более удобный способ обмена данными между QML и C ++ и не требует сигналов или слотов в первом экземпляре, потому что QStandardItemModel автоматически обновляет графический интерфейс. Для использования QStandardItemModel вам необходимо зарегистрировать Type с qmlRegisterType … Затем модель может использоваться в представлениях на основе моделей, таких как ListView и т. Д.

Я приложил учебник для этой темы, в котором описано, как использовать QListModel.

http://doc.qt.io/qt-4.8/qdeclarativemodels.html

Вы должны использовать Connections в этом случае (возможно, это единственный способ подключения).

  1. Поместите свой объект myObj в QML-файл с помощью “ setContextProperty

     qmlVectorForm->rootContext()->setContextProperty("YourObject", myOb); 
  2. Ваш сигнал

     finishedGatheringDataForItem(QString signalString) 
  3. В файле QML добавьте Connections ниже:

     Connections { target: YourObject onFinishedGatheringDataForItem: { qmlString = signalString } } 
  • точка входа процедуры __gxx_personality_v0 не может быть расположена
  • QT4: Прозрачное окно с закругленными углами
  • Как скомпилировать Qt 5 под Windows или Linux, 32 или 64 бит, статические или динамические на VS2010, VS2012, VS2013 или VS2015 Express или g ++
  • Как использовать модели с QML?
  • резьба qt с движением
  • Разница между созданием объекта с помощью () или без
  • Построение Qt 5 в Linux, для Windows
  • C ++ Qt - Как добавить «-std = c ++ 11» в make-файл, который генерируется qmake?
  • Внедрение проекта Qt через CMake
  • Как сделать текст представления рендеринга богатым (html) текстом в Qt
  • Как изменить строку в QString?
  • Interesting Posts

    HttpServletRequest для полного URL-адреса

    Что хорошего, если таковая имеется, библиотека автоматизации Windows Windows?

    Использование стрелки (->) в C

    Windows 7 и Photoshop CS5.1 – проблема с отсутствием шрифтов – у меня есть шрифт !! (вроде)

    Получить строку командной строки для настройки VLC с графическим интерфейсом

    Как настроить `eth0` для повторного запуска` dhclient` при отключении и повторной загрузке?

    Привести другие процессы Окно на передний план, если у него есть ShowInTaskbar = false

    SimpleDateFormat игнорирует месяц при parsingе

    Что такое хороший компилятор-компилятор / синтаксический анализатор C #?

    Почему RijndaelManaged и AesCryptoServiceProvider возвращают разные результаты?

    Угловой 2 CLI огромный пакет поставщиков: как улучшить размер для prod?

    Не удалось запустить Windows XP, поскольку отсутствует или поврежден следующий файл: \ WINDOWS \ SYSTEM32 \ CONFIG \ SYSTEM

    Почему длина возвращает 1 для кортежа с 2 элементами и дает ошибку для кортежа с большим количеством элементов?

    Объединение Data.frame и выбор значений, которые являются общими в 2 Data.frames

    Поиск в Excel для подсчета подстроки и отображения

    Давайте будем гением компьютера.