C++学习之路(八)C++ 用Qt5实现一个工具箱(增加一个粘贴板记录管理功能)- 示例代码拆分讲解

C++ 类型转换 C++ 类型转换,static_cast,reinterpret_cast,const_cast,dynamic_cast 阅读详情

昨天,我们用 Qt5 实现了一个小工具箱的雏形《C++ 实现简单的Qt界面(消息弹框、按钮点击事件监听)》,但是没什么实用价值。为了增加点作用,我们今天就为这个小工具箱增加第一个小功能 「 粘贴板记录管理功能 」,下面我们就来看看如何来规划开发一个这样的小功能并且添加到我们的工具箱中吧。

先看效果

在这里插入图片描述

功能规划

  • 主窗口:
    • 管理粘贴板记录按钮: 点击后会显示或隐藏剪贴板记录的管理窗口。
  • 剪贴板管理窗口:
    • 剪贴板记录列表: 自动监测剪贴板内容的变化,并将文本记录显示在窗口中。
    • 清空记录按钮: 点击后会清空剪贴板中的文本记录和窗口中显示的文本。

这个程序要展示一个简单的界面,允许用户通过管理窗口监测和清空剪贴板中的文本记录。通过信号槽连接和 Qt 的窗口部件,实现剪贴板内容的监测和用户界面的交互功能。

实现代码

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QMessageBox>
#include <QDebug>
#include <QListWidget>
#include <QClipboard>
#include <QMimeData>

#define myApp (dynamic_cast<QApplication *>(QCoreApplication::instance()))

class ClipboardManager : public QWidget {
Q_OBJECT
public:
    explicit ClipboardManager(QWidget *parent = nullptr) : QWidget(parent) {
        auto *layout = new QVBoxLayout(this);

        listWidget = new QListWidget(this);
        updateList(); // 初始更新列表

        auto *clearButton = new QPushButton("清空记录", this);
        connect(clearButton, &QPushButton::clicked, this, &ClipboardManager::clearClipboard);

        layout->addWidget(listWidget);
        layout->addWidget(clearButton);

        setLayout(layout);

        connect(myApp->clipboard(), &QClipboard::dataChanged, this, &ClipboardManager::updateList);
    }

private slots:
    void updateList() {
        const QClipboard *clipboard = myApp->clipboard();
        const QMimeData *mimeData = clipboard->mimeData();

        if (mimeData->hasText()) {
            const QString clipboardText = mimeData->text();

            if (!clipboardText.isEmpty()) {
                listWidget->addItem(clipboardText);
            }
        }
    }

    void clearClipboard() {
        myApp->clipboard()->clear();
        listWidget->clear();
    }

private:
    QListWidget *listWidget;
};

class MyMainWindow : public QWidget {
Q_OBJECT
public:
    explicit MyMainWindow(QWidget *parent = nullptr) : QWidget(parent) {
        setWindowTitle("实用功能示例");

        auto *layout = new QVBoxLayout(this);

        auto *button1 = new QPushButton("显示消息框");
        connect(button1, &QPushButton::clicked, this, &MyMainWindow::showMessageBox);

        auto *button2 = new QPushButton("执行特定操作");
        connect(button2, &QPushButton::clicked, this, &MyMainWindow::performSpecificAction);

        auto *clipboardButton = new QPushButton("管理粘贴板记录");
        connect(clipboardButton, &QPushButton::clicked, this, &MyMainWindow::toggleClipboardManager);

        layout->addWidget(button1);
        layout->addWidget(button2);

        clipboardManager = new ClipboardManager(this);
        clipboardManager->hide();
        layout->addWidget(clipboardManager);

        layout->addWidget(clipboardButton);

        setLayout(layout);
    }

private slots:
    void showMessageBox() {
        QMessageBox::information(this, "消息", "这是一个消息框示例!");
    }

    static void performSpecificAction() {
        // 执行特定的操作
        qDebug() << "执行了特定操作!";
    }

    void toggleClipboardManager() {
        if (clipboardManager->isHidden()) {
            clipboardManager->show();
        } else {
            clipboardManager->hide();
        }
    }

private:
    ClipboardManager *clipboardManager;
};

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    MyMainWindow mainWindow;
    mainWindow.show();

    return QApplication::exec();
}

#include "main.moc"

代码逐步讲解及知识点介绍

让我们逐步分解和讲解这个示例,同时列出涉及的知识点。

1. 包含的头文件和宏定义

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QMessageBox>
#include <QDebug>
#include <QListWidget>
#include <QClipboard>
#include <QMimeData>
  • QApplication: Qt 的应用程序类,管理应用程序的主要设置和行为。
  • QWidget: Qt 的窗口部件基类,提供了窗口的功能和特性。
  • QPushButton: Qt 的按钮部件类,用于创建按钮。
  • QVBoxLayout: Qt 的垂直布局管理器类,用于管理窗口部件的垂直布局。
  • QMessageBox: Qt 的消息框部件类,用于显示消息和提示。
  • QDebug: Qt 的调试输出类,用于输出调试信息。
  • QListWidget: Qt 的列表部件类,用于显示项目列表。
  • QClipboard: Qt 的剪贴板类,用于访问和管理系统剪贴板。
  • QMimeData: Qt 的多用途数据容器类,用于在剪贴板中保存数据。
#define myApp (dynamic_cast<QApplication *>(QCoreApplication::instance()))
  • myApp 宏定义: 这个宏定义用于获取当前应用程序的指针,并将其转换为 QApplication* 类型。它通过 QCoreApplication::instance() 获取应用程序对象的指针,然后通过 dynamic_cast 进行类型转换。这样,myApp 宏可以在程序中轻松访问当前应用程序的对象。(其实主要是为了不让 Clion 提示 Clang-Tidy: Do not use static_cast to downcast from a base to a derived class; use dynamic_cast instead 这个警告 o(╥﹏╥)o 拯救强迫症 ~ )

2. ClipboardManager 类

ClipboardManager 类是我们用于管理剪贴板内容的窗口部件。它主要负责监测剪贴板中的文本内容变化,并将这些文本记录显示在一个列表中。同时,它也提供了清空剪贴板内容的功能。

class ClipboardManager : public QWidget {
    Q_OBJECT
public:
    explicit ClipboardManager(QWidget *parent = nullptr) : QWidget(parent) {
        // 构造函数:初始化剪贴板记录管理窗口
        // 创建布局和窗口部件,并连接剪贴板数据变化信号到槽函数
    }

private slots:
    void updateList() {
        // 槽函数:更新剪贴板记录列表
        // 从剪贴板获取文本,并显示在列表部件中
    }

    void clearClipboard() {
        // 槽函数:清空剪贴板和记录列表
        // 清空剪贴板内容,并清空列表部件中显示的内容
    }

private:
    QListWidget *listWidget;
};

知识点:

  • 继承与构造函数: 继承自 QWidget 类,并在构造函数中初始化剪贴板记录管理窗口。

  • 布局和窗口部件: 使用 QVBoxLayout 布局和 QListWidget 列表部件。

    QVBoxLayout 是 Qt 框架中的一个布局管理器类,用于在窗口中垂直地排列窗口部件(Widgets)。
    QListWidget 是 Qt 框架中用于显示项目列表的部件类。它可以用来展示项目的列表,每个项目可以包含文本、图标等信息。QListWidget 提供了一些方法来方便地管理项目列表,比如添加、删除、清空项目等。它还支持各种信号,可以在项目被选中、双击、拖动等操作时发出相应的信号,方便对用户交互做出响应。

  • 信号槽连接: 通过 connect 将剪贴板数据变化信号连接到槽函数 updateList。

  • 剪贴板操作: 使用 QClipboard 和 QMimeData 读取和管理剪贴板的文本内容。

3. MyMainWindow 类

class MyMainWindow : public QWidget {
    Q_OBJECT
public:
    explicit MyMainWindow(QWidget *parent = nullptr) : QWidget(parent) {
        // 构造函数:初始化主窗口,包含按钮和剪贴板管理窗口
        // 创建按钮,并连接点击事件到对应的槽函数
    }

private slots:
    void showMessageBox() {
        // 槽函数:显示消息框
        // 显示一个简单的消息框
    }

    static void performSpecificAction() {
        // 静态槽函数:执行特定操作
        // 输出一条特定的消息到控制台
    }

    void toggleClipboardManager() {
        // 槽函数:显示或隐藏剪贴板管理窗口
        // 控制剪贴板管理窗口的显示或隐藏状态
    }

private:
    ClipboardManager *clipboardManager;
};

知识点:

  • 构造函数: 初始化主窗口,包含按钮和剪贴板管理窗口。
  • 按钮和事件连接: 创建按钮,并通过 connect 将点击事件连接到相应的槽函数。
  • 消息框显示: 使用 QMessageBox::information 显示简单的消息框。
  • 静态函数: 一个静态成员函数 performSpecificAction,在按钮点击时输出消息到控制台。

4. main() 函数

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);

    MyMainWindow mainWindow;
    mainWindow.show();

    return QApplication::exec();
}

知识点:

  • 应用程序对象: 创建 QApplication 对象,是 Qt 应用程序的入口点。
  • 主窗口显示: 实例化主窗口并显示。

总结涉及的知识点:

  • Qt 窗口部件: QWidget、QPushButton、QVBoxLayout、QListWidget。
  • 信号槽机制: connect 函数连接按钮点击事件和剪贴板数据变化信号到槽函数。
  • 剪贴板操作: QClipboard 和 QMimeData 读取和管理剪贴板的文本内容。
  • 静态函数和槽函数: 包括静态函数和普通槽函数的定义和使用。
  • 应用程序对象获取和宏定义: 获取当前应用程序的指针,并使用宏定义简化代码。

本示例中,我们要注意哪些地方呢?

在这个示例中,有几个关键点值得注意:

  1. 信号与槽连接: 这个示例通过 connect 函数将信号与槽函数连接起来,实现了按钮点击和剪贴板数据变化时的响应操作。需要注意信号和槽函数的参数类型和匹配,确保连接正确。

  2. 动态创建部件: 示例中使用 new 关键字动态创建了窗口部件(如 QPushButton、QListWidget 等),并将它们添加到布局中。确保这些动态创建的部件在适当的时候被正确释放,以避免内存泄漏。

  3. 静态槽函数: 示例中有一个静态成员函数 performSpecificAction 作为槽函数。需要注意静态成员函数的特殊性,它没有访问实例变量的权限,只能访问静态成员变量或全局变量。

  4. 剪贴板操作: 对剪贴板的操作需要小心,特别是在清空剪贴板内容时,确保用户明确的操作意图,以免误操作造成数据丢失。

  5. 布局管理: 布局的设计需要考虑界面的美观性和用户体验。在添加新的功能或部件时,要考虑布局的合理性,避免窗口部件重叠或过于拥挤。

综上所述,在编写和修改代码时,要特别注意这些关键点,以确保程序的稳定性、可靠性和用户友好性。


本文就到这里了,感谢您的阅读,明天还有更多的实例学习文章等着你 🎆。别忘了点赞、收藏~ Thanks♪(・ω・)ノ 🍇。

深入理解 Qt 中的信号与槽机制:`private` 和 `private slots` 的区别及新旧版本的连接方式 和的区别中的槽函数不被 Qt 自动识别为槽,因此无法连接信号;而中的槽函数会被 Qt 识别为槽函数,信号能够正确连接。旧版和新版连接方式的区别:旧版连接方式使用字符串,不进行编译时检查,可能导致信号与槽无法正确连接;新版连接方式使用函数指针,支持编译时检查,确保信号与槽的匹配。推荐做法:使用新版连接方式,并将槽函数放在中,这样可以确保信号与槽能够正确连接,同时享受编译时检查的优势。通过这篇博客,相信你能更加清楚地理解 Qt 中信号与槽的连接方式,并避免常见的错误。 阅读详情

相关推荐

使用PyQt开发:使用QToolBox创建桌面工具箱(Python)

QToolBox提供了一种组织和显示多个工具的方式,每个工具都可以显示为一个选项卡,并且可以包含自定义的内容。本文将向您展示如何使用PyQt和QToolBox创建一个简单的桌面工具箱应用程序,并提供相应的源代码。在上面的代码中,我们创建了一个MainWindow类作为主窗口,并在其中添加了一个QToolBox小部件。使用PyQt和QToolBox,您可以轻松地创建一个功能丰富的桌面工具箱应用程序,以满足您的特定需求。然后,创建一个自定义的小部件类,用于显示工具的内容。安装完成后,我们可以开始编写代码。

BUG?不存在的! 344

C++:信号与槽

信号与槽

逃离那片云的博客 2284

【QT开发教程】数据传输管理QMimeData类详解及实战应用:用于管理和传输MIME类型的数据,在实现剪贴板功能、拖放操作和数据传递等方面具有重要作用

QMimeData 类在 Qt 中是一个非常重要且灵活的数据传输工具。通过理解和应用 QMimeData 类的各项功能,可以高效且灵活地处理剪贴板、拖放操作及其他数据传输需求。希望本教程对你学习和应用 QMimeData 类有所帮助。

科技改变人类,技术成就未来 1204

C++ QT学习记录 二、QT槽、信号机制

槽、信号机制

qq_38103849的博客 793

【QT开发】剪贴板管理QClipboard 类详解及实战应用

QClipboard 是 Qt 访问和操作系统剪贴板的强大工具,能够方便地实现复制和粘贴功能。通过本文的详细介绍,您应对 QClipboard 的基本使用、高级应用技巧及相关注意事项有了全面的理解。在实际项目中,QClipboard 可以帮助实现文本、图像等内容的高效复制和粘贴,希望本文能帮助您更好地理解和使用 QClipboard,在各种场景中实现高效的剪贴板交互。

科技改变人类,技术成就未来 2014

过压保护电路(OVP)

作者:AirCity 2020.2.4 Aircity007@sina.com 本文所有权归作者Aircity所有 1 示例一 当VBUS=5V时,各点电压电流如图所示,Q1接近截止,输出信号是5V。 当VBUS=5.4V开始,输出信号开始下降,直到VBUS=6.1V,输出信号降低为0.6V。 下面是实测波形,这个电路,输出信号的电压不会超过5.4V,这个输出信号可用于电源的控制信号。 2 ...

AirCity123的博客 3万+

C++学习笔记-信号槽

三类信号槽连接的方式

ppgodzz的博客 1398

QuestaSim使用Xilinx库的设置

安装QuestaSim

miracle_eicont的专栏 3409

Qt : Windows剪切板监控

偶然需要记录一下我的剪切内容, 在我完成所有剪切之后将内容存储到文件,这里使用到Qt5.15.2, 下面我们就来看看是怎么做的吧。

听我一言的博客 961

Redhawk解析PAD / IOPAD的实现方法

Redhawk解析IOPAD的实现方法1. IOPAD DEF的概念说明2. 生成 IOPAD GDS文件3. 生成 IOPAD DEF文件4. Redhawk解析过程中读取IOPAD DEF 本文主要简述【Redhawk解析IOPAD】的实现原理方法,具体脚本没有放在这里。 1. IOPAD DEF的概念说明 2. 生成 IOPAD GDS文件 注: getinfo2IODEF.tcl 是基于innovus获取IOPAD的摆放信息以及库信息。 run_cerate_iopadgds.csh 是基于c

kobayashiyou的博客 3154

EDA与机器学习融合:智能优化芯片设计流程的工程实践

机器学习作为数据驱动的核心技术,通过从历史数据中学习复杂模式,实现对系统行为的预测与优化。其原理在于构建模型,将输入特征映射到目标变量,从而揭示数据背后的内在规律。在工程领域,这项技术的核心价值在于能够将专家经验转化为可量化、可复用的智能模型,显著提升自动化水平与决策效率。电子设计自动化(EDA)是芯片设计的关键支撑,传统流程高度依赖人工试错,面临参数空间巨大、优化周期长等挑战。将机器学习应用于EDA,能够构建预测模型来预估设计性能(PPA),或通过代理模型加速设计空间探索,实现智能化的设计辅助与优化。本文

weixin_30411239的博客 684

C++学习之路(九)C++ 用Qt5实现一个工具箱(增加一个JSON数据格式化功能)- 示例代码拆分讲解

上篇文章,我们用 Qt5 实现了在小工具箱中添加了《粘贴板记录管理》功能,用着还不错哈。为了继续丰富我们的工具箱,今天我们就再增加一个平时经常用到的功能吧,就是「 JSON数据格式化 」功能。下面我们就来看看如何来规划开发一个这样的小功能并且添加到我们的工具箱中吧。

天河书阁 - VicRestart 626

基于强化学习控制策略的三相逆变器仿真

强化学习控制器的核心在于定义状态空间、动作空间、奖励函数以及选择合适的强化学习算法(例如DQN、DDPG等)。对于三相逆变器,状态可以是输出电压、电流等信息;动作则可能是调制指数的变化量;奖励函数则应鼓励快速准确地跟踪参考信号。定义状态空间和动作空间状态空间可以包括逆变器的输出电压、电流及其变化率等信息。动作空间则是控制器可执行的动作,例如PWM信号的调整幅度。matlab深色版本% 定义状态和动作空间维度numObs = 6;% 假设有六个状态变量(例如三相电压和电流)

amy_mhd的博客 135

C++学习之路(十九)C++ 用Qt5实现一个工具箱(用SQLite数据库来管理粘贴板数据)- 示例代码拆分讲解

上篇文章,我们用 Qt5 实现了在小工具箱中添加了《点击按钮以新窗口打开功能面板》功能。今天我们把粘贴板功能用SQLite数据库来管理,用SQLite来实现增删改查。下面我们就来看看如何来规划开发这样的小功能并且添加到我们的工具箱中吧。

天河书阁 - VicRestart 1242

【YOLOv8/v9/v10 实战 01】YOLOv8/v9/v10全系列实战对决:性能矩阵、架构拆解与2026部署指南

2026年YOLO生态已进入“战国时代”,Ultralytics YOLOv8/11/26、阿里YOLO12、清华YOLOv10、微软YOLOv9四大路线并行发展。本文基于官方文档、学术论文及实测数据,系统剖析三大核心版本(YOLOv8/v9/v10)的架构演进逻辑,构建覆盖参数量、mAP、FPS、FLOPs的完整性能矩阵。通过8组工业场景实测、全流程代码实现(训练-导出-部署)、6类硬件适配方案,解决新手选型难、进阶者优化无门、工业开发者部署低效的痛点。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 534

ComfyUI 局部重绘工作流示例

本文介绍了使用ComfyUI进行图像局部重绘的基础工作流程,重点讲解如何修改人物眼睛颜色和表情。主要内容包括:1.准备工作(可选下载DreamShaperv8模型);2.加载素材图片和工作流文件;3.使用遮罩编辑器绘制需要修改的区域;4.修改提示词控制生成内容;5.调整denoise参数优化效果。教程提供了详细的提示词示例(如"smile,blackeyes"等)和参数设置建议,帮助用户通过多次尝试获得理想效果。该工作流适用于修改图像局部区域而不影响整体画面。

云域A的博客 331

Casting from a base class to a derived class

 Casting from a base class to a derived classAntonio Bello posted on September 27, 2008 05:23This morning a friend of mine asked me how to cast a generic list to a custom class inherited f

situz的专栏 844

5 分钟上手 Kimi Work:安装、配置、跑通第一个任务

这篇文章提供了Kimi Work的快速入门指南,帮助用户在5分钟内完成从安装到运行第一个任务的全过程。主要内容包括: 安装步骤: macOS用户下载.dmg文件并拖入Applications Windows用户下载.exe安装包,需注意中文路径问题 初始设置: 使用现有Kimi账号登录 检查任务配额和文件访问权限 首个任务推荐: 建议从简单的本地文件整理开始(如按类型分类桌面文件) 详细说明了任务执行流程和审批机制 常见问题: 计划生成卡顿的解决方法 文件无变化的排查步骤 进阶建议: 提供难度递增的后续任务

sg_knight的专栏 2786

Qt监听剪贴板实现自动修改内容

由于某种原因,需要实现这个功能:监听系统的剪贴板,当用户发生文字复制时,将复制的内容里面的换行符‘\n’,换成制表符‘\t’。 需求好像很简单,逻辑也好像很简单,而且Qt也提供了QClipBoard,而且也有了dataChanged这个信号,一切好像水到渠成。但是实际在实现过程中还是遇到了一些坑,后面详细列出来,先上能够正确使用的代码。 代码如下: QClipboard *board = QGuiApplication::clipboard(); connect(board, &QClipb

joyopirate的博客 2489

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

#Windows实用系统工具 用C++实现一个可以在Windows系统下关机、删除C盘用户等功能的小程序

用C++实现一个可以在Windows系统下关机、删除C盘用户等功能的小程序

pyz258的博客 966

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Windows 2000下的Raw Socket编程

Windows2000在TCP/IP协议组件上做了很多改进,功能也有增强。比如在协议栈上的调整,增大了默认窗口大小,以及高延迟链接新算法。同时在安全性上,可应用IPSec加强安全性,比NT下有不少的改进。 Microsoft TCP/IP 组件包含“核心协议”、“服务”及两者之间的“接口”。传输驱动程序接口 (TDI) 与网络设备接口规范 (NDIS) 是公用的。 此外,还有许多用户模型应用程序的

好色天使的专栏 2096

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Qt实现消息列表以及显示

目录1、消息内容2、消息的创建3、消息关闭4、右下角显示 我们曾经用Qt的QListWidget控件实现了模拟微信联系人列表,今天利用该控件实现一个比较简单的错误消息的汇总显示组件。 该组件默认隐藏,显示时在桌面的右下角弹出。比较符合一般软件的设计方案。因为是比较通用的错误消息的汇总中心,因此,对错误是不进行处理的,只做消息的显示。错误消息由谁创建则由谁关闭,实现良性的闭环。 先来看下整体的效果图。 1、消息内容 消息的状态 消息的状态显示为消息是否被阅读,我们使用给每条消息添加红色圆点来标记消息是否已

slowlytalk 3284

C++ MFC进程间通信之剪贴板【详解】

Windows剪贴板是一种比较简单的进程间通信机制,同时它的开销相对较小。它的实现原理很简单,其实就是由由操作系统维护的一块内存区域, 这块内存区域不属于任何单独的进程,但是每一个进程又都可以访问这块内存区域,当一个进程将数据放到该内存区域中,而另一个进程,则可以从该块内存区域中取出数据,从而实现通信,其实现过程由两大部分组成,一个是共享内存操作,一个是剪贴板的操作。 1、剪贴板操作 (1)...

王木木 1108

C++ 23 实用工具(二)绑定工具

std::bind和这四个函数非常适合一起使用。其中,std::bind和可以让您即时创建新的函数对象,而则可以将这些临时的函数对象绑定到变量上。然而,在C++中,这四个函数大多数情况下都是多余的。首先,您可以使用lambda表达式代替std::bind和;其次,您通常可以使用自动类型推导的auto关键字代替。因此,尽管在某些特定场景下,这些函数仍然是有用的,但在大多数情况下,它们并不是必须的。

qq_42896106的博客 1504

docwizard c++程序文档自动生成工具_你不能错过的高效率软件工具:第 4 期

工具周刊:第 4 期这里分享一些你可能用得到的小巧、实用、提升效率的软件 & 工具。公众号开启一个全新的栏目,每周分享 7 个小巧、实用、提升效率的软件 & 工具。每日同步更新至微信群、微博、语雀文档、Github。文档工具iSlide,是一款基于 PowerPoint 的插件工具,让你不再为做 PPT 而苦恼。支持快速排版,内置 20w+ 的模板,以及海量的图片、图标、插画等资源...

weixin_39624094的博客 380

【项目实战】C++多文件写法轻松实现练手小游戏:贪吃蛇

每天一个编程小项目,提升你的编程能力! 这个是用C++语法和链表知识实现的哦!

致力于C语言C++知识分享! 3616
上一篇: C++学习之路(七)C++ 实现简单的Qt界面(消息弹框、按钮点击事件监听)- 示例代码拆分讲解
下一篇: C++学习之路(九)C++ 用Qt5实现一个工具箱(增加一个JSON数据格式化功能)- 示例代码拆分讲解
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天河书阁 VicRestart

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值