Версия для печати темы
Форум на 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)