Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пауза в программе 
V
    Опции темы
Ober
Дата 15.2.2012, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.3.2011

Репутация: нет
Всего: нет



Доброго времени суток подскажите пожалуйста как вставить к примеру паузу в 5 сек. до перерисовки и добавления в виджет элемента ?

Код

#include <QtGui>
#include <ctime>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget wgt;
    int proiz = 1;

    const int size = 5;
    srand( time( 0 ));
    int matrix[ size ][ size ];
    QGridLayout *pgrLayout = new QGridLayout;

    QPushButton *buttons[ size ][ size ];

    for( int x = 0; x < size; ++x )
     {
        for( int y = 0; y < size; y++ )
        {
            matrix[ x ][ y ] = rand() % 10 + 1;
            buttons[ x ][ y ] = new QPushButton( QString().setNum( matrix[ x ][ y  ]));
            buttons[ x ][ y ]->setMinimumSize( 50, 50 );
            pgrLayout->addWidget( buttons[ x ][ y ], x, y, Qt::AlignCenter );
        }
     }

     wgt.setLayout( pgrLayout );
     wgt.setFixedSize(350, 350 );
     wgt.show();
   
     // Сдесь должна быть пауза 5 сек.

     for( int x = 0; x < size; ++x )
      {
         for( int y = 0; y < size; y++ )
         {
            if( y > x )
              {
                buttons[ x ][ y ]->setCheckable( true );
                buttons[ x ][ y ]->setChecked( true );
                proiz *= matrix[ x ][ y ];
                 buttons[ x ][ y ]->setDisabled( true );
              }
         }
      }
     QPushButton *presult = new QPushButton("Result of product is: "
                                            + QString().setNum( proiz ));
     presult->setDisabled( true );
     pgrLayout->addWidget( presult, 6, 0, 1, 5 );
     wgt.setLayout( pgrLayout );

    return a.exec();
}

PM MAIL   Вверх
Artemon
Дата 16.2.2012, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 2
Всего: 20



Код

struct MyThread : public QThread { using QThread::msleep; };
MyThread::msleep(5000);



--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
borisbn
Дата 16.2.2012, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Artemon, я у себя точно такой же класс назвал Sleeper smile
Вот хоть застрелите - не могу понять, почему они сделали ф-ции sleep статиком, но не сделали public smile 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
newbee
Дата 16.2.2012, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 1
Всего: 19



Цитата(borisbn @  16.2.2012,  09:27 Найти цитируемый пост)
Вот хоть застрелите - не могу понять, почему они сделали ф-ции sleep статиком, но не сделали public
Потому что использоваться они должны в первую очередь внутри пользовательских нитей, хочешь стопорить главный поток Qt (а в общем случае просто "текущий") - извращайся, а в процессе еще раз подумай.



--------------------
You're face to face
With man who sold the world
PM   Вверх
Ober
Дата 16.2.2012, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.3.2011

Репутация: нет
Всего: нет



Цитата(Artemon @ 16.2.2012,  08:10)
Код

struct MyThread : public QThread { using QThread::msleep; };
MyThread::msleep(5000);

Этот способ я пробовал, но получается что окно просто подвисает и не прогружается, а нужно чтобы загрузился первый вариант окна, потом через  5 сек в него внести изменения и и перерисовать. Блин все делается через задницу, вообще в идеале эта программа должна быть написана С,
 но так как я С не учил, просто пытаюсь свести использование классов к минимуму, и использую только для визуализации.
PM MAIL   Вверх
borisbn
Дата 16.2.2012, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Ober, вставь перед вызовом msleep
Код
qApp->processEvents();



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Ober
Дата 16.2.2012, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.3.2011

Репутация: нет
Всего: нет



Цитата(borisbn @ 16.2.2012,  09:38)
Ober, вставь перед вызовом msleep
Код
qApp->processEvents();

Спасибо тебе добрый человек, все получилось.
PM MAIL   Вверх
Artemon
Дата 16.2.2012, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 2
Всего: 20



Цитата(borisbn @  16.2.2012,  08:27 Найти цитируемый пост)
Artemon, я у себя точно такой же класс назвал Sleeper 

Дело в том, что я у вас как-то и позаимствовал этот код smile


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Sahab
Дата 17.2.2012, 12:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 151
Регистрация: 1.9.2009

Репутация: 2
Всего: 3



Код

void qSleep(int msec) {
    QEventLoop loop;
    QTimer::singleShot(msec, &loop, SLOT(quit()));
    loop.exec();
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0485 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.