В программе производится много расчетов в базе данных(сначала исходная таблица разбивается на подтаблицы, после чего в каждой подтаблице производится расчет некоторый полей и на основе всех подтаблиц создается еще одна общая таблица). Все на уровне 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
, величину прогресса которогоможно опрашивать. где-то были стандартные примеры на это
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нужно импортировать csv файлы в БД под управлением QSLite с использованием Qt C++? Парсинг не вариантВ гугле толком ничего не нашел
Не могу разобраться с синтаксисом, подскажитеИ правильный ли алгоритм?
Ищу самую минималистскую IDE для C++ с вот такими требованиями:
При попытке скомпилировать следующий исходный код: