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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] QPainter. Нарисовать шахматную сетку.  (Прочитано 5570 раз)
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« : Август 25, 2013, 18:48 »

Всем привет! Улыбающийся
Написал алгоритм рисования и возникает артефакт (второй рисунок "Зебра").
Возникает он иногда при изменении размеров окна.
В чем ошибка? Улыбающийся

Код:
Код:
void Widget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setRenderHints(QPainter::Antialiasing);

    int sizeCell = 15;

    QColor color1 = Qt::gray;
    QColor color2 = Qt::white;

    painter.setPen(Qt::NoPen);

    bool brush = true;

    for(int row = 0; row < width(); row+=sizeCell)
        for(int column = 0; column < height(); column+=sizeCell)
        {
            if(brush)
                painter.setBrush(color1);
            else
                painter.setBrush(color2);

            painter.drawRect(row, column, sizeCell, sizeCell);

            brush = !brush;
        }
}
« Последнее редактирование: Август 26, 2013, 12:06 от gil9red » Записан

Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #1 : Август 25, 2013, 20:49 »

А  где артефакт? Улыбающийся
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Август 25, 2013, 20:55 »

Артефакт на втором рисунке, возникает при изменении размеров окна, причем не всегда, а на определенных размеров
Записан

_OLEGator_
Гость
« Ответ #3 : Август 25, 2013, 22:32 »

Я полагаю это не артефакт. Надо более внимательно относиться к коду - не достаточно менять brush на противоположное значение.
Ты идешь по Y координате с шагом 15, постоянно меняя brush. Что будет когда в высоту помещается четное количество шагов? Что будет, когда нечетное количество шагов?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Август 26, 2013, 10:03 »

Код
C++ (Qt)
           if ((row % 2) == (column % 2))
               painter.setBrush(color1);
           else
               painter.setBrush(color2);
 
« Последнее редактирование: Август 26, 2013, 10:26 от Igors » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #5 : Август 26, 2013, 10:09 »

Думаете заработает это в коде gil9red?

Код
C++ (Qt)
           if ((row * column + column) & 1)
               painter.setBrush(color1);
           else
               painter.setBrush(color2);
 
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Август 26, 2013, 10:27 »

Думаете заработает это в коде gil9red?
Подправил  Улыбающийся
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #7 : Август 26, 2013, 12:05 »

Понял, спасибо за то что ткнули в ошибку и показали как ее исправить Улыбающийся
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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