В QML не получается использовать функцию из С++
Добрый день.
В QML не получается использовать функцию из С++
Создал класс:
- class DataWorking : public QObject
- {
- public:
- DataWorking();
- ~DataWorking();
- int randomNumber;
- int winNumber;
- int progressNumber;
- int roundNumber;// число раундов
- public slots:
- void setRandomNamber(int first, int last);
- };
- DataWorking::DataWorking()
- {
- winNumber = 0;
- progressNumber = 0;
- roundNumber = 20;
- }
- DataWorking::~DataWorking()
- {
- winNumber = 0;
- progressNumber = 0;
- }
- void DataWorking::setRandomNamber(int first, int last)
- {
- randomNumber = Random::get(first, last);
- qDebug()<<"randomNamber = "<<randomNumber;
- }
в main.cpp создаю контекст
- int main(int argc, char *argv[])
- {
- //qDebug()<<Random::get(15, 43);
- QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
- QGuiApplication app(argc, argv);
- DataWorking dataWorking; //основной объект класса
- QQmlApplicationEngine engine;// Создаём движок qml
- QQmlContext *context = engine.rootContext(); // Создаём корневой контекст
- /* Загружаем объект в контекст для установки соединения,
- * а также определяем имя, по которому будет происходить соединение
- * */
- context->setContextProperty("dataWorking", &dataWorking);
- engine.load(QUrl(QStringLiteral("qrc:/main.qml")));// Создаём движок qml
- if (engine.rootObjects().isEmpty())
- return -1;
- return app.exec();
- }
в main.qml указываю соединение
- Connections
- {
- target: dataWorking // Указываем целевое соединение
- }
и пытаюсь вызвать функцию класса:
- page1Button0.onClicked: //left button
- {
- dataWorking.setRandomNamber(1,55)
- }
но получаю ошибку: Property 'setRandomNamber' of object QObject(0x22fd40) is not a function
Скажите пожалуйста, как можно воспользоваться этой функцией и другими свойствами?
Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Последние комментарии
- AK1 апреля 2025 г. 11:41Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VP9 марта 2025 г. 16:14Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМ22 ноября 2024 г. 21:51Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Сейчас обсуждают на форуме
- f15 февраля 2025 г. 13:46Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
- Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
Приветствую.
Чтобы использовать методы или свойства из С++ надо юзать Q_INVOCABLE и Q_PROPERTY
И тогда QML сможет их юзать.
Скажите пожалуйста, как это сделать.
Попробовал сделать так, компилируется, но не заработало, видимо сделал неправильно:
Таккже попробовал сделать через Q_INVOCABLE , и тоже не работает
в хедере пишем
main.cpp
В QML
Спасибо. Оказалось достаточно Q_OBJECT добавить и использовать Q_INVOKABLE