Как заполнить текст изображением;затем масштаб и центр (вертикально и горизонтально)? - PullRequest
1 голос
/ 19 марта 2012

Я использую Qt 4.7.Я хочу:

  1. заполнить текст (символ, например, 'A') изображением
  2. и хочу, чтобы это изображение масштабировалось до размера текста (изменяется с изменением вразмер шрифта)
  3. и хотите, чтобы изображение располагалось по центру по вертикали и горизонтали от центра этого текста.

enter image description here

Когда это достигается за одинсимвол, я хочу сделать то же самое для многих символов в диапазоне (например: 'a' - 'h') или символов в строке, введенной во время выполнения.

Для этого в настоящее время я использую этотехника:

[ bgTextImage.h ]
QTextCursor cursor;
QTextCharFormat format;
QString imageFileName

[ bgTextImage.cpp ]
cursor = ui->textEdit->textCursor();
QPixmap pic(imageFileName);
QFontMetrics fontMetrics(format.font());
QSize fMSize = fontMetrics.size(0, "A", 0, 0);
QPixmap newPixmap = pic.scaled(fMSize, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation);

if(newPixmap.width() > fMSize.width())
{
    int x = (newPixmap.width() - fMSize.width())/2;
    newPixmap = newPixmap.copy(x, newPixmap.rect().y(), fMSize.width(), fMSize.height());
}

if(newPixmap.height() > fMSize.height())
{
    int y = (newPixmap.height() - fMSize.height())/2;
    newPixmap = newPixmap.copy(newPixmap.rect().x(), y, fMSize.width(), fMSize.height());
}

format.setForeground(QBrush(newPixmap));
format.setTextOutline(QPen(borderColor, ui->spinBoxWidth->value()));

ui->textEdit->clear();
cursor.insertText(text, format);

Я получаю результаты, но изображение не центрируется должным образом, как это должно быть при выравнивании с помощью CSS или других методов.Я чувствую, что это очень любительский подход к выполнению этой работы, и, следовательно, поиск лучшей или лучшей практики, если таковая имеется.Если нет, то, по крайней мере, предложите, если есть какой-либо способ улучшить текущий процесс.

1 Ответ

1 голос
/ 28 марта 2012

QPainter имеет возможность создавать композиции изображений (и вы можете использовать их вне функции рисования). Похоже, что QPainter :: CompositionMode_SourceOver с исходным изображением в качестве фона, а затем объединение с изображением вашей буквы даст желаемый результат.

Я ненавижу просто направлять людей к документации, но у учебника есть действительно хороший пример (игнорируйте материал openGL, если вас это не интересует).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...