Russian Qt Forum
Март 28, 2024, 21:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Организация отображения выполнения нескольких длительных процессов  (Прочитано 7466 раз)
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« : Май 22, 2019, 12:56 »

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

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

Сообщений: 174


Просмотр профиля
« Ответ #1 : Май 22, 2019, 16:12 »

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

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

Сообщений: 858



Просмотр профиля
« Ответ #2 : Май 22, 2019, 16:33 »

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

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

Пока сам не сделаешь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Май 23, 2019, 06:53 »

Можно ли это сделать без resize(), не высчитывая размеры насколько увеличится окно? Что-то типа установил setVisible(true) и все подогналось
Скрываете "маленький виждет" и вместо него показываете "большой". Если оба они в QVBoxLayout то он сам и подгонит. Придется побегать с флагами/установками, но решаемо. Трудности возникают когда нужно получить размер до show()
Записан
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #4 : Май 23, 2019, 10:17 »

Я понимаю так. Если мне надо скрыть QTextEdit, то мне надо поместить QTextEdit и остальные виджеты в один QVBoxLayout.
Только при изменении видимости у меня окно, в котором все виджеты не меняет размер. Все как-то уплотняется или QTextEdit не помещается в экран.

С какими флагами и установками можно поэкспериментировать?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Май 23, 2019, 11:58 »

Только при изменении видимости у меня окно, в котором все виджеты не меняет размер. Все как-то уплотняется или QTextEdit не помещается в экран.
Значит тот парент widget (в лайаут которого помещен QTextEdit) - еще не окно или для него не установлена нужная QSizePolicy. Др словами или он сам не умеет расти/сжиматься или его парент не умеет (или не имеет лайаута).
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Май 23, 2019, 12:38 »

лучше сделать дополнительный виджет, в который помещать скрываемые и скрывать именно общий родитель, так меньше плясок с геометрией.
Хотя крови она попьёт.
Записан

Юра.
NoIdea
Новичок

Offline Offline

Сообщений: 12


Просмотр профиля
« Ответ #7 : Июнь 07, 2019, 23:20 »

Если под винду, то чтобы было модно не забудьте продублировать в QWinTaskbarButton::progress()
Так же можно отображать различные состояния QWinTaskbarButton::setOverlayIcon(const QIcon &icon)
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #8 : Июль 29, 2019, 11:18 »

Если много bakground процессов и/или потоков - может есть смысл написать небольшую модель/делегат, которая будет отображать список progress bar?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.107 секунд. Запросов: 23.