當前位置:編程學習大全網 - 編程語言 - QT編程讀取歌詞

QT編程讀取歌詞

先上圖壹張.

主要是使用了QPainter的疊加:

[cpp]?view plaincopy

pTmp.setCompositionMode(QPainter::CompositionMode_Source);

pTmp.fillRect(QRect(0,?0,?paintw,?rtText.height()),?QBrush(Qt::white));

pTmp.fillRect(QRect(0,?0,?mPrecent,?rtText.height()),?QBrush(Qt::blue));

pTmp.setCompositionMode(QPainter::CompositionMode_DestinationIn);

pTmp.drawImage(0,?0,?pmMask);

pTmp.setCompositionMode(QPainter::CompositionMode_DestinationOver);

主要函數:

void?testLyrics::DrawLyric(QPainter?&p,?const?QRect&?rt)

{

p.setBrush(Qt::darkGray);

p.drawRect(rect()); ?

const?QString?strLyric?=?mCurLyrics.lyric;

QFont?m_ftLyric(QString::fromLocal8Bit("微軟雅黑"),?24,?QFont::Bold);

QPainter?pTmp;

QFontMetrics?fm(m_ftLyric);

QSize?textSize?=?fm.size(Qt::TextSingleLine,?strLyric);

QRect?textRect(QPoint(0,0),textSize);

int?paintw?=?textSize.width();

int?playedW?=?textSize.width()*0.5;

QRect?rtText?=?rect();

//?pTmp.setRenderHints(QPainter::TextAntialiasing,?true);

QImage?pmMask(paintw,?rtText.height(),QImage::Format_ARGB32);

pmMask.fill(Qt::transparent);

if?(pTmp.begin(&pmMask))

{

pTmp.setFont(m_ftLyric);

pTmp.setPen(Qt::black);

pTmp.drawText(pmMask.rect(),?strLyric);

}

pTmp.end();

QImage?pmFG(paintw,?rtText.height(),QImage::Format_ARGB32);

if?(pTmp.begin(&pmFG))

{

pTmp.setCompositionMode(QPainter::CompositionMode_Source);

pTmp.fillRect(QRect(0,?0,?paintw,?rtText.height()),?QBrush(Qt::white));

pTmp.fillRect(QRect(0,?0,?mPrecent,?rtText.height()),?QBrush(Qt::blue));

pTmp.setCompositionMode(QPainter::CompositionMode_DestinationIn);

pTmp.drawImage(0,?0,?pmMask);

pTmp.setCompositionMode(QPainter::CompositionMode_DestinationOver);

//?shadow

pTmp.setFont(m_ftLyric);

pTmp.setPen(QColor(0,0,0,0x80));

pTmp.drawText(pmMask.rect(),?strLyric);

}

pTmp.end();

p.drawImage(rtText.left(),?rtText.top(),?pmFG);

}

  • 上一篇:查出藍屏代碼,卻不知何意
  • 下一篇:車輛工程專業完整簡歷
  • copyright 2024編程學習大全網