crossplatform.ru

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

> каким способом проще рисовать поверх рисунка, о рисовании в очередной раз
Litkevich Yuriy
  опции профиля:
сообщение 18.1.2008, 11:45
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Хочу сделать графический объект, а внем шкалу заполнения и стрелку указатель заполнения.
выклядеть должно так:

серенькие внутринности должны заливатся начиная снизу, изображая заполнение водой, т.е. это будет не прямоугольник, а полигон.
У меня есть картинки, нарисовал в Inkscape, башенки и стрелочки, хочу их использовать.
Т.к. уровень будет менятся в верх и в низ, нужно чтобы при уменьшении уровня фоновую картинку опять становилось видно, т.е. фон заливки должен поддерживать прозрачность.

Подскажите какими инструментами Qt это лучше делать и может близкий к моей задаче стандартный пример есть, а то я выбрать немогу, их довольно много но все пересматривать не хочется.

И какие подводные камни встретятся, на что болше внимание надо обратить.

Еще коварный момент, стрелочка должна двигаться вдоль кромки, т.е. ее траектория не прямая линия, а ломаная.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
ViGOur
  опции профиля:
сообщение 18.1.2008, 12:51
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Цитата(Litkevich Yuriy @ 18.1.2008, 12:44) *
т.е. нарисовать все програмно? я думал это сложнее чем заливать полигон поверх рисунка.
Примерно вот так:
void testQtGui::paintrect( QPainter &painter, const QRect &rect, QLinearGradient &gradient)
{
    gradient.setColorAt( 0.0, Qt::white);
    gradient.setColorAt( 0.7, Qt::gray);
    gradient.setColorAt( 1.4, Qt::black);

    QBrush brush(gradient);
    painter.setBrush( brush);

    painter.drawRect( rect);
}

void testQtGui::paintEvent ( QPaintEvent * event)
{
    QPainter painter( this);

    QRect rect1( 120, 120, 100,200);
    QLinearGradient gradient1( rect1.left(), rect1.top() + rect1.bottom()/2, rect1.right(), rect1.top() + rect1.bottom()/2);

    QRect rect2( 20, 120, 100,200);
    QLinearGradient gradient2( rect2.right(), rect2.top() + rect2.bottom()/2, rect2.left(), rect2.top() + rect2.bottom()/2);
    
    paintrect( painter, rect1, gradient1);
    paintrect( painter, rect2, gradient2);
}
Это я нарисовал только нижнюю часть, верхняя примерно также... ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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




RSS Текстовая версия Сейчас: 27.1.2023, 3:58