qt文字光晕效果的一种实现
2012-02-19 22:03
1801 查看
直接把我qtcn的文章贴过来了。
目前只实现了文字外面有单一颜色轮廓的效果,那种渐变发光的效果还不知道如何实现。
计算绘制所有文字所需的尺寸
图片边缘留空白
addText前面的参数是文字基线的位置
addText会把加入的文字当成一行,无视换行符,所以要一行一行加入,这也是前面用QStringList的原因.
先填充文字轮廓里的区域,然后在此区域里绘制文字,于是就有了类似光晕的效果了.
这里光晕的颜色去文字的反色淡一点的颜色
准备绘制光晕
绘制里面的文字
最后来看下效果图,我在做天气信息显示时用到的
目前只实现了文字外面有单一颜色轮廓的效果,那种渐变发光的效果还不知道如何实现。
QStringList text_lines = ......; QString text = weather_lines.join("n");
计算绘制所有文字所需的尺寸
QFont f; f.setFamily(mFontName); f.setPixelSize(mFontSize); f.setWeight(QFont::Black); QFontMetrics fm(f); int textflags = Qt::AlignLeft | Qt::TextExpandTabs; QSize textsize = fm.size(textflags, text);
图片边缘留空白
int margin = 8; textsize.setWidth(textsize.width() + 2*margin); textsize.setHeight(textsize.height() + 2*margin);
addText前面的参数是文字基线的位置
addText会把加入的文字当成一行,无视换行符,所以要一行一行加入,这也是前面用QStringList的原因.
QPainterPath pp(QPointF(margin, margin)); qreal px = margin, py = margin + fm.ascent(); foreach(const QString& line, text_lines) { pp.addText(px, py, f, line); py += fm.lineSpacing(); }
先填充文字轮廓里的区域,然后在此区域里绘制文字,于是就有了类似光晕的效果了.
QPainterPathStroker pps; pps.setCapStyle(Qt::RoundCap); //pps.setJoinStyle(Qt::MiterJoin); pps.setWidth(3); QPainterPath path = pps.createStroke(pp).united(pp).simplified();
这里光晕的颜色去文字的反色淡一点的颜色
QColor glow_color = QColor(255-mFontColor.red(), 255-mFontColor.green(), 255-mFontColor.blue()).lighter(168);
准备绘制光晕
QPixmap textpixmap(textsize); textpixmap.fill(QColor(0, 0, 0, 0)); QPainter p(&textpixmap); p.setFont(f); p.fillPath(path, glow_color); p.setPen(glow_color.lighter(88)); p.drawPath(path);
绘制里面的文字
p.setPen(mFontColor); p.drawText(QRect(margin, margin, textpixmap.width(), textpixmap.height()), textflags, text); p.end();
最后来看下效果图,我在做天气信息显示时用到的
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/10/80247b397a72773fd20eb1c1462a58b0.gif)
相关文章推荐
- QML实现文字带光晕效果
- Qt实现卡拉OK文字逐渐变色效果
- Android中使用TextView实现文字跑马灯效果
- 文字全屏化和动画效果的实现
- jquery实现多行文字图片滚动效果
- JS实现的新浪微博大厅文字内容滚动效果代码
- RadioButton布局图片+文字 实现tabhost效果
- Qt中无标题窗口实现拖动效果(Windows平台)
- 一种基于Qt的可伸缩的全异步C/S架构服务器实现(六) 整合各个模块实现功能
- CSS伪类实现中间文字两边横线效果
- CSS3实现文字波浪线效果示例代码
- Pycharm + PyQt5 + QtDesigner实现通过Qtdesigner添加QScrollArea,在代码中添加控件实现滚动效果
- 分享一个HTML5画布实现的超酷文字弹跳球效果
- js实现input框文字动态变换显示效果
- VB实现文字“闪入”显示的特殊效果
- Android自定义View之实现一个动态的文字闪动效果
- Qt使用QGraphicsView实现滑动窗体效果
- 用css滤镜实现的文字描边效果的代码
- 一直苦恼于找不到获取系统默认的UserAgent的方法,今天偶然想到一种方法,可实现效果
- CSS3动画:流彩文字效果+图片模糊效果+边框伸展效果实现