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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отображение диалога  (Прочитано 3420 раз)
milioran
Гость
« : Январь 27, 2010, 18:23 »

Есть такой код:
Код:
void SomeFunction()
{
     SomeDialog dlg;
     dlg.show();
     Sleep(3000);
}
(SomeDialog унаследован от QDialog, SomeFunction некая функция класса унаследованного от QMainWindow)
В windows (с виндовым Sleep) работает так: поверх главного окна отображается SomeDialog и через 3 секунды изчезает (собственно как и задумано).
При переносе того же кода в linux (с использованием sleep(3)), происходит следующее: задержка на 3 сек, после чего на мгновение появляется SomeDialog (т.е. успеть увидеть его трудно - отображение происходит непосредственно перед уничтожением объекта окна, ну или как то так)

А вопрос таков, каким образом реализовать поведение окон, чтобы хотя бы внешне выглядело как в случае c windows

полагаю что проблема не в qt, но навсякий случай qt 3.3.3
« Последнее редактирование: Январь 27, 2010, 19:59 от milioran » Записан
KADABRA
Гость
« Ответ #1 : Январь 27, 2010, 19:47 »

А вопрос таков, каким образом реализовать поведение окон, чтобы хотя бы внешне выглядело как в случае c windows
Создать диалог в куче, запустить таймер на 3 секунды, вернуть управление в главный цикл, по событию таймера закрыть диалог.
Записан
zenden
Гость
« Ответ #2 : Январь 27, 2010, 20:19 »

Не помню ни одной реальной задачи, где пришлось бы использовать sleep().  Непонимающий
Записан
SABROG
Гость
« Ответ #3 : Январь 27, 2010, 20:24 »

Унаследуйся от SomeDialog, переопредели метод timerEvent() в конструкторе вызови startTimer() в методе timerEvent() вызывай close() или done().
---
Блин, вот я извращенец. Короче создавай простой QTimer::singleShot() и делай connect() на сигнал timeout() к слоту close() или done().

P.S.: а то я уже в QStateMachine полез  Смеющийся
« Последнее редактирование: Январь 27, 2010, 20:33 от SABROG » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #4 : Январь 27, 2010, 22:06 »

еще гениальный вариант - после show сделать QApplication::processEvents()
Записан
SABROG
Гость
« Ответ #5 : Январь 28, 2010, 00:25 »

еще гениальный вариант - после show сделать QApplication::processEvents()

Достаточно exec() вызвать вместо show(). QApplication::processEvents() обработает всего-лишь доступные эвенты и пойдет дальше не дожидаясь завершения диалога, т.ч. скорее QEventLoop.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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