В программе производится много расчетов в базе данных(сначала исходная таблица разбивается на подтаблицы, после чего в каждой подтаблице производится расчет некоторый полей и на основе всех подтаблиц создается еще одна общая таблица). Все на уровне SQL запросов. Хочется чтобы отображался прогресс этих вычислений.
Можно ли как-нибудь это сделать?
Вот код, выполняющий расчеты, если кому-нибудь пригодится;
Добавьте сигнал
void progressChanged(int);
И измените функцию так
void DataBase::initDataBase()
{
createMainTable();
QSqlQuery _query(db);
QString str_query = "SELECT DISTINCT client FROM input_data";
if(_query.exec(str_query))
{
int percent = 0;
int i = 0;
int size = _query.size();
emit progressChanged(percent);
while(_query.next())
{
QString client = _query.value("client").toString();
createClientTable(client);
initClientTable(client);
addTupleInMainTable(client);
i++;
int currentPercent = (int)((double)i/size) * 100);
if(percent != currentPercent)
{
percent != currentPercent;
emit progressChanged(percent);
}
}
}
else
qDebug() << "База данных | Ошибка выгружения уникальных клиентов";
}
Сигнал будет вызываться только по изменению процента, а не каждый раз при изменении счетчика.
Если все производится одним запросом без возврата управления, это информацие есть только у СУБД. Однако по query.next() можно. Можно использовать QtConcurrentRun::mappedReduced и возвращающий QFuture, величину прогресса которогоможно опрашивать. где-то были стандартные примеры на это
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости