Версия для печати темы
Форум на CrossPlatform.RU _ Qt Общие вопросы _ Задержка действия
Автор: AD 23.6.2008, 18:58
Хочу сделать следующее. Идет какая-то загрузка, при этом работает полоса загрузки файлов. Эта полоса загрузки должна исчезнуть, когда закончено считывание! Но у меня есть желание сделать кое-какую задержку (в 1-2 сек.), прежде чем она исчезнет. Как это сделать? Какой функцией можно воспользоваться?
Автор: Litkevich Yuriy 23.6.2008, 19:33
Ну а как ты собираешся эту полосу убрать, наверное функцию какуюто будешь делать? Может в место нее вставить функцию, которая таймер будет взводить?
Автор: ViGOur 23.6.2008, 19:52
Для этих целей можно использовать: http://crossplatform.ru/documentation/qtdoc4.3/qthread.php#msleep
Или как сказал Litkevich Yuriy используй http://crossplatform.ru/documentation/qtdoc4.3/qtimer.php
Автор: AD 23.6.2008, 22:16
Цитата(Litkevich Yuriy @ 23.6.2008, 20:33)
Ну а как ты собираешся эту полосу убрать, наверное функцию какуюто будешь делать? Может в место нее вставить функцию, которая таймер будет взводить?
Убрать полосу легко - void QMainWindow::removeDockWidget ( QDockWidget * dockwidget ) , так как она располагается на прикрепленном виджете!
Я не понял, как можно использовать указанные функции, если mspleep - защищенная статическая функция? А у меня класс - производный от QMainWindow!
Автор: Litkevich Yuriy 23.6.2008, 22:31
ну ты же от куда-то будешь вызывать removeDockWidget(), он же не сам вызывается.
вот там где будешь вызывать, там и зделать задержку. я бы через однократный таймер стал делать (хотя и не делал еще) может способ который предложил ViGOur лучше, я еще про это не читал даже.
Автор: ViGOur 23.6.2008, 23:01
Цитата(AD @ 23.6.2008, 23:16)
Я не понял, как можно использовать указанные функции, если mspleep - защищенная статическая функция
А что тебе мешает переопределить класс потока и данную функцию в нем?
Автор: AD 23.6.2008, 23:03
Цитата
ну ты же от куда-то будешь вызывать removeDockWidget(), он же не сам вызывается.
вот там где будешь вызывать, там и зделать задержку. я бы через однократный таймер стал делать (хотя и не делал еще) может способ который предложил ViGOur лучше, я еще про это не читал даже.
Так-с
. Уже интересно! У меня вопрос - если я уже использую функцию timerEvent. Я могу создать локальный класс QTimer и использовать его для однократной задержки?
Автор: Litkevich Yuriy 24.6.2008, 0:07
Цитата(AD @ 24.6.2008, 3:03)
использовать его для однократной задержки?
см. http://crossplatform.ru/documentation/qtdoc4.3/qtimer.php#singleShot
но эту статическую фукцию если применять несколько раз в программе, можно напаротся на грабли, поэтому посмотри может лучше сделать какой-нибудь таймер однократным. Ведь у каждого потомка от QObject есть тамеры и метод http://crossplatform.ru/documentation/qtdoc4.3/qtimer.php#singleShot-prop и еще есть http://crossplatform.ru/documentation/qtdoc4.3/qbasictimer.php
Автор: AD 26.6.2008, 11:58
Данный вопрос решен с помощью указанного таймера следующим образом:
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. Тему можно закрыть.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)