Qt4 如何用图像填充文本;然后是规模和规模;居中(垂直和水平)?

Qt4 如何用图像填充文本;然后是规模和规模;居中(垂直和水平)?,qt4,Qt4,我正在使用Qt4.7。我想: 用图像填充文本(字符,例如“a”) 并希望图像缩放到文本大小(随字体大小的变化而变化) 并希望图像从文本中心垂直和水平居中 当对一个字符实现这一点时,我希望对一个范围内的许多字符(如:“a'-'h')或在运行时输入的字符串中的字符执行相同的操作 为此,我目前正在采用以下技术: [ bgTextImage.h ] QTextCursor cursor; QTextCharFormat format; QString imageFileName [ bgTextIm

我正在使用Qt4.7。我想:

  • 用图像填充文本(字符,例如“a”)
  • 并希望图像缩放到文本大小(随字体大小的变化而变化)
  • 并希望图像从文本中心垂直和水平居中
  • 当对一个字符实现这一点时,我希望对一个范围内的许多字符(如:“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或其他技术对齐时,它应该居中。
    我觉得这是一个非常业余的方法来完成这项工作,从而寻找更好的或最佳的做法,如果有的话。如果没有,那么至少请建议是否有任何方法可以改进当前流程。

    QPainter有能力进行图像合成(您可以在绘制功能之外使用它)。看起来像是将源图像作为背景,然后与字母图像组合将产生您想要的结果


    我不喜欢只让人们参考文档,但本教程确实有一个非常好的功能(除非您在意,否则请忽略openGL的内容)。

    QPainter能够进行图像合成(您可以在绘制功能之外使用它)。看起来像是将源图像作为背景,然后与字母图像组合将产生您想要的结果


    我不喜欢只让人们参考文档,但本教程确实有一个很好的方法(除非你在意,否则请忽略openGL的内容)。

    谢谢你的回答。这似乎很有希望。我知道,但以前从未用过。我会尝试一下并分享结果。谢谢你的回答。这似乎很有希望。我知道,但以前从未用过。我将尝试一下并分享结果。