Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: YvenTitan от Май 22, 2019, 12:56



Название: Организация отображения выполнения нескольких длительных процессов
Отправлено: YvenTitan от Май 22, 2019, 12:56
Здравствуйте
У меня есть графическая программа, которая по нажатию кнопки выполняет последовательность некоторых длительные процессов.
Я бы хотел, организовать визуальное отображение процессов для пользователя, а потом это отображение скрыть.
В моем представлении это так: есть окно, при нажатии кнопки оно расширяется вниз и в появившейся области начинается отображение выполнения первого процесса (например передача файла по сети). Прогресс этого процесса отображается в QProgressBar. По окончании его начинается следующий (например верификация переданного файла) с QProgressBar и тд. В конце выводится сообщение о том, что все прошло успешно/не успешно и окно принимает первоначальный размер.

С помощью каких виджетов это (отображение состояния процессов) лучше организовать? Какой виджет использовать для отображения процесса? Может, на ваш взгляд, есть хорошая альтернатива расширению окна?


Название: Re: Организация отображения выполнения нескольких длительных процессов
Отправлено: YvenTitan от Май 22, 2019, 16:12
Разбираясь, у меня возник другой вопрос, на мой взгляд, более конкретный.
Я хочу сделать окно, которое имеет кнопку, нажав на которую появляются подробности процесса. (Пример во вложении)
У меня все подробности в нижней части окна.

Можно ли это сделать без resize(), не высчитывая размеры насколько увеличится окно? Что-то типа установил setVisible(true) и все подогналось


Название: Re: Организация отображения выполнения нескольких длительных процессов
Отправлено: ViTech от Май 22, 2019, 16:33
Можно ли это сделать без resize(), не высчитывая размеры насколько увеличится окно? Что-то типа установил setVisible(true) и все подогналось

Попробуйте QWidget::adjustSize() использовать.


Название: Re: Организация отображения выполнения нескольких длительных процессов
Отправлено: Igors от Май 23, 2019, 06:53
Можно ли это сделать без resize(), не высчитывая размеры насколько увеличится окно? Что-то типа установил setVisible(true) и все подогналось
Скрываете "маленький виждет" и вместо него показываете "большой". Если оба они в QVBoxLayout то он сам и подгонит. Придется побегать с флагами/установками, но решаемо. Трудности возникают когда нужно получить размер до show()


Название: Re: Организация отображения выполнения нескольких длительных процессов
Отправлено: YvenTitan от Май 23, 2019, 10:17
Я понимаю так. Если мне надо скрыть QTextEdit, то мне надо поместить QTextEdit и остальные виджеты в один QVBoxLayout.
Только при изменении видимости у меня окно, в котором все виджеты не меняет размер. Все как-то уплотняется или QTextEdit не помещается в экран.

С какими флагами и установками можно поэкспериментировать?


Название: Re: Организация отображения выполнения нескольких длительных процессов
Отправлено: Igors от Май 23, 2019, 11:58
Только при изменении видимости у меня окно, в котором все виджеты не меняет размер. Все как-то уплотняется или QTextEdit не помещается в экран.
Значит тот парент widget (в лайаут которого помещен QTextEdit) - еще не окно или для него не установлена нужная QSizePolicy. Др словами или он сам не умеет расти/сжиматься или его парент не умеет (или не имеет лайаута).


Название: Re: Организация отображения выполнения нескольких длительных процессов
Отправлено: lit-uriy от Май 23, 2019, 12:38
лучше сделать дополнительный виджет, в который помещать скрываемые и скрывать именно общий родитель, так меньше плясок с геометрией.
Хотя крови она попьёт.


Название: Re: Организация отображения выполнения нескольких длительных процессов
Отправлено: NoIdea от Июнь 07, 2019, 23:20
Если под винду, то чтобы было модно не забудьте продублировать в QWinTaskbarButton::progress()
Так же можно отображать различные состояния QWinTaskbarButton::setOverlayIcon(const QIcon &icon)


Название: Re: Организация отображения выполнения нескольких длительных процессов
Отправлено: Fregloin от Июль 29, 2019, 11:18
Если много bakground процессов и/или потоков - может есть смысл написать небольшую модель/делегат, которая будет отображать список progress bar?