alex_lipSept. 6, 2018, 8:04 a.m.
Обновить текст на кнопке во время выполнения 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(); } }
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!
AD
- Akiv Doros
- Nov. 11, 2024, 2:58 p.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:50points,
- Rating points-4
m
- molni99
- Oct. 26, 2024, 1:37 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:80points,
- Rating points4
m
- molni99
- Oct. 26, 2024, 1:29 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:20points,
- Rating points-10
Last comments
ИМ
Django - Tutorial 017. Customize the login page to Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь МаксимовNov. 22, 2024, 11:51 a.m.
Evgenii LegotckoiOct. 31, 2024, 2: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, 7:51 a.m.
QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Now discuss on the forum
Evgenii LegotckoiJune 24, 2024, 3:11 p.m.
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey1Nov. 15, 2024, 6:04 a.m.
NSProjectJune 4, 2022, 3:49 a.m.
IscanderCheOct. 31, 2024, 3:43 p.m.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
Поставил таймер на счетчик - текст кнопки просто 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 оставьте только отрисовку и логику интерфейса.
Спасибо за информацию с проблемой о файле, возможно, что не очищается форма без перезагрузки страницы, по возможности займусь этой проблемой.
В общем с учетом того, что я знаю сколько записей мне надо обновить и что у меня каждое обновление в отдельной транзакции - я решил проблему путем выполнение мелкого скрипта по таймеру. То есть скрипт вызывает сам себя через таймер. Вопрос закрыт.