Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT4.5]Мерцание при перерисовке, Двойная буферизация стоит же поумолчанию 
:(
    Опции темы
Moby
Дата 23.11.2009, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот упрощенный код paintEvent'а
Код

paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawPixmap(0 + i,0 ,*img);
i++;
}        

Есть QTimer и коннект его с update()'ом, либо с repaint()(проблема остается та же)
Код

timer = new QTimer(this);
connect(timer,SIGNAL(timeout()), this, SLOT(update()));

Далее я запускаю таймер 
Код

timer->start(ui.horizontalSlider->value()); 

значения могут быть любыми, но обычно это 50-100 мс.

Так вот, мерцания есть. И очень даже заметны. 

Отчего это зависит, если двойная буферизация включена по умолчанию? Может зависит от того как я сделал "анимацию"?

Это сообщение отредактировал(а) Moby - 23.11.2009, 19:34
PM MAIL ICQ   Вверх
niXman
Дата 23.11.2009, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Moby, На ком рисуешь? Кто такой this?
--------------------
if ( !c++ ) {   *power--;   this->wussiness += 10;}
PM MAIL   Вверх
Moby
Дата 24.11.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



На QWidget, если я правильно понимаю. 

Код

prog::prog(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{......................}

void prog::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
...........
.......
}




Это сообщение отредактировал(а) Moby - 24.11.2009, 15:06
PM MAIL ICQ   Вверх
SABROG
Дата 24.11.2009, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Какой размер картинки рисуется, какого размера окно, картинка генерится или выводится готовая взятая из ресурсов или диска, где минимальный компилируемый пример, который можно было бы погонять людям, чтобы ты смог решить свою проблему?


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Moby
Дата 24.11.2009, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



У меня полноэкранный режим.
У меня есть отдельный класс rds который создает несколько пиксмапов. 

1 - Есть массив Pic = new QPixmap[13];. 
2 - Есть функция которая создает из каждого элемента вот такую картинку размером 120х120
user posted image

В общем есть массив пиксмапов готовых.

В базовом классе просто тупо в конструкторе создаю экземпляр этого класса и вызываю функцию. 
Код

rds_class = new rds;
rds_class->create_imgs();

И вот что в paintEvent'е пишу.
Код

paintEvent(QPaintEvent *event)
{
QPainter painter(this);
if(i==100)
{
    random = rand()%(13);
}
painter.drawPixmap(0 + i,0,*(rds_class).Pic[random]);
}    

А вот скомпилированый пример http://stream.ifolder.ru/15142224

PM MAIL ICQ   Вверх
Moby
Дата 26.11.2009, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Люди добрые, ну помогите! smile

В чем же проблема, откуда мерцание? 

Я переделал наследование с QWidget на QMainWindow. Результат тот же. 

Может быть все же из-за того, как реализовано движение пиксмапа. Может не QTimer использовать?
PM MAIL ICQ   Вверх
SABROG
Дата 28.11.2009, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



Я попробовал на своей машине, мерцание есть, но не настолько страшное, чтобы на него обращаться внимание, а без полных исходников ничего не потестить и вердикта не вынести.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Moby
Дата 14.12.2009, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Эта программка нужна в "научных" целях, так что мерцание не должно быть.

Я выкладываю исходники. Надеюсь поможет. Выкладываю с огромным страхом ибо код написан ужасно глупо, много лишнего да и культуры программирования у меня нет. Так что прошу не судить строго. 
Я уже не знаю что и делать. Пробовал разные варианты. Дома на пк ставил creator, то же самое. Пробовал использовать QTimeLine, то же самое.

http://ifolder.ru/15467906
PM MAIL ICQ   Вверх
SABROG
Дата 14.12.2009, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


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

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



К сожалению программа написана с использованием Visual Studio и в ней нет .pro файла, который мне необходим, чтобы её собрать на MinGW.


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

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

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


 




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


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

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