crossplatform.ru

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

 
Тема закрытаНачать новую тему
> Задержка действия
AD
  опции профиля:
сообщение 23.6.2008, 18:58
Сообщение #1


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

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Хочу сделать следующее. Идет какая-то загрузка, при этом работает полоса загрузки файлов. Эта полоса загрузки должна исчезнуть, когда закончено считывание! Но у меня есть желание сделать кое-какую задержку (в 1-2 сек.), прежде чем она исчезнет. Как это сделать? Какой функцией можно воспользоваться?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 23.6.2008, 19:33
Сообщение #2


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

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

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




Репутация:   94  


Ну а как ты собираешся эту полосу убрать, наверное функцию какуюто будешь делать? Может в место нее вставить функцию, которая таймер будет взводить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 23.6.2008, 19:52
Сообщение #3


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Для этих целей можно использовать: void QThread::msleep ( unsigned long msecs )
Или как сказал Litkevich Yuriy используй QTimer Class Reference
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 23.6.2008, 22:16
Сообщение #4


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

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(Litkevich Yuriy @ 23.6.2008, 20:33) *
Ну а как ты собираешся эту полосу убрать, наверное функцию какуюто будешь делать? Может в место нее вставить функцию, которая таймер будет взводить?

Убрать полосу легко - void QMainWindow::removeDockWidget ( QDockWidget * dockwidget ) , так как она располагается на прикрепленном виджете!
Я не понял, как можно использовать указанные функции, если mspleep - защищенная статическая функция? А у меня класс - производный от QMainWindow!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 23.6.2008, 22:31
Сообщение #5


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

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

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




Репутация:   94  


ну ты же от куда-то будешь вызывать removeDockWidget(), он же не сам вызывается.
вот там где будешь вызывать, там и зделать задержку. я бы через однократный таймер стал делать (хотя и не делал еще) может способ который предложил ViGOur лучше, я еще про это не читал даже.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 23.6.2008, 23:01
Сообщение #6


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Цитата(AD @ 23.6.2008, 23:16) *
Я не понял, как можно использовать указанные функции, если mspleep - защищенная статическая функция
А что тебе мешает переопределить класс потока и данную функцию в нем? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 23.6.2008, 23:03
Сообщение #7


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

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата
ну ты же от куда-то будешь вызывать removeDockWidget(), он же не сам вызывается.
вот там где будешь вызывать, там и зделать задержку. я бы через однократный таймер стал делать (хотя и не делал еще) может способ который предложил ViGOur лучше, я еще про это не читал даже.

Так-с :). Уже интересно! У меня вопрос - если я уже использую функцию timerEvent. Я могу создать локальный класс QTimer и использовать его для однократной задержки?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.6.2008, 0:07
Сообщение #8


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

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

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




Репутация:   94  


Цитата(AD @ 24.6.2008, 3:03) *
использовать его для однократной задержки?

см. Timer::singleShot(600000, &app, SLOT(quit()));

но эту статическую фукцию если применять несколько раз в программе, можно напаротся на грабли, поэтому посмотри может лучше сделать какой-нибудь таймер однократным. Ведь у каждого потомка от QObject есть тамеры и метод setSingleShot() и еще есть QBasicTimer
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 26.6.2008, 11:58
Сообщение #9


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

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Данный вопрос решен с помощью указанного таймера следующим образом:
void TLV::initGeoVec()
{
    // any actions .......
        // ..............

    QTimer* c_timer = new QTimer(this);
    connect(c_timer, SIGNAL(timeout()), this, SLOT(invisibleProgress()));
    c_timer -> setSingleShot(true);
    c_timer -> start(2000);

        // ..............
}


/// Исчезновение полосы загрузки
void TLV::invisibleProgress()
{ if(log.size() == threadRFile -> logger -> records_count) progressBar -> setVisible(false); }

Всем спасибо!
p.s. Тему можно закрыть.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Тема закрытаНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 26.12.2024, 16:24