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

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

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

Сообщений: 229


Просмотр профиля
« : Июль 09, 2016, 13:32 »

Всем привет.
У меня с помощью paint рисуются круги, с начала drawEllipse а потмо поверх drawPie который пересчитывается в зависимости от времени и перерисовывается.
Я пытаюсь это реализовать путем не зарисовки кругов а именно кольцами. То есть центр не будет зарисовыватся а только так сказать границы.
Это то что у меня реализованно.
Код:
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));
}

А здесь косочек кода который мне посоветовали но с ним ничего я в реализвации а точнее замене не смог сделать.
Код:
painter->setBrush(Qt::NoBrush);
painter->drawPie(boundingRect().adjusted(14, 14, -14, -14), 90 * 16, angleOfRotation_ * 16);

painter->setBrush(Qt::NoBrush);
painter->setPen(backgroundColor_);
painter->setRenderHints(QPainter::Antialiasing, true);
painter->drawEllipse(boundingRect().adjusted(18, 18, -18, -18));

Буду благодарен за помощь с этим вопросом.
Записан
Bepec
Гость
« Ответ #1 : Июль 09, 2016, 21:13 »

А что не получается то?
Записан
SektorCT
Частый гость
***
Offline Offline

Сообщений: 229


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

А что не получается то?

Я не пойму как обходится если есть одни круг
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);

И в зависимости от пересчета времени вторйо перерисовывается и мы поулчаем эфект.

А как этого добится если не кругами рисовать? Ну и само собою толщину получить?
Так как в моем примере что я накидал там мы ширину получаем за счет нарисованного сверху круга диаметрмо меньшего размера.
Записан
Bepec
Гость
« Ответ #3 : Июль 09, 2016, 23:09 »

Не пойму чего вы хотите.
Что вы в результате хотите то получить?


Если не хотите рисовать кругами, рисуйте попиксельно. Но это в любом случае получится круг как бы.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


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

Вот это, похоже, автору надо: https://sourceforge.net/projects/qroundprogressbar/
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
SektorCT
Частый гость
***
Offline Offline

Сообщений: 229


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

Вот это, похоже, автору надо: https://sourceforge.net/projects/qroundprogressbar/

Да, вот думаю что Donut Style или Line Style это как раз то что нужно. Только мне нужно получается 2 получить.
Вот кидаю картинку, тут видно чт оя хочу поулчить.
http://picpaste.com/_______________________________2016-07-07_17-06-37-5TgPriCK.png
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #6 : Июль 10, 2016, 01:37 »

ну там исходники есть, так что аналогично делайте второй кружок.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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