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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Развернуть окно  (Прочитано 17691 раз)
Victor007
Гость
« Ответ #15 : Июнь 11, 2013, 18:20 »

А есть ли такая функция? (задержки в точке вызова)
Или как тогда правильно вызвать timer->start? Или это уже другая задача и надо ориентироваться на код по перерисовке экрана (основной вопрос)? Его я тоже вставлял:
Код:
void MainFr::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setPen(Qt::darkGreen);
    painter.setBrush(QBrush(Qt::darkGreen, Qt::SolidPattern)); // Чем красим
    painter.drawRect(2, 2, Rect_size-2, Rect_size);
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer->start(1000);
    painter.drawRect(455-Rect_size-2, 2, Rect_size, Rect_size);
    painter.drawRect(910-Rect_size-2, 2, Rect_size, Rect_size);
    painter.drawRect(1366-Rect_size-2, 2, Rect_size, Rect_size);
}

но опять безрезультатно(
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #16 : Июнь 13, 2013, 20:19 »

Если я правильно понял, то тебе нужно что-то типа этого черезпопного решения:
Код
C++ (Qt)
void MainFr::paintEvent(QPaintEvent *)
{
   static int x = 0;
   QPainter painter(this);
   painter.setRenderHint(QPainter::Antialiasing);
   painter.setPen(Qt::darkGreen);
   painter.setBrush(QBrush(Qt::darkGreen, Qt::SolidPattern)); // Чем красим
   // можно через switch
   if (x >= 0)
       painter.drawRect(2, 2, Rect_size-2, Rect_size);
   if (x >= 1)
       painter.drawRect(455-Rect_size-2, 2, Rect_size, Rect_size);
   if (x >= 2)
       painter.drawRect(910-Rect_size-2, 2, Rect_size, Rect_size);
   if (x >= 3)
       painter.drawRect(1366-Rect_size-2, 2, Rect_size, Rect_size);
   ++x;
   x = x%4;
}
Естественно должен быть где-то извне заведен таймер на слот update виджета MainFr.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Victor007
Гость
« Ответ #17 : Июнь 14, 2013, 00:11 »

Kurles, спасибо! Нет-нет, Вы неправильно меня поняли) Наверное, не стоило приводить код. Понимаете, у меня с алгоритмикой все в порядке, я программировал, например, на Builder (и не только), так что какие-то представления есть. Такую программку в нем я бы написал за очень короткое время.
Я бьюсь с тем, чтобы Qt у меня выполнил простейшую функцию задержки (а-ля, delay). Так что ваш совет из предыдущего поста:
Код:
QTimer *timer = new QTimer(this);
    //...
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer->start(1000);
должен был бы полностью решить мою проблему.
Беда в том, что я никак не могу "догнать" логику Qt. Читаю, пытаюсь что-то писать, вроде разобрался с сигналами и слотами минимально, но пока самые простейшие шаги идут очень туго.
Поэтому не могли бы Вы подробнее написать, как именно завести таймерна слот update виджета MainFr?
Надо ли как-то определять timeout() и update()? 
Записан
Victor007
Гость
« Ответ #18 : Июнь 14, 2013, 00:30 »

Я подумал, что, может быть, проще выложить проект, который у меня на данный момент получился. Программа выводит ряд прямоугольников в верхней части экрана. Мне необходимо, чтобы прямоугольники рисовались не одновременно, а с небольшой задержкой. Если бы Вы указали, в какой файл мне надо вписать тот код, который Вы приводили, это был бы идеальный вариант.
Записан
Bepec
Гость
« Ответ #19 : Июнь 14, 2013, 07:56 »

Вот вам мини пример с буфером.

https://dl.dropboxusercontent.com/u/62712483/Other/testPaint.zip

PS я слаб в графике, можно считать мой дебют.

Записан
Victor007
Гость
« Ответ #20 : Июнь 14, 2013, 15:06 »

Ого! Круто. Это то, над чем я бился почти неделю. У Вас наверное заняло меньше получаса. Да уж, есть, к чему стремиться. Буду сидеть, разбираться в коде. Спасибо большое!
Записан
Bepec
Гость
« Ответ #21 : Июнь 14, 2013, 18:14 »

Минут 5 с помощью темы с этого форума.

PS хвастаюсь :/
Записан
Victor007
Гость
« Ответ #22 : Июнь 14, 2013, 19:31 »

Верес, спасибо еще раз! Посмотрите, пожалуйста, лс, я отправил Вам сообщение. Сообщите, дошло ли оно, здесь немного странно работает личка. Спасибо!
Записан
Bepec
Гость
« Ответ #23 : Июнь 14, 2013, 22:24 »

Дошло, ответил. Ничуть не странно, просто непривычно Улыбающийся
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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