crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QPaintEvent
Гость_Дмитрий_*
сообщение 28.4.2009, 23:23
Сообщение #1





Гости








    


Хочу нарисовать башенку из прямоугольников определённой высоты в зависимости от положения ползунка (при каждом изменении его положения башенка перерисовывается). Подскажите, пожалуйста, как это реализовать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
child_of_bodom
  опции профиля:
сообщение 4.5.2009, 0:30
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 30.4.2009
Пользователь №: 716

Спасибо сказали: 0 раз(а)




Репутация:   0  


Раскрывающийся текст
void hantower_graph3::paintEvent(QPaintEvent * event)
{
        QPainter painter(this);
        painter.setPen(Qt::black);
        painter.setBrush(QBrush(Qt::red));
        if(numRect)
            {
                painter.setPen(QPen(Qt::blue, 4, Qt::SolidLine));
                painter.drawLine(280, 300, 580, 300); // горизонтальная ось
                painter.drawLine(430, 300, 430, 300 - 20 - 30 * numRect); // вертикальная ось
                painter.setPen(Qt::black);
            }

        for(int i = 0; i != numRect; i++)
        {
            switch (i)
            {
                    case 0: painter.setBrush(Qt::red); break;
                    case 1: painter.setBrush(QColor(255, 165, 0)); break; //orange
                    case 2: painter.setBrush(Qt::yellow); break;
                    case 3: painter.setBrush(Qt::green); break;
                    case 4: painter.setBrush(Qt::cyan); break;
                    case 5: painter.setBrush(Qt::blue); break;
                    case 6: painter.setBrush(Qt::magenta); break;
             }
            rect.setRect(290 + 20 * i, 270 - 30 * i, 280 - 40 * i, 30);
            painter.drawRect(rect);
        }
}


вот так нарисовал пирамиду, потом хочу нажать кнопку "Start Game!", при этом все элементы с этого окна должны исчезнуть.
Раскрывающийся текст
for(int i = 0; i != tower1; i++)
        {
            switch (i)
            {
                    case 0: painter.setBrush(Qt::red); break;
                    case 1: painter.setBrush(QColor(255, 165, 0)); break; //orange
                    case 2: painter.setBrush(Qt::yellow); break;
                    case 3: painter.setBrush(Qt::green); break;
                    case 4: painter.setBrush(Qt::cyan); break;
                    case 5: painter.setBrush(Qt::blue); break;
                    case 6: painter.setBrush(Qt::magenta); break;
             }
            rect.setRect(10 + 12 * i, 270 - 30 * i, 180 - 24 * i, 30);
            painter.drawRect(rect);
        }


for(int i = 0; i != tower1; i++)
        {
            switch (i)
            {
                    case 0: painter.setBrush(Qt::red); break;
                    case 1: painter.setBrush(QColor(255, 165, 0)); break; //orange
                    case 2: painter.setBrush(Qt::yellow); break;
                    case 3: painter.setBrush(Qt::green); break;
                    case 4: painter.setBrush(Qt::cyan); break;
                    case 5: painter.setBrush(Qt::blue); break;
                    case 6: painter.setBrush(Qt::magenta); break;
             }
            rect.setRect(10 + 12 * i, 270 - 30 * i, 180 - 24 * i, 30);
            painter.drawRect(rect);
        }

void hantower_graph3::Game()
{
    start->setVisible(false);
    lcd->setVisible(false);
    towheight->setVisible(false);
    
    tmp = numRect;
    numRect = 0;
    tower1 = tmp;
    update();
}


окончательно всё прорисовывается после любого действия: нажать крестик закрытия программы или меню "пуск". хотелось бы рисовалось всё сразу.

Раскрывающийся текст
void hantower_graph3::paintEvent(QPaintEvent * event)
{
        QPainter painter(this);
        painter.setPen(Qt::black);
        painter.setBrush(QBrush(Qt::red));
        if(numRect)
            {
                painter.setPen(QPen(Qt::blue, 4, Qt::SolidLine));
                painter.drawLine(280, 300, 580, 300); // горизонтальная ось
                painter.drawLine(430, 300, 430, 300 - 20 - 30 * numRect); // вертикальная ось
                painter.setPen(Qt::black);
            }

        for(int i = 0; i != numRect; i++)
        {
            switch (i)
            {
                    case 0: painter.setBrush(Qt::red); break;
                    case 1: painter.setBrush(QColor(255, 165, 0)); break; //orange
                    case 2: painter.setBrush(Qt::yellow); break;
                    case 3: painter.setBrush(Qt::green); break;
                    case 4: painter.setBrush(Qt::cyan); break;
                    case 5: painter.setBrush(Qt::blue); break;
                    case 6: painter.setBrush(Qt::magenta); break;
             }
            rect.setRect(290 + 20 * i, 270 - 30 * i, 280 - 40 * i, 30);
            painter.drawRect(rect);
        }
}


вот так нарисовал пирамиду, потом хочу нажать кнопку "Start Game!", при этом все элементы с этого окна должны исчезнуть.

Раскрывающийся текст
for(int i = 0; i != tower1; i++)
        {
            switch (i)
            {
                    case 0: painter.setBrush(Qt::red); break;
                    case 1: painter.setBrush(QColor(255, 165, 0)); break; //orange
                    case 2: painter.setBrush(Qt::yellow); break;
                    case 3: painter.setBrush(Qt::green); break;
                    case 4: painter.setBrush(Qt::cyan); break;
                    case 5: painter.setBrush(Qt::blue); break;
                    case 6: painter.setBrush(Qt::magenta); break;
             }
            rect.setRect(10 + 12 * i, 270 - 30 * i, 180 - 24 * i, 30);
            painter.drawRect(rect);
        }


for(int i = 0; i != tower1; i++)
        {
            switch (i)
            {
                    case 0: painter.setBrush(Qt::red); break;
                    case 1: painter.setBrush(QColor(255, 165, 0)); break; //orange
                    case 2: painter.setBrush(Qt::yellow); break;
                    case 3: painter.setBrush(Qt::green); break;
                    case 4: painter.setBrush(Qt::cyan); break;
                    case 5: painter.setBrush(Qt::blue); break;
                    case 6: painter.setBrush(Qt::magenta); break;
             }
            rect.setRect(10 + 12 * i, 270 - 30 * i, 180 - 24 * i, 30);
            painter.drawRect(rect);
        }

void hantower_graph3::Game()
{
    start->setVisible(false);
    lcd->setVisible(false);
    towheight->setVisible(false);
    
    tmp = numRect;
    numRect = 0;
    tower1 = tmp;
    update();
}


окончательно всё прорисовывается после любого действия: нажать крестик закрытия программы или меню "пуск". хотелось бы рисовалось всё сразу.
Причина редактирования: см. справку, указанную в следующем сообщении

Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.1.2025, 0:24