
МихаилллApril 3, 2019, 1:25 p.m.
В QML не срабатывает таймер
Добрый день.
Сделал в QML таймер, но он почему то не работает. Кнопки становятся активными сразу же, а не по прошествии таймера.
Скажите пожалуйста, почему так и как исправить?
import QtQuick 2.4 import QtQml 2.12 Page1Form { page1Button0.onClicked: //left button { state = "Page1State2" page1Button0.enabled = false page1Button1.enabled = false Timer { interval: 150000 running: true repeat: false onTriggered: { page1Button0.enabled = true page1Button1.enabled = true } } }

We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
Ua
- Unknown akadamn
- Jan. 24, 2025, 5:14 p.m.
Qt - Test 001. Signals and slots
- Result:84points,
- Rating points4
Ua
- Unknown akadamn
- Jan. 24, 2025, 4:22 p.m.
Qt - Test 001. Signals and slots
- Result:42points,
- Rating points-8
Last comments
ИМ
Django - Tutorial 017. Customize the login page to Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь МаксимовNov. 22, 2024, 9:51 p.m.

Evgenii LegotckoiOct. 31, 2024, 11:37 p.m.
Fb3 file reader on Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Lesson 064. How to write a Python Markdown extension Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь МаксимовOct. 5, 2024, 4:51 p.m.
QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Now discuss on the forum
f
Рисование на QGraphicsScene при зажатой кнопке мыши Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
firstlunoxodFeb. 15, 2025, 1:46 p.m.

ДмитрийFeb. 3, 2025, 4:24 p.m.
не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
запилить таймер НЕ в onClicked методе, выставить running: false. а уже по нажатию в onClicked сделать start() таймеру
Спасибо. Но почему его нельзя делать в onClicked ?
хороший вопрос)
Добрый день.
К onClicked присваивается функция, и написание кода в декларативном виде, как структура вёрстки в QML внутри функции не работает. Поэтому создать Timer здесь нельзя в таком виде. Внутри функции делается запись только в императивном стиле, как в C++.
Вы можете только запустить или стопнуть Timer в onClicked методе.
Таково поведение языка QML
это понятно.. вопрос глубже, так а почему же нельзя? может кто-то копался в исходниках qml и объяснит в чем сокральный смысл запрета. во что преобразуется Timer и Button.. как они реализованы! знаю что когда включаешь сборку с Qt Quick Compiler QML классы преобразуются в с++ за счет этого ускоряется работа qml кода.. и если все это преобразуется в классы, то кто мешает в методе onClicked сделать new Timer.. хотя если делать так, то при каждом onClicked будет создаваться новый Timer, что тоже не гуд.. поэтому может и сделали так, чтобы он объявлялся в теле Button один раз! в общем-то ничто не мешало позволить его создавать и по клику, но вот управление памятью при этом бы усложнилась, как мне кажется.. поэтому сделали проще и надежнее! ваши мысли?
Timer, Button и т.д. - это всё объекты, которые наследованы от QObject. Все QML типы наследованы от QObject, кроме простейших типов и некоторых контейнеров. И да, получается, что всё в итоге преобразуется в C++ код. По сути можно написать на QML проект, написав очень мало на самом QML, а большую часть логики написав на C++. QML предоставляет более удобный механизм работы с OpenGL для отрисовки объектов, поэтому такой подход жизнеспособен, тем более, что реализовать отрисовку через QML средствами QQuickItem возможно только при наследовании через C++.
Сакрального смысла в запрете нет, и запрета нет. Это просто не работает так, как было написано в самом начале. А суть в том, что QML - это язык с json подобным синтаксисом, в котором структура записи определяет структуру вёрстки. При этом каждый объект должен иметь parent объект. То есть структура организации объектов является древовидной. В случае с методом onClicked таймер не получает parent и QML даже не понимает, куда этот таймер нужно запихнуть и что с ним делать, поэтому вываливает ошибку.
В функции можно создать объект динамически, но тот объект будет создаваться из какого-либо компонента (ваш кастомный QML файл или стандартный тип), а потом ему уже устанавливается parent. Для более подробного описания посмотрите следующую статью . Особенно обратите внимание на функцию createTarget . Это как раз то, о чём вы спрашивали.
То есть я не говорил, что это невозможно сделать. Я говорил, что это не делается таким образом, как это делал топикстартер.