@Mercury13
Программист на «си с крестами» и не только

Можно ли перекрасить иконку без внутреннего API Qt?

Опять-таки задача: перевод иконок в HD. Где-то рисуем программно через QIconEngine, где-то SVG.

Самодельный QIconEngine вперемешку с SVG даёт разностилицу в определённых компонентах (например, QComboBox). Я бы вообще эти иконки не перекрашивал, но проще перекрасить свои, чем отключить перекрашивание SVG.

Обнаружился код из иконочного SVG-плагина:
QPixmap* workingPix;  // задел под кэширование
. . .
// Не забудьте прикрыть все QPainter’ы!
if (qobject_cast<QGuiApplication*>(QCoreApplication::instance())) {
    if (mode != QIcon::Normal) {
        const QPixmap generated = QGuiApplicationPrivate::instance()->applyQIconStyleHelper(mode, *workingPix);
        if (!generated.isNull()) {
            *workingPix = generated;
        }
    }
}

Код страшный, но что взамен?
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
@Mercury13 Автор вопроса
Программист на «си с крестами» и не только
Прямо из исходников applyQIconStyleHelper…
if (mode != QIcon::Normal) {
    QStyleOption option(0);
    option.palette = QGuiApplication::palette();
    const QPixmap generated = QApplication::style()->generatedIconPixmap(mode, *workingPix, &option);
    if (!generated.isNull()) {
        *workingPix = generated;
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы