求大侠帮助:QT如何使用QPainter的drawPixmap()函数可以把这个文件绘制到一个QLabel、QPushButton或者其他

求大侠帮助:QT如何使用QPainter的drawPixmap()函数可以把这个文件绘制到一个QLabel、QPushButton或者其他,第1张

如果要把贴到这两个控件上的话都已经有接口函数了setPixmap()setIcon(),

如果非要自己用drawPixmap()来画的话,你就要重载这些控件的paint()函数在paint()函数里面构造一个 painter 用那个painter来画

为了能在QVariant中使用自定义数据类型做,需要使用Q_DECLARE_METATYPE()来向Qt的元系统声明这个自定义类型。如下列所示: struct Player { }; Q_DECLARE_METATYPE(Player);

先上图一张

主要是使用了QPainter的叠加:

[cpp] view plaincopy

pTmpsetCompositionMode(QPainter::CompositionMode_Source);

pTmpfillRect(QRect(0, 0, paintw, rtTextheight()), QBrush(Qt::white));

pTmpfillRect(QRect(0, 0, mPrecent, rtTextheight()), QBrush(Qt::blue));

pTmpsetCompositionMode(QPainter::CompositionMode_DestinationIn);

pTmpdrawImage(0, 0, pmMask);

pTmpsetCompositionMode(QPainter::CompositionMode_DestinationOver);

主要函数:

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

{

psetBrush(Qt::darkGray);

pdrawRect(rect());

const QString strLyric = mCurLyricslyric;

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

QPainter pTmp;

QFontMetrics fm(m_ftLyric);

QSize textSize = fmsize(Qt::TextSingleLine, strLyric);

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

int paintw = textSizewidth();

int playedW = textSizewidth()05;

QRect rtText = rect();

//  pTmpsetRenderHints(QPainter::TextAntialiasing, true);

QImage pmMask(paintw, rtTextheight(),QImage::Format_ARGB32);

pmMaskfill(Qt::transparent);

if (pTmpbegin(&pmMask))

{

pTmpsetFont(m_ftLyric);

pTmpsetPen(Qt::black);

pTmpdrawText(pmMaskrect(), strLyric);

}

pTmpend();

QImage pmFG(paintw, rtTextheight(),QImage::Format_ARGB32);

if (pTmpbegin(&pmFG))

{

pTmpsetCompositionMode(QPainter::CompositionMode_Source);

pTmpfillRect(QRect(0, 0, paintw, rtTextheight()), QBrush(Qt::white));

pTmpfillRect(QRect(0, 0, mPrecent, rtTextheight()), QBrush(Qt::blue));

pTmpsetCompositionMode(QPainter::CompositionMode_DestinationIn);

pTmpdrawImage(0, 0, pmMask);

pTmpsetCompositionMode(QPainter::CompositionMode_DestinationOver);

// shadow

pTmpsetFont(m_ftLyric);

pTmpsetPen(QColor(0,0,0,0x80));

pTmpdrawText(pmMaskrect(), strLyric);

}

pTmpend();

pdrawImage(rtTextleft(), rtTexttop(), pmFG);

}

以上就是关于求大侠帮助:QT如何使用QPainter的drawPixmap()函数可以把这个文件绘制到一个QLabel、QPushButton或者其他全部的内容,包括:求大侠帮助:QT如何使用QPainter的drawPixmap()函数可以把这个文件绘制到一个QLabel、QPushButton或者其他、关于Qt中的写屏类 QDirectPainter,该怎么解决、QT编程读取歌词等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9447097.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存