Кодирование индикатора выполнения - PullRequest
2 голосов
/ 07 сентября 2010

В моем приложении я анализирую XML-файл и проверяю содержимое с помощью схемы xsd.Когда XML-файл становится больше, требуется некоторое время, чтобы проанализировать файл и проверить его содержимое.В этом случае я хочу визуализировать фазы анализа и проверки с помощью индикатора выполнения.Как это сделать?

Примечание: я использую Qt с C ++

Ответы [ 3 ]

3 голосов
/ 07 сентября 2010

Обычно вы просто создаете экземпляр QProgressDialog:

QProgressDialog progress("Parsing...", "Abort", 0, numOperations, this);
progress.setWindowModality(Qt::WindowModal);

, где numOperations - это полное количество действий, которые необходимо выполнить перед выполнением анализа. Для этого вам, вероятно, нужно сделать первый быстрый просмотр данных, в котором вы просто подсчитываете общее количество анализируемых элементов или что-то подобное, и устанавливаете это значение как максимальное значение numOperations в предыдущем примере кода. Затем вы делаете фактический проход обработки и периодически вызываете setValue:

progress.setValue(finishedOperations);

где finishOperations - количество проанализированных на данный момент вещей.

Предполагается, что вам нужно простейшее решение, в котором индикатор выполнения отображается в виде отдельного модального диалога. Если вы хотите дать пользователю возможность прервать процесс, вам нужно реализовать слот, который вы подключаете к сигналу canceled() .

Если вы не хотите, чтобы индикатор выполнения в модальном диалоговом окне просто показывал где-то QProgressBar. Он работает аналогичным образом, периодически вызывая setValue ().

1 голос
/ 07 сентября 2010

Предполагая, что реализация синтаксического анализа xml извлекает свои данные из какого-то буферизованного потока, присоединенного к считывателю файлов - считывайте размер файла, а затем каждый раз, когда входной буфер захватывает другой блок из считывателя файлов, обновляйте индикатор выполнения. , Это, вероятно, может быть сделано наиболее удобно, путем извлечения нового класса из класса средства чтения файлов и переопределения функции блока чтения для сообщения о прогрессе.

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

0 голосов
/ 07 сентября 2010

Какова основная циклическая структура вашего алгоритма?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...