alex_lipҚыр. 6, 2018, 8:04 Т.Ж.
Обновить текст на кнопке во время выполнения js скрипта
Есть кнопка, в которой выполняется скрипт (сначала в слое qt строиться модель, потом через сигнал на слое qml записываются записи из модели в таблицу sqllite). Хотелось бы, чтобы на кнопке шел счетчик каждые 20 записей.
Но показывается только последнее изменение - когда скрипт уже отработал. Где у меня проблема?Может быть проблема с биндингом? И надо через state и change property присваивать значения?
Item { id:root_i property string mytext function text_all_tree(m_i, m_row_count){ root_i.mytext = (m_i+1).toString()+"/"+m_row_count ; console.log((m_i+1).toString()+"/"+m_row_count); } onSendToQml_all_tree: { EsdDb.deleteDataAll_tree(); for (var i=0; i<myModel_All_tree.rowCount(); i++) { var m_officeid = myModel_All_tree.getOFFICEID(i); var m_parent_officeid = myModel_All_tree.getPARENT_OFFICEID(i); var m_name_office = myModel_All_tree.getNAME_OFFICE(i); var m_if_children = myModel_All_tree.getIF_CHILDREN(i); EsdDb.storeDataAll_tree(m_officeid, m_parent_officeid, m_name_office, m_if_children,i,row_count); if (i%20===0){ root_i.text_all_tree(i,row_count); } } }
TextButton { id: b_all_tree text: root_i.mytext anchors.top: parent.top anchors.left: parent.left anchors.rightMargin: 7 anchors.topMargin: 5 anchors.bottomMargin: 5 width: parent.width/4 smooth: false onClicked: { progressBar.value=0.05; appCore.f_RUN_All_tree(); } }
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!
Пікірлер
AD
- Akiv Doros
- Қар. 11, 2024, 2:58 Т.Қ.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:50ұпай,
- Бағалау ұпайлары-4
m
- molni99
- Қаз. 26, 2024, 1:37 Т.Ж.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:80ұпай,
- Бағалау ұпайлары4
m
- molni99
- Қаз. 26, 2024, 1:29 Т.Ж.
C++ - Тест 004. Указатели, Массивы и Циклы
- Нәтиже:20ұпай,
- Бағалау ұпайлары-10
Соңғы пікірлер
ИМ
Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Енді форумда талқылаңыз
Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
NSProjectМаусым 4, 2022, 3:49 Т.Ж.
IscanderCheҚаз. 31, 2024, 3:43 Т.Қ.
Поставил таймер на счетчик - текст кнопки просто 1,2,3.. - запускается - работает - когда начинает выполнение JS кнопки - останавливается - потом продолжает работать, когда JS кнопки заканчивается.
Судя по всему решение в использовании
Оказалось при данной постановке задачи - проблема не решаема! Высоконагруженный цикл должен быть в теле WorkerScript , а у оного нет доступа к LocalStorage. И к основному потоку тоже нет доступа. Поэтому апдейтить базу в нем не получается.
Ох нефигасе Вы зарылись...
Может Вам тогда каким-то образом перенести логику в С++?
Перенесу - что делать( у меня часть логики и так там). Просто хотелось в qml сделать. Зато много интересного прочитал )) Очень интересно было наблюдать как функции, которые должны были выполниться в цикле JS - выполняются по очереди после окончания цикла )) То есть js - консоль в цикле, а qml - тоже в цикле, но реально выполняется после него.
js: ---
js: htym
js: ---
js: 1/70
js: ---
js: 21/70
js: ---
js: 41/70
js: ---
js: 61/70
qml: +++++
qml: htym
qml: +++++
qml: 1/70
qml: +++++
qml: 21/70
qml: +++++
qml: 41/70
qml: +++++
qml: 61/70
Нашел очень интересный пример. Но у меня знаний не хватает его понять. Можете его прокомментировать? Исходники прилагаю.
Хм - проблема та же. Делаю счетчик в отдельном потоке в слое qt. Вывожу его в текст на слой qml. В слое qt счетчик увеличивается, а в слое qml - в момент выполнения "тяжелого" скрипта - вывода данных счетчика не происходит. То есть счетчик продолжает крутится в другом потоке, но отображение его значения а GUI не происходит до тех пор, пока "тяжелый" скрипт не завершится.
кстати файл прилип. Я его не прикреплял.
Насколько помню из документации, то QML в отличие от классических виджетов работает как минимум в двух потоках.
Классические виджеты работают в одном главном потоке GUI. И если нужно перенести какой-то объект в другой поток, то одним из способов является использование moveToThread . В этом имеется некоторая особенность поведения объектов, которые наследованы от QWidget. Их нельзя переносить в другие потоки, несмотря на то, что они изначально наследованы от QObject и также имеют метод moveToThread. Программа просто перестанет работать. Все виджеты должны быть в GUI-потоке.
Конвейер же QML в данном случае кардинально отличается. Часть логики работает в одном потоке, а логика отрисовки, которая непосредственно работает с OpenGL, выполняется в другом потоке. Здесь возникает проблема синхронизации, решена она достаточно успешно по большей части, если судить по поведению QML последних версий. Но подозреваю что проблемы всё-таки имеются и возникают как раз в том случае, когда выполняются тяжёлые js-скрипты в QML. Возможно, что часть логики просто блокируется, пока не выполнится код скрипта. Это мои догадки, пожтому могу ошибаться, но на данный момент у меня такое теоретическое представление о вашей проблеме.
Попробуйте по максимум перенести бизнес логику в C++, а на долю QML оставьте только отрисовку и логику интерфейса.
Спасибо за информацию с проблемой о файле, возможно, что не очищается форма без перезагрузки страницы, по возможности займусь этой проблемой.
В общем с учетом того, что я знаю сколько записей мне надо обновить и что у меня каждое обновление в отдельной транзакции - я решил проблему путем выполнение мелкого скрипта по таймеру. То есть скрипт вызывает сам себя через таймер. Вопрос закрыт.