Qt: как я могу поставить мое главное окно в фоновом режиме при обработке с окном в forground? - PullRequest
3 голосов
/ 02 сентября 2010

Я использую Qt Framework, и я ищу лучший способ показать пользователю, что он что-то обрабатывает
как в Qt я могу:
поставить главное окно на задний план и всплывающее окно на передний план с например "обрабатывающий" массаж
пока не закончится обработка, окно «обработка» закроется и главное окно вернется на передний план.

Ответы [ 3 ]

8 голосов
/ 02 сентября 2010

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

Edit:

QProgressBar можно использовать в двух состояниях: пошаговое выполнение или просто отображение состояния занятости.

Индикатор выполнения QProgressDialog не может использоваться, показывая состояние занятости, потому что для этого потребуется установить минимальные и максимальные значения QProgressDialog равными 0, что немедленно закрывает диалоговое окно прогресса. Однако вы можете дать QProgressDialog новый индикатор выполнения, используя функцию setBar (). Затем вы можете установить min, max и value этого индикатора выполнения в 0, а затем получить занятой вид.

QProgressDialog progressDialog("Processing...", "Abort", 0, INT_MAX, this);

QProgressBar* bar = new QProgressBar(&progressDialog);
bar->setRange(0, 0);
bar->setValue(0);
progress.setBar(bar);

progressDialog.setMinimumWidth(350);
progressDialog.setMinimumDuration(1000);
progressDialog.setWindowModality(Qt::WindowModal);
progressDialog.setValue(0);


// Do your time consuming processing here, but remember to change 
// the progress dialog's value a few times per second. 
// That will keep the busy indicator moving.
progressDialog.setValue(progressDialog.value() + 1);

// And check if the user has cancelled the processing
if (progressDialog.wasCanceled())
    break or return or whatever necessary


// When your processing is done, close the dialog.
progressDialog.close();
4 голосов
/ 02 сентября 2010

Вы можете попробовать это:

  • В функции, вызывающей всплывающее окно, просто скройте главное окно, как только отобразится всплывающее окно процесса.
  • Подключитезавершить обработку сигнала в слоте главного окна Show().Если у вас нет предопределенного сигнала для этого, создайте его и отправьте.

    emit NameOfSignal;

Надеюсь, это поможет

Редактировать:

Для отключения главного окна используйте setDisabled вместо hide и setEnabled вместо show.

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

Вы можете присвоить своему окну «Обработка» Qt::WindowStaysOnTopHint, чтобы оно оставалось поверх вашего отключенного главного окна.

Если вам это не нравится, вы можете размыть главное окно, используя QGraphicsBlurEffect , когда окно обработки находится сверху. Таким образом, у пользователя создается впечатление, что главное окно недоступно до тех пор, пока ваша обработка не будет завершена.

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