QT- label实现滚动字幕 (跑马灯)效果 -像素级

基于pyqt5的Qlabel字幕滚动的简单实现方式 实现字幕滚动的好处有以下几点:1.:滚动字幕的字体通常较大,且会滚动,使得用户更轻松地阅读字幕内容,减少了眼睛的疲劳感。2.:对于一些国外电影或电视剧,滚动字幕可以帮助观众更好地理解对话内容。3.:滚动字幕的时间点设置非常灵活,既可以“卡位”,又可以多频次重复滚动,很容易被人们接收到。4.:滚动字幕系统在频道重点剧目和大型活动的宣传推广上可以发挥其特有优势。利用滚动字幕系统进行短信互动直播,其真实、即时的特点使得互动的有效性非常强。 阅读详情
AI摘要

本文详细讲解了如何使用QLabel在Qt中实现文本滚动效果,涉及原理、关键代码片段,并提到了定时器、绘图事件的运用。通过判断字符串宽度是否超过窗口,实现自动滚动字幕功能。


想通过QSS实现更多效果的请搜索QT自带帮助文档 Qt Style Sheets Examples,使用样式表来定制程序界面

原理

在这里插入图片描述

让label字母滚动起来的原理很简单

Created with Raphaël 2.3.0 开始 是否超过this->with宽度 开启定时器,s秒增加一次位移值,调用绘画事件 重载绘画事件,根据位移值生成矩形,在不同位置的矩形上绘制文本 结束 正常显示文本,不滚动 yes no

所以就是这么一个过程:
1,判断字符串的像素宽度是否超过窗体宽度,超过则开启滚动 (主要是开启定时器)
2,定时器固定毫秒去修改位移值left,然后调用绘图事件
3,绘图事件根据left值,生成一个矩形(默认左上角为0,0),然后drawText根据矩形绘画文本。由于left一直在变动,于是矩形也在不停变动,生成的文本也在不停变动,就实现了滚动字幕。
***定时器用的是定时器事件,适合用来处理比较简单的重复任务,具体可以看这里


代码

根据上面的分解,整个流程就很清晰了,public继承QLabel,第一步判断可以先从setText开始

需要注意的是,必须要设置label的窗口最大值。因为是否滚动的关键是判断是否超出this->with,所以this->with不能变动,一变动那触发滚动的阈值也变动了。

//在设置文本、缩放事件两次调用自适应的函数
void label_scroll::setText(const QString &txt)
{
    if(Qt::mightBeRichText(txt))//判断是否为富文本 需要包含<QTextDocument>
        flag = 0;  //0不处理,直接用原本的绘画事件显示
    else
        flag = 1;

    QLabel::setText(txt);
    upateLabelRollingState();// 这个函数就是判断的核心
}

upateLabelRollingState();// 这个函数就是判断是否开启滚动的关键核心,计算文本像素长度和开启定时器

//用来判断label文本是否需要滚动起来,是这块功能的核心
void label_scroll::upateLabelRollingState()
{
    //获取文本大小,小于文本框长度,则无需滚动
    QFont ft = font();// 获取当前字体的格式,里面有文本大小和文本像素大小
    QFontMetrics fm(ft); // 以当前的字体格式为基础

    #if QT_VERSION > QT_VERSION_CHECK(5,11,0)//根据官方文档说明,5.11后使用新的函数
    text_wpixel = fm.horizontalAdvance(text() ); //以当前的字体格式为基础,计算字符串的像素宽度
    #else
    text_wpixel = fm.width(text() ); //同上,低于5.11使用此函数
    #endif

	// 长度超出本身label的像素大小,则开启滚动***关键判断
    if( (text_wpixel > this->width() ) && flag == 1 )
    {
        left = 0; // 清空像素滚动量

        #if QT_VERSION > QT_VERSION_CHECK(5,11,0)//根据官方文档说明,5.11后使用新的函数
        blank = " ";//空格
        blank_wp = fm.horizontalAdvance(blank );//空格的像素宽度,方便后面计算是否到达末尾
        #else
        blank = " ";//空格
        blank_wp = fm.width(blank );//空格的像素宽度
        #endif

        //开启定时器,定时器定时改变滚动量left
        timerId = startTimer(speedt);

    }
    else//关闭文本框滚动
    {
        flag = 0; //关闭
        if(timerId >= 0){
            killTimer(timerId);//关闭定时器
            timerId = -1;
        }
    }

}

开启定时器之后,重载定时器事件timerEvent,负责按时修改位移值left

//定时改位移量,到末尾时改为开头  负责修改当前像素位移值
void label_scroll::timerEvent(QTimerEvent *e)
{
    if(e->timerId() == timerId && isVisible())
    {
        left += spixel;// 每次增加对应像素
        if((left + 20) > (text_wpixel + blank_wp) )// 判断当前宽度是否超过字符串的总宽度,代表到末尾了
            left = 1-( this->width() ); //重新添加,负数代表从最右边开始

        //repaint();//立即触发一次刷新,不会产生冗余,但是耗性能
        update();//不会立马刷新,有可能产生事件冗余,但是节省性能      
        //update和repaint的具体区别,请看QT文档说明
    }

    QLabel::timerEvent(e); // 如果没有进去上面那个滚动判断,则执行默认操作
}

重载绘图事件,根据timerEvent修改的位移值left绘制矩形,再根据矩形位置绘画字符串

//重绘事件,根据位移量left显示文本
void label_scroll::paintEvent(QPaintEvent *e)
{
    if(flag == 0){ // 不处理,直接调用标签的默认函数,适配一般情况
        QLabel::paintEvent(e);
        return;
    }

    QPainter pen(this);
    
    //  获取当前label的矩形大小
    QRect rc = rect();
    rc.setHeight(rc.height() );
    rc.setWidth(rc.width() );

    QString strText = blank + text();// 组合完整文本
    //修改矩形x轴, 由于left在不断变大,setLeft就在不断变小,(0,0)在左上角,固左移
    rc.setLeft(rc.left() - left); 
    
    pen.drawText(rc,Qt::AlignVCenter, strText);//根据给定的矩形坐标,绘制文本
}

完整源码 + 部件提升

.h文件

#ifndef LABEL_SCROLL_H
#define LABEL_SCROLL_H


#include <QDebug>
#include <QLabel>
#include <QTimerEvent>
#include <QPaintEvent>
#include <QTextDocument> //判断富文本用的
#include <QPainter>

// 继承于标签,之后在qt设计师内右键选择"提升" 使得这个继承类控制对应需要滚动的标签
// https://www.kanzhun.com/jiaocheng/517505.html
class label_scroll :public QLabel
{
    Q_OBJECT
public:
    explicit label_scroll(QWidget *parent = nullptr);
    ~label_scroll();

    //自适应函数,判断label文本是否需要滚动起来
    void upateLabelRollingState();

public slots:
    //定时改位移量,到末尾时改为开头  负责修改当前像素位移值left  startTimer开始,killTimer结束
    void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;

    //重绘事件,根据位移量left显示文本
    void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;

    //在设置文本、缩放事件两次调用自适应的函数
    void setText(const QString &txt);

    //设置图片,主要把lt设回0,使其恢复正常的图片显示
    void setPixmap(const QPixmap &pix);

    //窗口变化事件
    void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;

    // 根据给定的数值,修改滚动速度 sp是一次滚动多少像素,st是多少秒触发一次滚动
    void setspeed(int sp=10,int st=300);

private:
    int timerId; //定时器id
    int text_wpixel; //储存的当前label内字符串的像素水平长度

    int speedt;// 多久触发一次滚动
    int spixel;// 一次滚动多少像素

    int left;// 标明当前的像素滚动量

    QString blank;//空格
    int blank_wp;//空格的像素宽度

    int start_scroll;

    uint8_t flag; //判断是否应该开启滚动 0否 1真
};

#endif // LABEL_SCROLL_H

.cpp文件

#include "label_scroll.h"

label_scroll::label_scroll(QWidget *parent):QLabel(parent)
{
    timerId = -1;// 定时器的ID
    text_wpixel = 0; //文本的像素长度

    speedt = 80;// 多久触发一次滚动
    spixel = 10;// 一次滚动多少像素

    //start_scroll = this->width();//保存了窗体最初的宽度,避免窗体变动就不滚动

    flag = 0;//默认不处理
}

label_scroll::~label_scroll()
{
    if(timerId >= 0)
        killTimer(timerId);
}

//在设置文本、缩放事件两次调用自适应的函数
void label_scroll::setText(const QString &txt)
{
    if(Qt::mightBeRichText(txt))//判断是否为富文本
        flag = 0;  //0不处理,直接用原本的绘画事件显示,当属于富文本时使用这个 1左到右 2上到下
    else
        flag = 1;

    QLabel::setText(txt);
    upateLabelRollingState();
}

//设置图片,主要把lt设回0,使其恢复正常的图片显示
void label_scroll::setPixmap(const QPixmap &pix)
{
    flag=0;
    QLabel::setPixmap(pix);
}

//窗口变化事件
void label_scroll::resizeEvent(QResizeEvent *e)
{
    QLabel::resizeEvent(e);
    upateLabelRollingState();
}

// 根据给定的数值,修改滚动速度  sp是一次滚动多少像素,st是多少秒触发一次滚动
void label_scroll::setspeed(int sp,int st)
{
    spixel = sp;
    speedt = st;

    upateLabelRollingState(); // 刷新一次滚动量
}

//用来判断label文本是否需要滚动起来,是这块功能的核心
void label_scroll::upateLabelRollingState()
{
    //获取文本大小,小于文本框长度,则无需滚动
    QFont ft = font();// 获取当前字体的格式,里面有文本大小和文本像素大小
    QFontMetrics fm(ft); // 以当前的字体格式为基础

    #if QT_VERSION > QT_VERSION_CHECK(5,11,0)//根据官方文档说明,5.11后使用新的函数
    text_wpixel = fm.horizontalAdvance(text() ); //以当前的字体格式为基础,计算字体的像素宽度
    #else
    text_wpixel = fm.width(text() ); //以当前的字体格式为基础,计算字体的像素宽度
    #endif

    if( (text_wpixel > this->width() ) && flag == 1 )// **长度或高度超出本身label的像素大小,则开启滚动***关键判断
    {
        left = 0; // 标志当前的像素滚动量

        #if QT_VERSION > QT_VERSION_CHECK(5,11,0)//根据官方文档说明,5.11后使用新的函数
        blank = " ";//空格
        blank_wp = fm.horizontalAdvance(blank );//空格的像素宽度,方便后面计算是否到达末尾
        #else
        blank = " ";//空格
        blank_wp = fm.width(blank );//空格的像素宽度
        #endif

        qDebug()<< "OK!";

        //开启定时器,定时器定时触发滚动效果
        timerId = startTimer(speedt);

    }
    else//关闭文本框滚动
    {
        qDebug()<< "no OK!";
        flag = 0; //关闭
        if(timerId >= 0){
            killTimer(timerId);
            timerId = -1;
        }
    }

}

//定时改位移量,到末尾时改为开头  负责修改当前像素位移值
void label_scroll::timerEvent(QTimerEvent *e)
{
    if(e->timerId() == timerId && isVisible())
    {
        left += spixel;// (0,0)在左上角,每次增加对应像素
        if((left + 20) > (text_wpixel + blank_wp) )// 表示到末尾了
            left = 1-( this->width() ); //重新添加,负数代表从最右边开始

        //repaint();//立即触发一次刷新,不会产生冗余,但是耗性能
        update();//不会立马刷新,有可能产生事件冗余,但是节省性能      
        //update和repaint的区别,请看QT文档说明
    }

    QLabel::timerEvent(e);
}

//重绘事件,根据位移量left显示文本
void label_scroll::paintEvent(QPaintEvent *e)
{
    if(flag == 0){ // 不处理,直接调用标签的默认函数
        QLabel::paintEvent(e);
        return;
    }

    QPainter pen(this);
    //  获取当前label的矩形大小
    QRect rc = rect();
    rc.setHeight(rc.height() /*- 2*/);
    rc.setWidth(rc.width() /*- 2*/);

    QString strText = blank + text();
    rc.setLeft(rc.left() - left); //修改矩形 x轴, 由于left在不断变大,setLeft就在不断变小,(0,0)在左上角,固左移
    pen.drawText(rc,Qt::AlignVCenter, strText);//根据给定的矩形坐标,绘制标签
}

然后在UI设计师里面提升一下需要滚动的label部件即可
在这里插入图片描述


echo 输出彩色字符串:

  • 模板:
echo -e "\e[xx;xxm 你的内容 \e[0m"
  • 解析:
    -e 是echo的转义字符意思。
    \e[xxm xx是数字选项,选择字体属性、颜色、背景色用的,对顺序没有要求

  • 各类数字选项:

背景色:
黑色背景:40
红色背景:41
绿色背景:42
黄色背景:43
蓝色背景:44
洋红背景:45
青色背景:46
白色背景:47

字体颜色:
黑色字体:30
红色字体:31
绿色字体:32
黄色字体:33
蓝色字体:34
洋红字体:35
青色字体:36
白色字体:37

属性
0: OFF
1: 高亮显示
3: 斜体
4: 下划线
5: 闪烁
7: 反色显示
8: 不可见
9: 删除线

echo -e "\e[9;32m  hello \e[0m"  #绿色字体、删除线的hello

常见图片格式的文件标识符

下面是一些常见图片格式,开头固定文件头的标识符,可以用来区分是什么图片:

  • BMP: 0x42 0x4D,即ASCII字符 “BM” 的16进制表示。
  • PNG:0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A 即ASCII字符 “PNG\r\n\x1a\n” 的16进制表示,用于标识PNG文件的开始。
  • JPEG (JPG): 0xFF 0xD8 ,文件结束标记是0xFF 0xD9。
  • GIF: 87a版本 0x47 0x49 0x46 0x38 0x37 0x61 或 89a版本0x47 0x49 0x46 0x38 0x39 0x61,这取决于GIF版本(87a或89a)。这些字节是ASCII字符 “GIF87a” 或 “GIF89a” 的16进制表示。
  • TIFF: 通常是 0x49 0x49 或 0x4D 0x4D,分别对应于Intel和Motorola字节序的TIFF文件。这些字节是ASCII字符 “II” 或 “MM” 的16进制表示。
  • ICO: 0x00 0x00 0x01 0x00

参考文章

QT像素级滚动字幕实现:从paintEvent到平滑动画的完整指南 在桌面应用开发中,控件绘制与动画实现是GUI编程的核心基础。通过重写paintEvent方法,开发者可以深入底层绘图机制,实现对界面元素的像素级精确控制。这种技术原理不仅提升了动画的平滑度与性能,更在信息展示、数据可视化等场景中具有重要价值。本文以QT框架下的滚动字幕(跑马灯)为例,详细解析如何通过自定义QLabel的绘制过程,替代传统的控件移动方案,实现亚像素精度的平滑滚动效果。文章深入探讨了paintEvent事件处理、QPainter绘图工具的使用,以及无缝循环滚动的数学原理,为开发者提供了从基础概念 阅读详情

相关推荐

QT像素级滚动字幕实现:从原理到高性能自定义控件开发

在桌面应用开发中,自定义控件与动画效果是提升用户体验的关键技术。其核心原理在于通过重写绘图事件(paintEvent)与定时器(QTimer)协同,实现对界面元素像素级的精确控制。这项技术的价值在于能够突破标准UI组件的限制,为工业HMI、信息发布系统等对性能和平滑度有极致要求的场景提供定制化解决方案。具体到滚动字幕(跑马灯)效果,它解决了固定显示区域内长文本完整展示的难题。本文以QT框架为例,深入剖析如何利用QPainter进行文本绘制、通过双文本技巧实现无缝循环滚动,并分享在性能优化、抗锯齿处理以及兼容

weixin_33816300的博客 546

QLabel 实现文字循环滚动效果(附上c++源码)

实现文字循环滚动效果

bigger_belief的博客 2601

Qt实现文字滚动

在上面的代码中,我们创建了一个MainWindow类继承自QMainWindow,并添加了一个QLabel控件和一个QTimer定时器作为成员变量。在构造函数中,我们设置了QLabel的初始位置和大小,并连接了定时器的timeout()信号到scrollText()槽函数。在属性编辑器中,将QLabel的文本设置为空字符串,以便后续在代码中动态设置滚动的文本。最后,更新QLabel的文本内容为新的滚动后的文本。以上就是实现文字滚动的完整示例代码。在主窗口的构造函数中,我们还设置了初始的滚动文本和滚动速度。

ZujbMl的博客 982

Qt QLabel 文字滚动 滚动字幕

1.实现效果 做了两种实现方式,蓝色边框是参考网友的代码实现的,红色边框是优化的 2.简述 实现思路1 准备足够显示满宽的字符,每次删除最左边的一个字符,不够显示的时候,在后边追加字符。 实现思路2 画一个宽度是Label宽度+文本宽度的文本框,从x=0开始,每次将文本框的起始位置减1。当一个完整文本宽度被减完之后,重新从x=0开始画。 实现1 #include "CRollLabel.h" #include <QPainter> #include <QDebug> CRollL

我是唐 8757

WAM-2026-06:Kairos【骨架:4B VideoDiT;VLM:Qwen3.5-2B;原生MoT双DiT+FM;数据:数百万小时开放视频+10万小时人类数据;形态:单/双臂+灵巧手+人形】

Learning, Maintaining, and Deploying Control-Sufficient World States Kairos Team学习、维护与部署控制充分的世界状态 Kairos TeamWorld models are becoming a central substrate for Physical AI, yet their current development is differentiating across representational, generative

u013250861的博客 195

QLabel文字滚动显示

封装QLabel实现文字滚动显示,具体使用与QLabel相似,不同之处有说明。

Qt实现像素级平滑滚动字幕:基于paintEvent的自定义绘制方案

在桌面应用开发中,控件内长文本的展示常面临布局与完整性的矛盾,滚动字幕(跑马灯)是常见的解决方案。其核心原理是通过定时器动态更新文本位置,实现视觉上的连续滚动。传统基于几何变换的方法存在像素级精度不足、性能开销大等问题。通过重写paintEvent进行自定义绘制,开发者可直接控制文本渲染的起始坐标,利用浮点偏移量实现亚像素级平滑移动,并结合QElapsedTimer实现帧率无关的匀速动画。这种技术方案在状态栏信息、实时数据流展示等需要高刷新率与视觉流畅度的应用场景中价值显著。本文以Qt框架为例,深入解析了如

weixin_30315723的博客 289

Qt自定义QLabel滚动显示文本文字,label可根据文本长度自动开启滚动显示

自定义QLabel控件,自动判断文本长度与显示框长度的大小,显示框太短,则自动滚动显示,否则正常显示,类似于广告屏的滚动播放效果,qt 5源码,编译测试通过。

Qt开发实现字幕滚动效果

这里也可以调用update()代替scrol(),但使用scroll()会更有效率,因为它只是简单地移动屏幕上已经存在的像素并且只对这个窗口部件的新显示区域(此时,只是一个1像素乘以宽度的像素条)产生一个绘制事件。我们也可以在Ticker的构造函数中完成startTimer()的调用,但是只有在窗口部件实际可见的时候,才有必要保存由Qt产生的定时器事件的那些资源。然后,它使用QWidget::scroll()把窗口部件的内容向左滚动一个像素。定时器的ID通常是非零的,所以可以使用0来表示定时器还没有启动。

shiwei0813的博客 804

Qt控件QLabel实现滚动字幕

windows平台下的Qt界面开发环境中,使用Qlabel实现的字幕滚动效果。资源通过网络上的教程资源整合,不得商用。

Qt 实现的跑马灯效果

基于Qt的跑马灯效果,支持配置文件读取。tcp 设置字体、颜色,大小,内容功能

QT QWidget - 跑马灯

关于前面画了个圆,怎么样也得跑个灯, 只是基于布局创建LED Widget而非 QTableView/QTableWidget;

听我一言的博客 726

零代码构建AI智能体:COZE可视化工作流实战指南

AI智能体(AI Agent)是当前人工智能领域的重要发展方向,它通过模块化设计和工作流驱动,使大语言模型从被动对话转向主动执行。其核心原理在于将复杂的任务分解为可规划、可执行的步骤,并调用外部工具(插件)完成闭环。这一技术价值在于显著降低了自动化流程的开发门槛,让非程序员也能构建实用的数字助手。典型的应用场景包括智能客服、内容自动生成、数据分析和跨系统业务流程自动化。本文以COZE平台为例,深入解析如何通过其直观的可视化界面和丰富的插件生态,像搭积木一样快速搭建如“早安简报生成器”等实用智能体,并分享指令

468

QT 实现跑马灯

背景 应项目需求,需要实现一个体现系统运行状态的类似跑马灯效果一样的控件,跑马灯还是本科电子工艺实习期间焊接电路板的时候接触过,初听要用qt实现这个效果,还觉得挺有意思的。开始是调研,理解了一篇博客分享的点阵LED,开始着手实现,最终实现了一个动态的显示状态的小控件。现分享一个实现该控件的一个简要思路。单个LED的设计完全是借鉴过来的,实现跑马灯的效果,主要的工作体现在灯的放置上,也算是存在一个小小的算法设计,虽然这是一个小功能,但是实现之后还是挺有成就感的,特分享出来,供他人做自定义控件...

u012342051的专栏 2947

FreeRTOS任务调度实战:如何让STM32同时处理温湿度采集、OLED显示和云端通信

本文通过一个基于STM32的物联网终端项目,详细讲解了如何利用FreeRTOS实现多任务调度,同时处理温湿度采集、OLED显示和云端通信。文章深入探讨了任务规划、堆栈分配、信号量与消息队列等核心机制,并重点优化了ESP8266通信任务的非阻塞设计与稳定性,为构建响应迅速、运行可靠的嵌入式系统提供了实战指南。

weixin_29188043的博客 331

禾赛XT16 vs XT32激光雷达实测对比:选16线还是32线?看完这篇不纠结

本文深度评测禾赛XT16与XT32激光雷达的性能差异与应用选择。通过实测数据对比,分析16线与32线激光雷达在点云密度、动态场景适应性及与IMU协同工作等方面的表现,帮助用户根据自动驾驶、机器人等不同应用场景做出最优选型决策。

table的专栏 945

Qt 实现跑马灯效果

参考某大神博客,针对自己的需求,实现了跑马灯效果。 效果如下: 思路: 1,启动定时器 进行刷新 my_timer_id_ = startTimer(10, Qt::PreciseTimer); 2,每触发一次定时器,偏移量增加固定大小。void Ticker::leftScrollTimerEvent(QTimerEvent *ev) offset_ ++; ...

qthello 4222

别再死磕U-Net了!用PyTorch手把手教你搭建ResUnet,搞定医学图像分割(附完整代码)

本文详细介绍了如何利用PyTorch搭建ResUnet模型,通过引入残差连接解决医学图像分割中的梯度消失、特征退化和细节丢失问题。与传统U-Net相比,ResUnet在Dice系数和收敛速度上均有显著提升,特别适合处理脑部MRI等复杂医学图像。文章还提供了完整的代码实现和关键训练技巧,帮助开发者快速掌握这一先进技术。

weixin_42552637的博客 327

Qt(QLabel)实现滚动字幕

滚动字幕,也叫跑马,就是动态显示一行字符。前面实现是使用QTimer控制,直接在槽函数中截取字符串进行显示,只控制字符串在控件的一端显示,超出控件的部分并没有从控件的另一端循环显示出来。于是我重新实现了一种方法,或者说完善了前面的不足吧。 使用QTimer控制显示的节奏,在paintEvent中进行截取显示。从左端被截掉的部分会从右端显示出来。 难点在于,我们需要依据控件的宽度,控制字符串的显

GreenArrowMan-优快云博客 3万+

Aruco标签定位、测距、三维位置估算 opencv应用

摄像头要一开始对准aruco标签才开始运行。+ 相机标定文件(参考我的上篇文章)+ aruco标签6*6。

dgut_guangdian的博客 4221

基于MATLAB/Simulink与WSL2的ROS2实时联合仿真实践

本文详细介绍了基于MATLAB/Simulink与WSL2的ROS2实时联合仿真实践。通过环境配置、PX4仿真环境搭建、自定义消息生成、Simulink通信实现及实时优化等步骤,提供了完整的无人机位置控制案例,帮助开发者实现高精度的实时联合仿真。

red88的博客 204

qt滚动字幕 从右到左和从下到上滚动

qt滚动字幕的控件还是很常用的,但是大部分教程都是从右到左的滚动,所以我就封装了一个控件支持从下到上的滚动。原理都是一样的,利用QTIME去控制文字的位置。先上效果: ![上下](https://img-blog.csdnimg.cn/ef7f0b86a1d04dfc809e7d8053ebfc0e.png#pic_center) ...

我要吃欢欢的博客 2269

C++软件调试与异常排查从入门到精通专栏介绍与文章汇总

根据近几年排查软件异常的实践与经验,系统地讲解了C++软件异常常见原因与常用排查方法,以图文并茂的方式给出具体的分析实例,带领大家逐步掌握C++软件异常排查的相关技术与要领。

dvlinker的技术专栏 23万+
上一篇: QT - 获取本地IPV4 地址 + C++根据域名获取IP地址
下一篇: Linux-添加systemd自启动服务 + 内网穿透模块NPC自启动(x96-coreelec squashfs固件修改)
温柔大猩猩
博客等级 码龄7年 65粉丝 14原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值