如何用图像填充文本;那么规模&中心(垂直和水平)?

时间:2012-03-19 14:57:16

标签: qt4

我正在使用Qt 4.7。我想:

  1. 用图像填充文本(字符,例如'A')
  2. 并希望将该图像缩放到文本大小(随着字体大小的变化而变化)
  3. 并希望图像从该文本的中心垂直和水平居中。
  4. 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 个答案:

答案 0 :(得分:1)

QPainter具有进行图像合成的能力(您可以在绘画功能之外使用它)。似乎QPainter::CompositionMode_SourceOver将源图像作为背景,然后与您的字母图像结合将产生您想要的结果。

我讨厌将人们引向文档,但教程确实有一个非常好的example(除非你关心,否则忽略openGL的东西)。