LINUX.ORG.RU

Qt5 QPainter и сглаживание

 


0

1

Все привет!

Когда программа получает сообщение по сокету, необходимо в углу иконки приложения нарисовать кружок и в центре кол-во новых сообщений.

Делаю так

    int count = get_new_messages_count();
    if(count) {
        QPixmap     pixmap(":/general/app_icon");
        QPainter    painter(&pixmap);
        QFont       font;
        QRect       rect;

        rect.setRect(pixmap.width() - 12, 0, 12, 12);
        painter.setRenderHint(QPainter::Antialiasing, true);
        painter.setRenderHint(QPainter::TextAntialiasing, true);
        font = painter.font();
        font.setPixelSize(7);
        painter.setFont(font);
        painter.setBrush(QColor(240, 58, 87));
        painter.setPen(Qt::NoPen);
        painter.drawEllipse(rect);
        painter.setPen(Qt::white);
        painter.drawText(rect, Qt::AlignCenter, QString::number(count));
        setWindowIcon(QIcon(pixmap));
    }
    else {
        setWindowIcon(QIcon(":/general/app_icon"));
    }

Иконка приложения в формате ico, залита в ресурсы. В меню «Пуск» отображается 16х16. Когда сообщений нет (т.е. я не рисую поверх иконки) иконка отображается отлично, однако, когда я рисую поверх нее круг с цыфрой, то новая иконка получается какая-то «пиксельная» (видно, что нет никакого сглаживания). Кто что может сказать, за раннее спасибо

1. В png переводить иконку пробовал? Зачем *.ico? Оно же кривое всегда.
2. Хотелось бы скриншотов.

EXL ★★★★★
()
Ответ на: комментарий от EXL

только что пробовал с png, залил аж 1024х1024, тоже самое... Забыл еще упоминуть, что на exe файл устанавливается иконка (тот самый .ico) стандартным способом Qt (через rc файл). Вот примеры норм плохо

energyclab
() автор топика
Ответ на: комментарий от EXL

Если ты имеешь ввиду, что мне надо не рисовать собственный круг а брать иконку, то, да, я знаю это. У меня была иконка, но с ней как раз и начались эти пиксели, далее я просто попробовал круг нарисовать средствами qt. Вообще странно, что у меня эти пиксели появились...

energyclab
() автор топика
Ответ на: комментарий от energyclab

Нет, я вовсе не имею это ввиду.

Тебе нужно использовать QtWinExtras и его фичи, если хочешь нормальную реализацию подобного функционала.

Изменять иконку окна каждый раз при получении события не нужно. Нужно крепить кружочек с цифрой иконкой-оверлеем в QWinTaskbarButton. Так правильнее. Скомпиль эти примеры и посмотри, как оно выглядит.

EXL ★★★★★
()
Ответ на: комментарий от EXL

[qoute] QtWinExtras

Спасибо за наводку, что то я не видел этого

energyclab
() автор топика
Ответ на: комментарий от EXL

Вообще я что пропустил такую штуку, сейчас примеры и overview посмотрел, не знал, что так можно, спасибо еще раз

energyclab
() автор топика

Если иконка - это .ico, то внутри может быть несколько картинок разных размеров. Вызывай QIcon::pixmap с нужным размером, чтобы получить QPixmap, на котором будешь рисовать.

unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

Спасибо, именно это до меня только и дошло, хотел было отписать решение проблемы...а тут уже за меня постарались...

energyclab
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.