crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> ProgressBar в новом окне, помогите понять как сделать
PVGDRK
  опции профиля:
сообщение 24.6.2010, 7:27
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 27.4.2010
Пользователь №: 1662

Спасибо сказали: 0 раз(а)




Репутация:   0  


Имеется форма, на которой расположены различные виджеты. При нажатии на одну из кнопок начинается вычислительный процесс достаточно длительный. Мне нужно сделать так,чтобы при запуске этого процесса моя форма становилась неактивной и появлялось окно с ProgressBar... В FormFile я выбрала функцию AddNewItem , newUiWidget... на появившейся форме разместила ProgressBar и кнопки Ок и Cancel... Как теперь новую форму "привязать" к нажатию кнопки? Или это делается как то по-другому?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 24.6.2010, 8:10
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Можно появить прогресс-бар как модальное окно с родителем-главным окном. Так решится вопрос блокировки окна. Затем, из главного окна (вернее, из цикла обработки) сигналом двигать полоску + подпинывать обработку сообщений /*QApplication::*/processEvents(); , чтоб была перерисовка и реакция на кнопку Cancel (если захочется остановить процесс обработки)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PVGDRK
  опции профиля:
сообщение 24.6.2010, 8:18
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 49
Регистрация: 27.4.2010
Пользователь №: 1662

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 24.6.2010, 9:10) *
Можно появить прогресс-бар как модальное окно с родителем-главным окном. Так решится вопрос блокировки окна. Затем, из главного окна (вернее, из цикла обработки) сигналом двигать полоску + подпинывать обработку сообщений /*QApplication::*/processEvents(); , чтоб была перерисовка и реакция на кнопку Cancel (если захочется остановить процесс обработки)

Да, мне так и нужно сделать - модальное окно. Но как оно создается? Нужна новая форма, как сейчас у меня сделано или это окно как то по-другому делается?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 24.6.2010, 8:27
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Давеча вот только перевод делал, кстати ))
http://www.forum.crossplatform.ru/index.php?showtopic=5154
int QDialog::exec ()   [slot]
Показывает модальный диалог. Функция возвращает результат DialogCode.

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

Смотрите также open(), show(), result(), и setWindowModality().


Как-то так
    QProgressDialog progress(this);//this - имеется в виду, что находимся в классе главного диалога. 
    progress.setLabelText(tr("Идёт форматирование винта соседа"));
    progress.setRange(0, 100);
    progress.exec();


только, честно, я сам ещё не пробовал :) На работе не поставлен Qt

Сообщение отредактировал Алексей1153 - 24.6.2010, 9:04
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.6.2010, 8:52
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


надо заранее создать QProgressDialog с помощью оператора new и настроить его.
Затем соединить его слот show() c сигналом кнопки.
А у класса занимающегося вычислениями сделать сигнал посылающий текущую степень выполнения, этот сигнал соединить со слотом setValue(int) QProgressDialog'а

Цитата(PVGDRK @ 24.6.2010, 12:18) *
QApplication::processEvents();
при работе в одном потоке это обязательно делать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 24.6.2010, 9:03
Сообщение #6


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(Litkevich Yuriy @ 24.6.2010, 11:52) *
надо заранее создать QProgressDialog с помощью оператора new и настроить его.

Почему именно из кучи ? Ведь всё равно пока из exec() не выходим, локальная переменная не разрушается.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.6.2010, 9:19
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Алексей1153 @ 24.6.2010, 13:03) *
Ведь всё равно пока из exec() не выходим, локальная переменная не разрушается.
а где вычислениями занимаемся?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 24.6.2010, 9:27
Сообщение #8


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Litkevich Yuriy, дык, поток другой. Или это как то по другому стали делать ? :) Ну, если что - меня сильно не пинать, я взращён мелкомягкой студией и избалован MFC
И ещё привык память в кучу возвращать вручную (или враппер писать с возвратом в деструкторе) , как-то непривычно оставлять висячие new... Но в Qt, по видимому, философия несколько иная. Как я понял, если окно разрушается, то для него вызывается delete автоматом и память вертается в кучу

Сообщение отредактировал Алексей1153 - 24.6.2010, 9:29
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.6.2010, 9:35
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Алексей1153 @ 24.6.2010, 13:27) *
дык, поток другой.
а где тут про поток упоминалось?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 24.6.2010, 9:38
Сообщение #10


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Это подразумевается )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 14:19