Russian Qt Forum
Ноябрь 23, 2024, 23:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Нарисовать кольцо с помощью paint  (Прочитано 6261 раз)
SektorCT
Частый гость
***
Offline Offline

Сообщений: 229


Просмотр профиля
« : Июль 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 для промежутка между ними и самый верхний где отображается время в цифрах.
Заранее благодарю за помощь.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Июль 07, 2016, 13:28 »

Код
C++ (Qt)
QPainter::setBrush( Qt::NoBrush );
Записан

Qt 5.11/4.8.7 (X11/Win)
SektorCT
Частый гость
***
Offline Offline

Сообщений: 229


Просмотр профиля
« Ответ #2 : Июль 07, 2016, 13:41 »

Код
C++ (Qt)
QPainter::setBrush( Qt::NoBrush );

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

Сообщений: 584


Просмотр профиля
« Ответ #3 : Июль 07, 2016, 14:22 »

Для отображения колец можно использовать QPainterPath и Qt::FillRule.
Записан
SektorCT
Частый гость
***
Offline Offline

Сообщений: 229


Просмотр профиля
« Ответ #4 : Июль 07, 2016, 14:28 »

Для отображения колец можно использовать QPainterPath и Qt::FillRule.

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

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Июль 07, 2016, 15:02 »

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

Qt 5.11/4.8.7 (X11/Win)
SektorCT
Частый гость
***
Offline Offline

Сообщений: 229


Просмотр профиля
« Ответ #6 : Июль 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);
Веть с ней и происходит работа при перерисовки. Но это я именно рисую полный круг.
Записан
SektorCT
Частый гость
***
Offline Offline

Сообщений: 229


Просмотр профиля
« Ответ #7 : Июль 07, 2016, 18:08 »

Вообще я вот это пытаюсь реализовать. Думаю тут по скрину будет понятно.
http://picpaste.com/_______________________________2016-07-07_17-06-37-acsomWrb.png
« Последнее редактирование: Июль 07, 2016, 18:10 от SektorCT » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.112 секунд. Запросов: 23.