qt实现QLabel上显示的文字有描边

qt实现文字描边

  • 效果图
    • 开发环境
      • 项目示例
        • 综述

效果图

此程序运行的效果。
在这里插入图片描述

开发环境

1.关于我的开发环境,我目前有点迷惑,我的QtCreator中帮助-》关于QtCreator,得到如下所示:
在这里插入图片描述
但是我的安装包上却写着5.12.9在这里插入图片描述
我的理解就是qt版本是5.12.9,但是QtCreator是基于Qt5.14.2的。不知道如此理解对否。
关于我的开发环境,我就是在上述QtCreator4.12.2上做的开发,且为debug模式下运行的程序,创建的项目是以QDialog为基类的应用程序。
2.项目的结构如下图所示:
在这里插入图片描述

项目示例

下面是所有的项目代码:
main.cpp

#include "dialog.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Dialog w;w.show();return a.exec();
}

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include "fontoutlinelabel.h"QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACEclass Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();private:Ui::Dialog *ui;FontOutLineLabel *m_label;
};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{ui->setupUi(this);QFont fontUi;fontUi.setFamily("黑体");fontUi.setPixelSize(35);ui->label->setFont(fontUi);ui->label->setText("hudfhuhus会知道凤凰湖");int x = 50,y = 35;ui->label->setStartPos(x,y);ui->label->setFontOutLineColor(QColor(255,0,0));ui->label->setFontOutLineWidth(3);ui->label->setFontContentColor(QColor(Qt::blue));m_label = new FontOutLineLabel(this);m_label->setObjectName(QString::fromUtf8("labelCustom"));m_label->setText("hello world!!");QFont font;font.setFamily("Arial");font.setPixelSize(40);m_label->setFont(font);int a = 0, b = 40;//基准线坐标(x,y)m_label->setStartPos(a,b);m_label->setFontContentColor(QColor(Qt::gray));m_label->setFontOutLineWidth(3);m_label->setFontOutLineColor(QColor(78,45,23));m_label->setGeometry(QRect(10, 0, 450, 200));
}Dialog::~Dialog()
{delete ui;
}

fontoutlinelabel.h

#ifndef FONTOUTLINELABEL_H
#define FONTOUTLINELABEL_H#include <QObject>
#include <QLabel>class FontOutLineLabel : public QLabel
{Q_OBJECT
public:FontOutLineLabel(QWidget *parent=nullptr);void setText(const QString& strText);//设置显示的文本void setFont(const QFont  &font);//设置文本字体void setStartPos(int &x,int &y);//设置字体开始写的起始点void setFontOutLineColor(const QColor & color);//设置字体轮廓线的颜色void setFontOutLineWidth(int wide = 1);//设置字体轮廓线的线宽void setFontContentColor(const QColor &color);//设置字体填充的颜色
protected:void paintEvent(QPaintEvent *) override;private:QColor m_outLineColor;//字体轮廓线颜色QColor m_contentColor;//字体填充颜色int m_fontOutLineWidth;//字体轮廓线的线宽int m_y;//字体起始点的横坐标int m_x;//字体起始点的纵坐标QFont m_font;//字体QString m_text;//显示文本
};#endif // FONTOUTLINELABEL_H

fontoutlinelabel.cpp

#include "fontoutlinelabel.h"
#include <QPainter>
#include <QStyleOption>FontOutLineLabel::FontOutLineLabel(QWidget *parent):QLabel(parent)
{m_outLineColor = QColor(60,179,113);m_contentColor = QColor(Qt::white);m_fontOutLineWidth = 2;m_y =  0;m_x = 0;m_font.setFamily("Arial");m_font.setPixelSize(35);m_text = QString("");
}void FontOutLineLabel::setText(const QString &strText)
{m_text = strText;
}void FontOutLineLabel::setFont(const QFont &font)
{m_font = font;
}void FontOutLineLabel::setStartPos(int &x, int &y)
{m_x = x;m_y = y;
}void FontOutLineLabel::setFontOutLineColor(const QColor &color)
{m_outLineColor = color;
}void FontOutLineLabel::setFontOutLineWidth(int wide)
{m_fontOutLineWidth = wide;
}void FontOutLineLabel::setFontContentColor(const QColor &color)
{m_contentColor = color;
}void FontOutLineLabel::paintEvent(QPaintEvent *event)
{QPainter painter(this);QStyleOption opt;opt.initFrom(this);style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);QPainterPath path;path.addText(m_x, m_y, m_font, m_text);QPen pen;pen.setColor(m_outLineColor);pen.setStyle(Qt::SolidLine);pen.setWidth(m_fontOutLineWidth);painter.setRenderHint(QPainter::Antialiasing);painter.strokePath(path, pen);painter.fillPath(path, QBrush(m_contentColor));QWidget::paintEvent(event);
}

dialog.ui
其ui界面的整体布局如下图所示:
在这里插入图片描述

综述

整个工程中Dialog是对FontOutLineLabel类的应用,而FontOutLineLabel类是QLabel文字描边的实现类。main.cpp没有做任何的更改,Dialog类的构造函数中有两个FontOutLineLabel类对象,一个是通过ui界面拖拉控件QLabel后提升而来,一个是创建FontOutLineLabel类的指针从而只想该类的对象。
参考博文:
https://blog.csdn.net/piaoguo60/article/details/107174934
另外读者也可以参考博文:
https://blog.csdn.net/douzhq/article/details/104335491?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ETopBlog-1.topblog&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ETopBlog-1.topblog&utm_relevant_index=1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kappa和lambda对比 | 程序员硬核评测

戳蓝字“CSDN云计算”关注我们哦&#xff01;程序员硬核评测&#xff1a;客观、高效、不说软话。无论是技术质量、性能水平&#xff0c;还是工具筛选&#xff0c;一测便知&#xff01;作者&#xff1a;浪尖转载&#xff1a;Spark学习技巧首先我们会详细的讲解这两种架构&#x…

git提交代码的时候出现fatal: Could not read from remote repository.

引言 当在git使用中出现这样的提示的解决方法。 解决方法 我采用重新获取ssh-key的方法&#xff0c;关于具体的操作&#xff0c;可以查看博文&#xff1a; https://www.cnblogs.com/janve/p/10946630.html。 实际上具体的步骤&#xff0c;就是下面几句&#xff1a; ssh-key…

边缘计算精华问答 | 火爆的边缘计算为何兴起?

戳蓝字“CSDN云计算”关注我们哦&#xff01;随着物联网在全球各行业中越来越普遍&#xff0c;企业们发现了云计算的不足&#xff0c;它不是解决所有问题的答案。此外&#xff0c;如果只有云计算&#xff0c;物联网项目不能充分发挥其潜力&#xff0c;特别是在实时分析&#xf…

腾讯优图贾佳亚:当AI进入产业应用时代时,计算机视觉技术更应该服务于人才对!...

戳蓝字“CSDN云计算”关注我们哦&#xff01;从移动支付的自动贩卖机到刷脸支付的智能货柜&#xff1b;从亲自到柜台验证到人脸核身远程开卡&#xff1b;从排队买票、排队进门的糟糕旅游体验到提前预约&#xff0c;刷脸入园的智慧旅游……在昆明的腾讯全球数字生态大会AI 分论坛…

使用AWS CloudWatch 调优Lambda函数 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;译者&#xff1a;风车牛马整理&#xff1a;刘丹Kyle Galbraith&#xff0c;高级软件工…

ARM到底是一家什么样的公司?

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;小枣君转自&#xff1a;鲜枣课堂这两天&#xff0c;一家叫做ARM的公司…

Visual Studio中输入英文会在字母之间自动增加空格

现象 不小心按了什么键之后字母之间增加了空格&#xff0c;如下面&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.cn/b211b973b9c8470fae4402161ddb3935.png 解决办法 针对上面图片中显示的这种英文字母之间出现空格&#xff0c;是输入法出现了问题。恢复的…

C中指针与成员变量生命周期的示例

引言 本文针对于碰到的指针做一些记录。详见下面的示例。 示例一 返回char类型指针&#xff0c;使用局部静态数组。 #include <stdlib.h>char * GetTestMemory(void) {static char p[] "hello world";printf("src%x\n",p);//数组首地址printf(&…

从Spark Streaming到Apache Flink: 实时数据流在爱奇艺的演进 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;陈越晨转自&#xff1a;高可用架构本文将为大家介绍Apache Flink在爱…

Storm精华问答 | Storm的配置需要注意什么问题?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Apache Storm是一个分布式实时大数据处理系统。Storm设计用于在容错和水平可扩展方法中处理大量数据。它是一个流数据框架&#xff0c;具有最高的摄取率。今天&#xff0c;我们就挑一些Storm的安装配置问题来看看吧。1Q&#xff1a;…

这可能是把策略模式讲的最通俗易懂得文章了!

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;周末无事&#xff0c;窝在家里面看《权力的游戏第八季》&#xff0c;看的很是津津有味…

C++中动态数组实现

实现动态数组动态数组示例代码运行环境运行效果动态数组 动态数组Vector可以动态扩展内存&#xff0c;其采用连续的内存空间&#xff0c;当内存空间不足&#xff0c;便以原来的容量的2倍或者1.5倍成倍的扩展&#xff0c;将原有的数组元素拷贝到新分配的内存空间中&#xff0c;…

华为面试改革,我们该怎么跟进?

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;近日&#xff0c;华为轮值董事长徐直军撰写了《关于公司高端精英类、软件类人才面试方…

C++中单链表的实现

单链表的实现单链表示例代码开发环境运行结果单链表 链表内存空间不一定连续&#xff0c;其扩展性较好。多余的不多说了。该文主要记录单链表的实现&#xff0c;该单链表含有一个非空的头节点。链表的操作实际上是对其指针域与数据域的操作。 示例代码 直接上代码&#xff1…

使用说明_预拌混凝土使用说明

尊敬的客户感谢您使用我公司的混凝土。为保证您的工程质量&#xff0c;我公司根据配制的混凝土性能&#xff0c;参与《预拌混凝土》GB/T14902-2003、混凝土施工有关标准以及工程施工过程中常见问题制定出本说明书和技术交底。敬请认真阅读并按本说明书和技术交底等规定的有关操…

【算法精讲】分享一道很不错的算法题

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;帅地转自&#xff1a;苦逼的码农分享一道leetcode上的题&#xff0c;…

C++中实现Stack

栈的实现栈示例代码开发环境运行结果栈 栈本着先进后出的原则&#xff0c;来存取数据。作为数据结构中的一种&#xff0c;这里不多介绍相关栈。仅以此文记录C中栈的实现&#xff0c;可帮助提升编程能力与对栈的理解。 示例代码 直接上代码。 SeqStack.h #pragma once#defin…

使用码云

使用GitHub时&#xff0c;国内的用户经常遇到的问题是访问速度太慢&#xff0c;有时候还会出现无法连接的情况&#xff08;原因你懂的&#xff09;。 如果我们希望体验Git飞一般的速度&#xff0c;可以使用国内的Git托管服务——码云&#xff08;gitee.com&#xff09;。 和G…

vstar为什么登录不了_一手的闲鱼号,为什么现在闲鱼号一号难求

现在随着闲鱼不断被众人发现是一个新的发财之地&#xff0c;之后便各种有关闲鱼项目的方案是层出不穷&#xff0c;比如闲鱼店群啊&#xff0c;那么一个人顶多只能够拥有几个闲鱼号&#xff0c;那么对于一些想要在闲鱼里面赚取一笔的人是远远不够的&#xff0c;那么自然也就造成…

游戏直播行业真的如你想象般暴利? | Alfred数据室

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;AlfredWu转自&#xff1a;Alfred数据室最近几年游戏直播行业火了&…