Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Система рисования. Печать _ каким способом проще рисовать поверх рисунка

Автор: Litkevich Yuriy 18.1.2008, 11:45

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

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

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

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

Еще коварный момент, стрелочка должна двигаться вдоль кромки, т.е. ее траектория не прямая линия, а ломаная.

Автор: Litkevich Yuriy 18.1.2008, 12:09

я нашел такой пример "Image Composition Example" возможно он является отправной точкой, там одна картинка поверх другой. и разные способы совмещения.

Автор: ViGOur 18.1.2008, 12:34

А что тебе мешает просто нарисовать эту башню?
Используешь QGradient и не паришься, единственное прийдется попарится с подбором цвета...

Автор: Litkevich Yuriy 18.1.2008, 12:44

Цитата(ViGOur @ 18.1.2008, 15:34) *
А что тебе мешает просто нарисовать эту башню?

т.е. нарисовать все програмно? я думал это сложнее чем заливать полигон поверх рисунка.

Автор: ViGOur 18.1.2008, 12:51

Цитата(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);
}
Это я нарисовал только нижнюю часть, верхняя примерно также... ;)

Автор: Litkevich Yuriy 18.1.2008, 12:59

ОЧЕНЬ даже БОЛЬШОЕ спасибо

Автор: ViGOur 18.1.2008, 13:03

Цитата(Litkevich Yuriy @ 18.1.2008, 11:45) *
Еще коварный момент, стрелочка должна двигаться вдоль кромки, т.е. ее траектория не прямая линия, а ломаная.
С этим разберешься или помочь?

Автор: Litkevich Yuriy 18.1.2008, 13:12

Цитата(ViGOur @ 18.1.2008, 16:03) *
С этим разберешься или помочь?

от подсказки бы не отказался, к стати в "Qt Examples and Demos" их логоитп из двигающихся шариков, они двигаются как раз по траектории, только гдеб такой исходничек глянуть?

Автор: ViGOur 18.1.2008, 14:23

Цитата(Litkevich Yuriy @ 18.1.2008, 13:12) *
в "Qt Examples and Demos" их логоитп из двигающихся шариков, они двигаются как раз по траектории, только гдеб такой исходничек глянуть?
Ищи в example, там подписано в каком разделе и как называется пример.

А стрелку нужно двигать по мнимо нарисованной линии вдоль водонапорной башни. :)
Вроде того, что проводишь линию, для наглядности тестирования можешь ее сначала нарисовать, а потом не рисуя по ней двигаешь и все. :)

Автор: Litkevich Yuriy 18.1.2008, 17:29

Цитата(ViGOur @ 18.1.2008, 17:23) *
щи в example, там подписано в каком разделе и как называется пример

это не пример, тот что с логотипом, это типа заставки у них, врядли исходник есть, штуковина прикольная ее двигать можно, упираясь в границу окна она сплющивается!

Цитата(ViGOur @ 18.1.2008, 17:23) *
а потом не рисуя по ней двигаешь и все

про это-то и хотел как один объект привязать к другому, чтоб не руками. Может уже какой либо функционал есть

Автор: ViGOur 18.1.2008, 17:49

Цитата(Litkevich Yuriy @ 18.1.2008, 17:29) *
это типа заставки у них, врядли исходник есть
Ну ты это ведь откомпилил! ;)
Смотри в: %QTDIR%\demos\qtdemo там исходники найдешь... ;)

Цитата(Litkevich Yuriy @ 18.1.2008, 17:29) *
про это-то и хотел как один объект привязать к другому, чтоб не руками. Может уже какой либо функционал есть
Будет время набросаю пример...

Автор: Litkevich Yuriy 18.1.2008, 17:51

Цитата(ViGOur @ 18.1.2008, 20:49) *
Ну ты это ведь откомпилил!

Да похоже что не я, эта штука пускается так:
%QTDIR%/bin/qtdemo.exe

Автор: ViGOur 18.1.2008, 18:08

Цитата(ViGOur @ 18.1.2008, 17:49) *
Смотри в: %QTDIR%\demos\qtdemo там исходники найдешь... ;)

Автор: Litkevich Yuriy 18.1.2008, 18:17

точно, спасибо

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)