Привязать QProgressBar к расчетам

252
12 марта 2017, 07:27

В программе производится много расчетов в базе данных(сначала исходная таблица разбивается на подтаблицы, после чего в каждой подтаблице производится расчет некоторый полей и на основе всех подтаблиц создается еще одна общая таблица). Все на уровне SQL запросов. Хочется чтобы отображался прогресс этих вычислений.
Можно ли как-нибудь это сделать?

Вот код, выполняющий расчеты, если кому-нибудь пригодится;

Answer 1

Добавьте сигнал

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() << "База данных | Ошибка выгружения уникальных клиентов";
}

Сигнал будет вызываться только по изменению процента, а не каждый раз при изменении счетчика.

Answer 2

Если все производится одним запросом без возврата управления, это информацие есть только у СУБД. Однако по query.next() можно. Можно использовать QtConcurrentRun::mappedReduced и возвращающий QFuture, величину прогресса которогоможно опрашивать. где-то были стандартные примеры на это

READ ALSO
Импорт csv в SQLite | Qt C++

Импорт csv в SQLite | Qt C++

Нужно импортировать csv файлы в БД под управлением QSLite с использованием Qt C++? Парсинг не вариантВ гугле толком ничего не нашел

378
Выборка из массива меньших массивов и условие пересечения оных - C++

Выборка из массива меньших массивов и условие пересечения оных - C++

Не могу разобраться с синтаксисом, подскажитеИ правильный ли алгоритм?

203
Самая минималистская IDE для C++ [требует правки]

Самая минималистская IDE для C++ [требует правки]

Ищу самую минималистскую IDE для C++ с вот такими требованиями:

242
Ошибка: &#171;Unresolved external &#39;std::tr1::_Random_device()&#39;&#187;

Ошибка: «Unresolved external 'std::tr1::_Random_device()'»

При попытке скомпилировать следующий исходный код:

228