[QT编程系列-37]:数据存储 - 日志文件、日志等级的支持:qDebug、Log4Qt

2023-11-19

目录

1. 概述

2. qDebug

2.1 概述

2.2 qDebug对调试等级的支持(通过不同的宏来实现)

2.3 qt日志等级的设置


1. 概述

在 Qt 中,日志文件的支持通常是通过日志库、日志框架或自定义代码实现的

Qt 本身没有提供内置的日志文件支持。

以下是一些常用的方法和工具,可用于在 Qt 应用程序中实现日志文件的支持:

  1. 使用第三方日志库:你可以集成一些第三方的日志库(例如 spdlog、Log4Qt、QsLog 等)来管理和记录应用程序的日志。这些库提供了丰富的功能和配置选项,可以方便地将日志输出到文件//这是最值得推荐的方法

  2. 自定义日志输出代码:你可以在代码中添加自定义的日志输出语句,并将日志消息写入文件。这可以通过使用 QFile 或其他文件写入类来实现。你可以根据需要定义日志级别、格式和输出位置。//这种方式不推荐,应用程序员的增加了无形的工作量。

  3. Qt 调试器qDebug:使用 Qt 的调试器qDebug,你可以在运行时查看和跟踪应用程序的日志输出。你可以使用 qDebug、qWarning、qCritical 等宏来输出不同级别的日志,同时可以重定向输出到文件。这对于调试和排查问题非常有用。

  4. Qt Creator IDE:Qt Creator IDE 集成了一个内置的日志窗口,可以通过 “输出” 视图查看应用程序运行时的日志输出。这对于快速识别日志信息非常方便,同时也可以将输出保存到文件。//这适合开发调试, 不适合最终产品

综上所述,Qt 并没有提供专门的日志文件支持,但你可以使用第三方日志库、自定义代码,或利用 Qt 调试器和 Qt Creator IDE 来支持日志输出到文件。选择适合你的需求和项目的方法,并根据具体情况进行配置和调优。

2. qDebug

2.1 概述

qDebug 是 Qt 框架中提供的一个宏,用于在应用程序中输出调试信息。

它主要用于在开发和调试过程中打印文本消息到控制台或日志输出。

qDebug 宏的使用非常简单,在代码中直接调用即可,示例如下:

#include <QDebug>

// ...

qDebug() << "This is a debug message.";
qDebug() << "Value of x:" << x;

qDebug() 调用可以输出一个或多个参数到标准输出(控制台)或日志输出。它类似于 C++ 中的 std::cout,但提供了更多的功能和灵活性。

qDebug() 支持使用类似流的语法,可以连接多个参数以便输出更复杂的消息。上面的示例中,“This is a debug message.” 和 “Value of x:” 是两个参数,它们通过 << 运算符连接起来。

在默认情况下,qDebug() 的输出会发送到标准输出(控制台)。你可以通过重定向标准输出来将其输出到文件。例如,在命令行中使用以下命令可以将输出保存到名为 “log.txt” 的文件中:

./your_application > log.txt

qDebug() 还可以与其他 Qt 调试宏(例如 qWarning、qCritical)一起使用,以输出不同级别的日志消息。

需要注意的是,在发布(Release)版本中,默认情况下,qDebug() 的调试输出会被编译器优化掉,不会产生任何输出。因此,在发布版本中,调试信息应该被适当地移除或使用适当的宏进行条件编译。

总而言之,qDebug() 是 Qt 中用于输出调试信息的宏。它可以方便地将消息输出到控制台或日志文件,帮助开发者进行程序调试和问题排查。

2.2 qDebug对调试等级的支持(通过不同的宏来实现)

在 Qt 中,qDebug 是一个用于输出调试信息的宏,而不是一个具体的日志等级。qDebug 的默认输出级别是调试级别(Debug Level),用于在开发和调试过程中输出详细的调试信息。

Qt 还提供其他几个宏用于输出不同级别的日志消息,包括:

  1. qDebug(): 输出调试信息

  2. qInfo():信息级别(Info Level),用于输出一般性的信息和状态。

  3. qWarning():警告级别(Warning Level),用于输出警告信息,表示可能存在问题或潜在的错误。

  4. qCritical():严重级别(Critical Level),用于输出严重错误信息,表示程序发生了无法继续执行的错误。

这些宏可以替代 qDebug() 来输出不同级别的日志消息,以更好地区分不同程度的信息。

每个宏都类似于 qDebug(),接受一个或多个参数,并将它们输出到标准输出(控制台)或记录日志的其他目标。

通过使用这些不同级别的宏,你可以根据信息的重要性和紧急程度,对日志消息进行分类和过滤。在发布(Release)版本中,通过适当的配置,可以根据需要选择输出和记录的日志类型。

示例使用:

#include <QDebug>

// ...

qDebug() << "This is a debug message.";
qInfo() << "This is an informational message.";
qWarning() << "This is a warning message.";
qCritical() << "This is a critical error message.";

以上示例展示了在不同级别下使用相应的宏输出日志消息。

需要注意的是,输出的日志消息可以根据配置进行过滤和重定向。你可以使用 Qt 的配置机制来定制日志输出的行为,例如将其输出到文件中、禁用某些级别的消息等。

总结来说,Qt 提供了几个宏来输出不同级别的日志消息,包括 qDebug、qInfo、qWarning 和 qCritical。通过根据信息的重要性和紧急程度选择适当的宏,你可以更好地管理和控制日志消息的输出。

2.3 qt日志等级的设置

在 Qt 中,可以通过配置调试消息过滤规则来控制日志消息的输出级别。Qt 提供了一个名为 QT_MESSAGE_PATTERN 的环境变量,可以用于设置输出消息的格式和过滤条件。

以下是一种常见的设置方法:

  1. 在项目的代码中,添加一个全局的 qSetMessagePattern() 调用,用于设置消息输出格式和过滤规则。例如:
#include <QtCore>

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    qSetMessagePattern("[%{type}] %{message}");

    // ...

    return app.exec();
}

上述示例中的 qSetMessagePattern() 用于设置输出的消息格式。在这里,使用了一个占位符 %{type},它将被实际的消息类型(如 debug、warning、critical 等)替换。通过这种设置,只有带有指定类型的消息才会输出。

  1. 在项目的运行配置中,设置环境变量 QT_MESSAGE_PATTERN,用于全局地配置消息输出格式和过滤规则。例如,在 Qt Creator 中,选择 “Projects” 面板,然后在 “Run” 部分的 “Run Environment” 中添加一个新的环境变量,并将其设置为合适的值,如 [%{type}] %{message}

  2. 使用系统环境变量设置 QT_MESSAGE_PATTERN,以应用于整个系统。可以在操作系统的环境变量设置中添加一个新的变量,并将其设置为合适的值,如 [%{type}] %{message}

在设置了适当的消息格式和过滤规则后,只有满足规则的日志消息才会输出到控制台或日志文件中。你可以根据自己的需求和调试需求,设置适当的规则,仅输出所需的日志级别

例如,如果只想输出警告和严重错误消息,可以将消息过滤规则设置为 "[warning], [critical]"

需要注意的是,消息过滤规则使用的是 QRegularExpression 语法,可以进行更复杂的过滤设置,如使用正则表达式匹配。你可以根据自己的需求和实际情况来设置过滤规则。

总结起来,可以通过调用 qSetMessagePattern() 函数、设置项目运行配置中的环境变量,或者设置系统环境变量来配置 Qt 的调试消息输出级别。使用适当的消息格式和过滤规则,可以控制输出的日志消息类型,并满足你的特定需求。

3. Log4Qt

Qt开发笔记:log4Qt编译和使用 - 简书 (jianshu.com)

3.1 概述

Log4Qt是一个基于Qt框架的C++日志记录库。它提供了灵活的日志记录功能,可以帮助开发人员在应用程序中生成详细的日志信息并进行适当的处理。

Log4Qt采用了与Apache Log4j类似的日志记录概念和配置格式。它支持不同的日志级别(如调试、信息、警告、错误等)和多种输出目标(如文件、控制台、网络等)。开发人员可以根据需要配置日志级别和输出目标,以满足应用程序的需求。

使用Log4Qt,开发人员可以轻松地将日志记录集成到他们的Qt应用程序中,从而实现快速和可靠的日志记录。它还提供了一些附加功能,如日志过滤、日志格式化和日志传递等,以帮助开发人员更好地理解应用程序的运行情况和调试潜在问题。

总的来说,Log4Qt是一个强大而灵活的日志记录库,适用于使用Qt框架开发的C++应用程序。它可以帮助开发人员提供详细的日志记录,并提供了多个输出目标和日志级别,以满足应用程序的需求。

Log4Qt 是一个基于 Java 的 Log4j 日志框架的 Qt/C++ 实现。它提供了一套丰富的功能和灵活的配置选项,用于在 Qt 应用程序中实现高级日志记录和日志管理。

Log4Qt 的主要特性包括:

  1. 多种日志级别:Log4Qt 支持多个日志级别,包括跟踪(TRACE)、调试(DEBUG)、信息(INFO)、警告(WARN)、错误(ERROR)和致命(FATAL)等级别。你可以根据需求对日志级别进行配置。

  2. 不同输出目标:Log4Qt 支持将日志消息输出到多个目标,如控制台、文件、网络 socket 或自定义输出目标。你可以方便地将日志输出到文件中,以供后续分析或跟踪。

  3. 高度可配置:Log4Qt 允许你以灵活的方式配置日志输出的格式、目标和过滤器等。你可以定义不同的日志器(Logger)和附加器(Appender),并为每个日志器设置适当的输出规则。

  4. 日志过滤和分类:Log4Qt 可以根据日志消息内容、级别或其他属性进行过滤和分类。你可以使用过滤器来选择仅输出所需级别的日志消息,或根据消息内容进行动态分类。

  5. 多线程支持:Log4Qt 在多线程环境下能够正确处理日志消息,避免出现竞争条件和不一致的输出。

使用 Log4Qt 需要在项目中引入相应的库,并按照文档提供的方式进行配置和使用。你可以在 Log4Qt 的官方网站上找到详细的文档、示例和使用说明。

总而言之,Log4Qt 是一个强大的日志框架,可以帮助你在 Qt/C++ 应用程序中实现高级的日志记录和管理功能。它提供了多种日志级别、输出目标、配置选项和过滤器,使你能够灵活地控制和管理应用程序的日志输出。

3.2 代码示例

这是一个简单的使用Log4Qt进行日志记录的示例:

#include <QCoreApplication>
#include <log4qt/logger.h>
#include <log4qt/basicconfigurator.h>
#include <log4qt/propertyconfigurator.h>

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

    // 使用BasicConfigurator简单配置日志记录器
    log4qt::BasicConfigurator::configure();

    // 获取日志记录器
    log4qt::Logger *logger = log4qt::Logger::rootLogger();

    // 记录不同级别的日志
    logger->trace("This is a trace log message");
    logger->debug("This is a debug log message");
    logger->info("This is an info log message");
    logger->warn("This is a warning log message");
    logger->error("This is an error log message");
    logger->fatal("This is a fatal log message");

    // 可以通过配置文件进行更复杂的日志配置
    log4qt::PropertyConfigurator::configure("log4qt.properties");

    // ...

    return a.exec();
}

上述示例首先使用BasicConfigurator进行简单的日志配置,然后获取根日志记录器。

接下来,使用不同级别的日志记录函数记录不同级别的日志信息。最后,你还可以使用PropertyConfigurator来从配置文件中进行更复杂的日志配置。

请注意,这只是一个简单的示例,你还可以根据你的需要进一步配置和使用Log4Qt来满足你的日志记录需求。

3.3 Log4Qt的日志文件

在Log4Qt中,可以将日志记录输出到文件中。

这里是一个示例,演示如何配置Log4Qt以将日志记录到文件中:

  1. 创建一个配置文件(例如log4qt.properties),并将以下内容添加到文件中:
# 设置根日志记录器输出到文件
log4j.rootLogger=DEBUG, file

# 配置文件输出的目标和格式
log4j.appender.file=Log4Qt::FileAppender
log4j.appender.file.file=mylogfile.log  //日志文件名称
log4j.appender.file.append=true
log4j.appender.file.layout=Log4Qt::PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.zzz} [%-5p] %c{1} - %m%n

上述配置文件将根日志记录器的级别设置为DEBUG,并指定了一个名为file的输出目标。输出目标类型为Log4Qt::FileAppender,并设置了输出的文件名为mylogfile.logappend属性设置为true,表示追加日志到文件的末尾。日志格式通过PatternLayout进行配置,使用ConversionPattern指定了输出的格式。

  1. 在应用程序中使用PropertyConfigurator加载配置文件:
#include <QCoreApplication>
#include <log4qt/propertyconfigurator.h>

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

    log4qt::PropertyConfigurator::configure("log4qt.properties");

    // ...

    return a.exec();
}

上述示例代码使用PropertyConfigurator加载配置文件log4qt.properties,这会根据配置文件的设置配置Log4Qt。

通过上述配置,日志记录会被输出到名为mylogfile.log的文件中每条日志记录会包含日期、日志级别、类名和日志信息等内容,使用指定的格式进行输出。

你可以根据需求修改配置文件中的参数,如输出的文件名、日志级别和格式等。这样,你就可以将Log4Qt的日志记录输出到文件中,以便于后续分析和调试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[QT编程系列-37]:数据存储 - 日志文件、日志等级的支持:qDebug、Log4Qt 的相关文章

  • Qt 信号槽,新符号中的转换类型[重复]

    这个问题在这里已经有答案了 鉴于以下两个 connect ui gt comboBox SIGNAL activated QString ps SLOT requestPlotsAvailable QString connect ui gt
  • 检查目录是否为空

    我正在尝试检查目录是否为空 MainWindow MainWindow QWidget parent QMainWindow parent ui new Ui MainWindow ui gt setupUi this QDir Dir h
  • 我的 QSqlQueryModel 不在列表视图中显示数据

    我正在玩 QSqlQueryModel 但我现在完全陷入困境 我一整天都在寻找解决方案 但到目前为止还没有运气 我所做的工作是它从我的 sqlite 数据库中提取数据 但由于某种原因我无法在列表视图中显示它 我的角色名似乎不存在 对于我从数
  • 对齐坐标系

    Let s say I have 2 coordinate systems as it is shown in image attached 如何对齐这个坐标系 我知道我需要将第二个坐标系围绕 X 平移 180 度 然后将其平移到第一个坐标
  • QToolBar 的菜单延迟

    我通过制作 QAction 并向其添加 QMenu 在 QToolBar 上有一个菜单 如何消除单击图标时出现菜单之前的延迟 QToolBar myToolBar new QToolBar this QAction myAction new
  • [本机]:在Qt for Android中使用Java函数和第3方库[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 最近我用qt写了一个android应用程序 但我有一个很大的问题 我可以使用 调用一些原生的android API 比如调用特殊的activit
  • QTableView 中的虚拟列?

    我开始学习 Qt4 模型 视图编程 我有初学者问题 我有一个简单的应用程序 其中显示 sqlite 表QTableView class Model QtSql QSqlTableModel def init self parent None
  • 仅将非模态 QDialog 窗口放置在我的应用程序顶部,而不是所有应用程序顶部

    我有一个 QDialog 窗口 它应该始终位于我的应用程序顶部 它不是模态的 用户可以随时与对话框和主应用程序进行交互 使用窗口保持在顶部提示在某种程度上实现了这一点 但是 该对话框仍然位于所有其他正在运行的应用程序 例如记事本 chrom
  • 如何在 Qt-Embedded 中(正确)输出多语言文本?

    我的目标系统是 linux 3 3 7 Qt Embedded 开源版 4 8 Droid 字体 取自 fonts droid 20111207 git 1 all deb Debian 软件包并复制到 usr lib fonts目录 主要
  • 程序意外完成 - QT Creator

    我正在尝试使用 QT Creator 使用 QT 框架开发 GUI 控制台应用程序 我使用的是Windows XP 我安装了QT 4 8 3和mingw 两者均已安装 没有任何错误 然后我安装了QT Creator QT 版本 路径中的 Q
  • QDesktopServices::openUrl 在资源管理器中选择指定文件

    在大多数编码程序中 您可以右键单击该项目 然后单击 在资源管理器中显示 它会在资源管理器中显示选定项目的文件 在 Qt 中使用 QDesktopServices 如何做到这一点 或在 QT 中执行此操作的任何方式 您可以使用此方法在 Win
  • Qt mouseReleaseEvent() 未触发?

    我有一个显示图片的库 我们称之为 PictureGLWidget 其中 class PictureGLWidget public QGLWidget 所以 PictureGLWidget 扩展了 QGLWidget 在PictureGlWi
  • Qt 创建者 + MITK (Linux)

    我正在尝试使用MITK 与 Qt Creator 我已经通过 ccmake 成功编译并使用了 VTK 和 ITK 我已经编译了 MITK超级建造模式 它下载 CTK VTK ITK 等 然后我就配置好了 我已经用 make 编译了 大约两个
  • 如何在带有预编译头的项目中使用google protobuf

    我有一个包含多个项目的解决方案 我的项目 但不是全部 使用预编译头 我决定使用 protobuf 但遇到了一个问题 在 protoc exe 从 proto 生成 pb h 后 我尝试包含标头并收到错误 预编译标头未包含在 pb h 中 我
  • 加权 Voronoi 的 CGAL 2D APOLLONIUS 图 - 如何生成和获取面和顶点?

    我正在尝试根据阿波罗尼乌斯图生成加权沃罗诺伊 我正在使用 CGAL 库 我找不到如何从 apollonius 获取面和顶点的好例子 我有以下类型定义 typedef double NT typedef CGAL Cartesian lt N
  • 如何在 Qt 中以编程方式制作一条水平线

    我想弄清楚如何在 Qt 中制作一条水平线 这很容易在设计器中创建 但我想以编程方式创建一个 我已经做了一些谷歌搜索并查看了 ui 文件中的 xml 但无法弄清楚任何内容 ui 文件中的 xml 如下所示
  • QCombobox 向下箭头图像

    如何更改Qcombobox向下箭头图像 现在我正在使用这个 QSS 代码 但这不起作用 我无法删除向下箭头边框 QComboBox border 0px QComboBox down arrow border 0px background
  • 如何在 QTabWidget Qt 中展开选项卡

    我有一个QTabWidget像这个 但我想展开选项卡以 填充 整个小部件宽度 如下所示 我怎样才能做到这一点 我在用Qt 5 3 2 and Qt 创建者 3 2 1 Update 我尝试使用setExpanding功能 ui gt myT
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959
  • 即使在可访问性中勾选应用程序,AXIsProcessTrustedWithOptions 也不会返回 true

    As this question https stackoverflow com questions 17693408 enable access for assistive devices programmatically on 10 9

随机推荐

  • leetcode数组刷题总结与分析

    文章目录 小结 数组中元素的计算 子序列 任意元素 题目一 两数之和 题目15 三数的和 17 四数之和 16 最接近三数之和 167 两数之和 输入有序数组 560 和为k的子数组 523 连续的子数组的和 53 最大子数组和 713 乘
  • Shell脚本到底是什么高大上的技术吗?

    本文介绍shell脚本知识 学习前最好有linux命令知识储备 一篇文章看完 下次找工作时简历上请写上会shell脚本 栓Q shell脚本是什么 shell脚本就是一个包含shell命令的脚本 常说的linux命令 也可以认为是shell
  • ArrayList与顺序表

    目录 编辑 一 线性表 二 顺序表 1 接口的实现 1 打印顺序表 2 新增元素 3 判定是否包含某个元素 4 查找某个元素对应的位置下标 5 获取 pos 位置的元素 6 获取顺序表长度 7 给 pos 位置的元素设为 value 更新的
  • C++ 一些学习笔记(三) 内存区域

    C 一些学习笔记 三 内存区域 主要是针对之前学习C的时候一些知识点的遗漏的补充 还有一些我自己觉得比较重要的地方 本文章的主要内容是关于程序内存模型的 内存的分区模型 1 程序运行前 2 程序运行后 3 new操作符 主要是针对之前学习C
  • 华为OD机试 - 路灯照明问题(Java)

    题目描述 在一条笔直的公路上安装了N个路灯 从位置0开始安装 路灯之间间距固定为100米 每个路灯都有自己的照明半径 请计算第一个路灯和最后一个路灯之间 无法照明的区间的长度和 输入描述 第一行为一个数N 表示路灯个数 1 lt N lt
  • 课程设计总结

    1 政府职能部门 望细分 具体 课程压缩所致 2 企业家 结构好 利于规划 参考 强烈希望协调与管理融合进来 3 工程师 技术人员 指导行强 望精化 深化 细化 4 学生 利于未来规划 创业 就业 发展 学习方向等等 老师总结课程缺陷 1
  • 虚拟机VMware的安装及使用

    一 虚拟机VMware的安装 1 准备工作 1 需要软件VMware安装包 VMware下载地址 http www uzzf com soft 51188 html 2 需要一个系统镜像 windows系统 http www xitongc
  • 【计算机视觉】最后显示的CIFAR-100数据集照片很模糊怎么解决?

    文章目录 一 前言 二 如何解决 2 1 使用图像增强技术 2 2 使用插值方法 2 3 使用更高分辨率的图像数据集 2 4 手动调整图像尺寸 三 总结 一 前言 如果从CIFAR 100数据集加载的图像显示模糊 可能有几个可能的原因 分辨
  • 小程序中里的bindinput_微信小程序中input标签的使用方法(附代码)

    本篇文章给大家带来的内容是关于微信小程序中input标签的使用方法 附代码 有一定的参考价值 有需要的朋友可以参考一下 希望对你有所帮助 在开发过程中经常遇到这样的需求 用户只能输入数字并且只保留小数点两位 虽然我们可以在提交表单的时候进行
  • [ASM C/C++] C函数调用分析

    在执行程序时 操作系统为进程分配一块栈空间来保存函数栈帧 esp寄存器总是指向栈顶 x86平台上这个栈是从高地址向低地址增长的 每次调用一个函数都要分配一个栈帧来保存参数和局部变量 C函数参数是按从右到左的顺序入栈的 各个堆栈桢之间是通过把
  • 多线程(1):互斥锁

    leetcode 1114题 按序打印 给你一个类 public class Foo public void first print first public void second print second public void thi
  • 【Unity Shader】Shadow Caster、RenderType和_CameraDepthTexture

    当我们制作某些屏幕特效时 需要取到屏幕的深度图或法线图 比如ssao 景深等 另外像是制作软粒子shader 体积雾等也需要取到深度图 以计算深度差等 unity提供了两个内置的纹理 CameraDepthTexture和 CameraDe
  • fabric 环境快速搭建--Ubuntu20.04系统下使用fabric官方脚本搭建

    由于是初识hyper ledger fabric在安装的时候遇到了很多的问题 最后在师兄的帮助下终于删了从头到尾安装了一遍 因此想记录一下 并且给和我遇到相同问题的小伙伴提供一些帮助 如果你是萌新 找我就对啦 一 下载虚拟机VMware 直
  • 纯css画三角形及气泡样式的简单画法

    在做项目的过程中 遇到了要写一个气泡的样式 先布局了矩形部分 但小三角形的旗气泡遇到一点困难 后来梳理了一下 以此记录 首先是三角形的画法 三角形的原理就是矩形 然后分成四个三角形 一般使用border来画一个三角形 如下图所示 我们给一个
  • 云服务器木马文件该如何应对,云服务器木马入侵怎么办?服务器中木马怎么排查?...

    由于云服务器的扩展方便 并且能够减少硬件方面的维护成本 因此使用云服务器的用户数量越来越多 但是云服务器也同样存在安全方面的隐患 被入侵的案列也是时有发生 那么云服务器木马入侵怎么办 服务器中木马怎么排查 我们来了解下吧 云服务器木马入侵怎
  • java中抽象工厂模式_Java设计模式之抽象工厂模式

    转自http blog csdn net jason0539 article details 44976775 本文继续介绍23种设计模式系列之抽象工厂模式 前面已经介绍过简单工厂模式和工厂方法模式 这里继续介绍第三种工厂模式 抽象工厂模式
  • js倒计时

    html部分代码 div class time span 60 span span s span div js部分代码 var second document getElementById second var m 60 var time
  • 计算机产业能否迅速发展,工控机产业迅速发展:未来体系结构将更具交互性与可操作性...

    工控机 Industrial Personal Computer IPC 即工业控制计算机 是一种采用总线结构 对生产过程及机电设备 工艺装备进行检测与控制的工具总称 工控机具有重要的计算机属性和特征 如具有计算机CPU 硬盘 内存 外设及
  • 50行Python代码实现代理服务器的详细教程

    代理服务器是一种位于客户端与目标服务器之间的中间服务器 它可以代表客户端发送请求 并将响应返回给客户端 通过搭建自己的代理服务器 我们可以实现请求的拦截 修改和转发等功能 本文将为大家介绍如何使用50行Python代码实现代理服务器 一 准
  • [QT编程系列-37]:数据存储 - 日志文件、日志等级的支持:qDebug、Log4Qt

    目录 1 概述 2 qDebug 2 1 概述 2 2 qDebug对调试等级的支持 通过不同的宏来实现 2 3 qt日志等级的设置 1 概述 在 Qt 中 日志文件的支持通常是通过日志库 日志框架或自定义代码实现的 Qt 本身没有提供内置