Russian Qt Forum

Qt => Общие вопросы => Тема начата: SektorCT от Июль 07, 2016, 13:23



Название: Нарисовать кольцо с помощью paint
Отправлено: SektorCT от Июль 07, 2016, 13:23
Всем привет.
У меня с помощью QPainter рисуются круги.
Код:
void CircleTimer::paint(QPainter *painter)
{
    //Рисуем обьект таймер
    QBrush  brush(backgroundColor_);    //Цвет верхнего фона на котором отображается время
    QBrush  brushActive(borderActiveColor_);
    QBrush  brushNonActive(borderNonActiveColor_);
    QBrush  brushHours(borderHoursColor_);
    QBrush  brushMinutes(borderMinutesColor_);
    QBrush  brushSpacer(spacerCircleColor_);

    painter->setPen(Qt::NoPen);
    painter->setRenderHints(QPainter::Antialiasing, true);

    painter->setBrush(brushNonActive);
    painter->drawEllipse(boundingRect().adjusted(1,1,-1,-1));

    painter->setBrush(brushHours);      //Рисуем круг для отображения часов
    painter->drawPie(boundingRect().adjusted(1, 1, -1, -1), 90 * 16, angleOfRotationFull_ * 16);

    painter->setBrush(brushNonActive);
    painter->drawEllipse(boundingRect().adjusted(10,10,-10,-10));

    painter->setBrush(brushSpacer);     //Рисуем круг для отображения промежутка между активными облостями
    painter->drawPie(boundingRect().adjusted(10, 10, -10, -10), 90 * 16, angleOfRotation_ * 16);

    painter->setBrush(brushNonActive);
    painter->drawEllipse(boundingRect().adjusted(14,14,-14,-14));

    painter->setBrush(brushMinutes);      //Рисуем круг для отображения минут
    painter->drawPie(boundingRect().adjusted(14, 14, -14, -14), 90 * 16, angleOfRotation_ * 16);

    painter->setBrush(brush);   //Основной круг, он рисуется поверх остальных
    painter->drawEllipse(boundingRect().adjusted(18, 18, -18, -18));
}

Получается что рисуется круг один на другом, при определенных условиях со временем верхний круг перериосывается.
А вот теперь вопрос, можно ли подобным способом но нарисовать не круги а кольца? То есть так же 2 кольца одно на другом.
В данном коде рисуются 2 круга для общего времени, 2 круга для минуты, еще 2 для промежутка между ними и самый верхний где отображается время в цифрах.
Заранее благодарю за помощь.


Название: Re: Нарисовать кольцо с помощью paint
Отправлено: GreatSnake от Июль 07, 2016, 13:28
Код
C++ (Qt)
QPainter::setBrush( Qt::NoBrush );


Название: Re: Нарисовать кольцо с помощью paint
Отправлено: SektorCT от Июль 07, 2016, 13:41
Код
C++ (Qt)
QPainter::setBrush( Qt::NoBrush );

А можно попросить чуть более развернутый ответ?) Я еще не все хорошо знаю в Qt)
Из того что я кинул могли бы маленький пример сделать?
Или может для такого решения какой то лучшйи есть враиант?


Название: Re: Нарисовать кольцо с помощью paint
Отправлено: ssoft от Июль 07, 2016, 14:22
Для отображения колец можно использовать QPainterPath и Qt::FillRule.


Название: Re: Нарисовать кольцо с помощью paint
Отправлено: SektorCT от Июль 07, 2016, 14:28
Для отображения колец можно использовать QPainterPath и Qt::FillRule.

Мне не нужно как вы написали отображенеи колец. Мне нужно именно нарисовать их. То есть если я нарисую польцо то поставив его куда то по центру не будет перекрыватся чем то нарисованным а будет то что расположено под ним у предка.
А может я прсот овас не так понял(


Название: Re: Нарисовать кольцо с помощью paint
Отправлено: GreatSnake от Июль 07, 2016, 15:02
Из того что я кинул могли бы маленький пример сделать?
Код
C++ (Qt)
painter->setBrush(Qt::NoBrush);
painter->setPen(backgroundColor_ /* or other */);
painter->drawEllipse(boundingRect().adjusted(18, 18, -18, -18));


Название: Re: Нарисовать кольцо с помощью paint
Отправлено: SektorCT от Июль 07, 2016, 17:45
Код
C++ (Qt)
painter->setBrush(Qt::NoBrush);
painter->setPen(backgroundColor_ /* or other */);
painter->drawEllipse(boundingRect().adjusted(18, 18, -18, -18));
[/quote]

Спасибо, в принципе с этим понятно, это должен быть круг котоырй идет под другим. А вот как заменить тогда эту строку
painter->drawPie(boundingRect().adjusted(14, 14, -14, -14), 90 * 16, angleOfRotation_ * 16);
Веть с ней и происходит работа при перерисовки. Но это я именно рисую полный круг.


Название: Re: Нарисовать кольцо с помощью paint
Отправлено: SektorCT от Июль 07, 2016, 18:08
Вообще я вот это пытаюсь реализовать. Думаю тут по скрину будет понятно.
http://picpaste.com/_______________________________2016-07-07_17-06-37-acsomWrb.png (http://picpaste.com/_______________________________2016-07-07_17-06-37-acsomWrb.png)