Qt—帮助系统

2023-11-19

一个完善的应用程序应该提供尽可能丰富的帮助信息。Qt中可以使用工具提示、状态提示以及“What’s This”等简单的帮助提示,也可以使用Qt Assistant来提供强大的在线帮助。

简单的帮助提示

已经讲到了工具提示和状态提示,这里简单介绍“What’s This”帮助提示运行一个对话框窗口时会看到,在标题栏中有一个“?”图标,按下它就会进入“WhatThis”模式,这时如果哪个部件设置了“What’s This”帮助提示,那么当鼠标移动到它面时就会弹出一个悬浮的文本框显示相应的帮助提示。下面来看一个具体例子。
在这里插入图片描述

新建Qt Widgets应用项目名称为mywhatsthis,类名为MainWindow ,基类保持QMainWindow不变。建完项目后,单击 mainwindow.ui文件进入设计模式。

在界面上单击,在弹出的级联多单中选择“改变‘这是什么’"项,则弹出“编辑这是什么”对话框,可以在这里输入文本者添加图片来设置“What’s This”帮助提示。在这里插入图片描述

这里输入“这是主窗口”,然后将文本改红色,最后单击“确定”按钮关闭该对话框。现在运行程序,按下Shift+F1键就可以显示提示信息了。

点击主界面会显示这是主窗口

有时也想添加一个“?”图标进入“What’s This”模式,这可以通过在代码中使用QWhatsThis类来实现。现在进入mainwindow.cpp文件中,先添加头文件#incluc< QWhatsThis>,然后在构造函数中添加如下代码:

  QAction *action = QWhatsThis::createAction(this);
    ui->mainToolBar->addAction(action);

这里使用了QWhatsThis类的 createAction()函数创建了一个“What’s This”图标,然后将它添加到了工具栏中。
在这里插入图片描述

运行程序,按下“What’s This”图标,并在主界面上单击就可以显示提示信息了。

另外,QWhatsThis类还提供了enter WhatsThisMode()来进入“What’s This”模式。要为一个部件提供“What’s This”提示,也可以在代码中通过调用该部件的set WhatsThis()函数来实现。

要进行详细的功能和使用的介绍,则需要提供HTML格式的帮助文本。在程序中可以通过调用Web浏览器或者使用QTextBrowser来管理和应用这些HTML文件。不过,Qt提供了更加强大的工具,那就是Qt Assistant,它支持索引和全文检索,而且可以为多个应用程序同时提供帮助,可以通过定制Qt Assistant来实现强大的在线帮助系统。

定制 Qt Assistant

需要先做些准备:
①创建HTML格式的帮助文档;
②创建Qt帮助项目(Qt help project).qhp文件,该文件是XML格式的,用来组织文档,并且使它们可以在Qt Assistant中使用;
③生成Qt压缩帮助(Qt compressed help).qch文件,该文件由.qhp文件生成,是二进制文件;
④创建Qt帮助集合项目(Qt help collection project).qhcp文件,该文件是XML格式的,用来生成下面的.qhc文件;
⑤生成Qt帮助集合(Qt help collection). qhc文件,该文件是二进制文件,可以使Qt Assistant只显示一个应用程序的帮助文档,也可以定制Qt Assistant的外观和一此功能;
⑥在程序中启动Qt Assistant。

下面通过一个具体例子来讲解整个过程。这里还在前一节程序的基础上进行更改。
第一步,创建HTML格式的帮助文档。可以通过各种编辑器(如MicrosoftWord)来编辑要使用的文档,最后保存为HTML格式的文件。

例如,这里创建了5个HTML文件。然后在项目目录中新建文件夹,命名为documentation,再将这些HTML文件放入其中。
在这里插入图片描述

在documentation文件夹中再新建一个images文件夹,往里面复制一个图标图片,以后将作为Qt Assistant的图标,例如,这里使用了yafeilinux.png图片。
在这里插入图片描述

第二步,创建.qhp文件。首先在 documentation文件夹中创建一个文本文件,然后进行编辑,最后另存为
myHelp.qhp(使用UTF-8编码),注意后缀为.qhp。
在这里插入图片描述

文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<QtHelpProject version="1.0">
  <namespace>yafeilinux.myHelp</namespace>
  <virtualFolder>doc</virtualFolder>
  <filterSection>
    <toc>
      <section title="我的帮助" ref="index.html">
        <section title="关于我们" ref="aboutUs.html">
          <section title="关于yafeilinux" ref="about_yafeilinux.html"></section>
          <section title="关于Qt Creator系列教程" ref="about_QtCreator.html"></section>
        </section>
        <section title="加入我们" ref="joinUs.html"></section>
      </section>
    </toc>
    <keywords>
      <keyword name="关于" ref="aboutUs.html"/>
      <keyword name="yafeilinux" ref="about_yafeilinux.html"/>
      <keyword name="Qt Creator" ref="about_QtCreator.html"/>
    </keywords>
    <files>
      <file>about_QtCreator.html</file>
      <file>aboutUs.html</file>
      <file>about_yafeilinux.html</file>
      <file>index.html</file>
      <file>joinUs.html</file>
      <file>images/*.png</file>
    </files>
  </filterSection>
</QtHelpProject>

这个.qhp文件是XML格式的。

  1. 第一行是XML序言,这里指定了编码encoding为UTF-8;

  2. 第二行指定了QtHelpProject版本为1.0;

  3. 第三行指定了命名空间namespace,每一个.qhp文件的命名空间都必须是唯一的,命名空间会成为Qt Assistant页面 URL的第一部分,这个在后面的内容中会涉及;

  4. 第四行指定了一个虚拟文件夹 virtualFolder,这个文件夹并不需要创建,它只是用来区分文件的;再下面的过滤器部分filterSection标签包含了目录表、索引和所有文档文件的列表。过滤器部分可以设置过滤器属性,这样以后可以在Qt Assistant中通过过滤器来设置文档的显示有否;不过,因为这里只有一个文档,所以不需要Qt Assistant的过滤器功能,这里也就不需要设置过滤器属性。

目录表toc(table of contents)标签中创建了所有HTML文件的目录,指定了它们的标题和对应的路径,这里设定的目录表为:在这里插入图片描述
然后是 keywords标签,它指定了所有索引的关键字和对应的文件,这些关键字会显示在Qt Assistant的索引页面;

在files标签中列出了所有的文件,也包含图片文件。

第三步,生成.qch文件。这里为了测试创建的文件是否可用,可以先生成.qch文件,然后在Qt Assistant中注册它。

这样运行Qt Assistant就会看到添加的文档了。不过,这一步不是必须的。

从开始菜单打开Qt自带的命令行提示符工具(Qt 5.6 forDesktop),然后使用cd命令跳转到项目目录的documentation目录中,分别输入下面的命令后按下回车:

qhelpgenerator myHelp.qhp - o myHelp.qch
assistant -register myHelp.qch

命令行运行结果如图

在这里插入图片描述
命令运行结果如图9-2所示。注册成功,则显示 Documentation successfully reg-istered提示对话框。

这时在开始菜单中启动Qt Assistant(或者直接在命令行输入 assistant来启动Qt Assistant)可以发现,已经出现了我们的 HTML文档,如图9-3所示。在这里插入图片描述
第四步,创建.qhcp 文件。要想使Qt Assistant 只显示我们自己的帮助文档的最简单方法就是生成帮助集合文件,即.qhc 文件,那么首先要创建.qhcp文件。在
documentation文件夹中新建文本文档,并对其进行编辑,最后另存为myHelp.qhcp(使用UTF-8编码),注意后缀为.qhcp。

这里还要创建一个名为about. txt的文本文件,在其中输入一些该帮助的说明信息,作为Qt Assistant 的 About菜单的显示内容。myHelp.qhcp文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<QHelpCollectionProject version="1.0">
<assistant>
  <title>我的帮助系统</title>
  <applicationIcon>images/yafeilinux.png</applicationIcon>
  <cacheDirectory>cache/myHelp</cacheDirectory>
  <homePage>qthelp://yafeilinux.myHelp/doc/index.html</homePage>
  <startPage>qthelp://yafeilinux.myHelp/doc/index.html</startPage>
  <aboutMenuText>
    <text>关于该帮助</text>
  </aboutMenuText>
  <aboutDialog>
    <file>about.txt</file>
    <icon>images/yafeilinux.png</icon>
  </aboutDialog>
  <enableDocumentationManager>false</enableDocumentationManager>
  <enableAddressBar>false</enableAddressBar>
  <enableFilterFunctionality>false</enableFilterFunctionality>
</assistant>
<docFiles>
  <generate>
    <file>
      <input>myHelp.qhp</input>
      <output>myHelp.qch</output>
    </file>
  </generate>
  <register>
    <file>myHelp.qch</file>
  </register>
</docFiles>
</QHelpCollectionProject>

在assistant标签中对Qt Assistant的外观和功能进行定制,其中设置了标题,图标,缓存目录、主页、起始页、About菜单文本、关于对话框的内容和图标等,还关闭了一些没有用的功能。

缓存目录cacheDirectory是进行全文检索等操作时缓存文件要存放的位置。对于主页homePage和起始页startPage,这里使用了第二步中提到的Qt Assistant页面的URL,这个URL由“qthelp://”开始,然后是在.qhp文件中设置的命名空间,然后是虚拟文件夹,最后是具体的HTML文件名。

因为Qt Assistant可以添加或者删除文档来为多个应用程序提供帮助,但是这里只是为一个应用程序提供帮助,并且不希望删除我们的文档,所以禁用了文档管理器documentation manager;这里的文档集很小,而且只有一个过滤器部分,所以也关闭了地址栏address bar和过滤器功能filter functionality。

虽然第三步中已经生成了.qch文件并且在Qt Assistant中进行了注册,但那只是为了测试文件是否可用,其实完全可以跳过第三步,因为这里的docFiles标签中就完成了这一步的操作。不过与第三步不同的是,第三步是在默认的集合文件中注册的,而这里是在我们自己的集合文件中注册的。

第五步,生成.qhc文件。在命令行输入如下命令:

qcollectiongenerator myHelp.qhcp-o myHelp.qhc

为了测试定制的Qt Assistant ,输入如下命令:

assistant -collectionFile myHelp.qhc

这里在运行Qt Assistant时指定了集合文件为自己的.qhc文件,所以运行后只会显示自己的HTML文档。可以看到,现在Qt Assistant的图标也更改了,选择“帮助→关于该帮助”菜单项,这里是前面添加的about.txt文件的内容。

第六步,在程序中启动Qt Assistant。这里先要将Qt安装目录的bin目录中的assistant. exe程序复制到项目目录的documentation目录中。然后在上一节的程序中进行更改。为了启动Qt Assistant,须先创建了一个Assistant类。

首先向项目中添加新文件,模板选择C++类,类名为Assistant,基类不填写。完成后将assistant.h文件更改如下:

#ifndef ASSISTANT_H
#define ASSISTANT_H
#include <QString>
class QProcess;

class Assistant
{
public:
    Assistant();
    ~Assistant();
    void showDocumentation(const QString &file);
private:
    bool startAssistant();
    QProcess *proc;
};

#endif // ASSISTANT_H

Assistant类中主要是使用QProcess类创建一个进程来启动Qt Assistant,进程的知识会在第19章讲解。更改assistant.cpp文件的内容如下:

#include <QByteArray>
#include <QProcess>
#include <QMessageBox>
#include "assistant.h"

Assistant::Assistant()
    : proc(0)
{
}

Assistant::~Assistant()
{
    if (proc && proc->state() == QProcess::Running) {
        // 试图终止进程
        proc->terminate();
        proc->waitForFinished(3000);
    }
    // 销毁proc
    delete proc;
}

// 显示文档
void Assistant::showDocumentation(const QString &page)
{
    if (!startAssistant())
        return;
    QByteArray ba("SetSource ");
    ba.append("qthelp://yafeilinux.myHelp/doc/");
    proc->write(ba + page.toLocal8Bit() + '\n');
}

// 启动Qt Assistant
bool Assistant::startAssistant()
{
    // 如果没有创建进程,则新创建一个
    if (!proc)
        proc = new QProcess();

    // 如果进程没有运行,则运行assistant,并添加参数
    if (proc->state() != QProcess::Running) {
        QString app = QLatin1String("../myWhatsThis/documentation/assistant.exe");
        QStringList args;
        args << QLatin1String("-collectionFile")
             << QLatin1String("../myWhatsThis/documentation/myHelp.qhc");
        proc->start(app, args);
        if (!proc->waitForStarted()) {
            QMessageBox::critical(0, QObject::tr("my help"),
                                  QObject::tr("Unable to launch Qt Assistant (%1)").arg(app));
            return false;
        }
    }
    return true;
}

startAssistant()函数中使用QProcess创建了一个进程来启动Qt Assistant,这里使用了命令行参数来使用帮助集合文件, assistant.exe和 myHelp.qhc都使用了相对地址;在showDocumentation()函数中可以指定具体的页面作为参数来使Qt Assistant显示指定的页面;在析构函数中,如果进程还在运行,则终止进程,最后销毁了进程指针。

下面使用Assistant类来启动Qt Assistant。在 mainwindow.h文件中先添加前置声明:

class Assistant;

再添加private对象指针声明:

Assistant *assistant;

然后添加一个私有槽:

private slots:
void startAssistant();

在这里插入图片描述

转到mainwindow.cpp,添加头文件#include"assistant.h"
然后在构造函数中添加如下代码:

 QAction *help = new QAction("help",this);
    ui->mainToolBar->addAction(help);
    connect(help, &QAction::triggered, this, &MainWindow::startAssistant);

    // 创建Assistant对象
    assistant = new Assistant;

这里创建了一个help动作,并将他添加到工具栏中,可以使用该动作启动Qt Assistant。

下面添加statrAssistant()槽的定义:

void MainWindow::startAssistant()
{
    // 按下“help”按钮,运行Qt Assistant,显示index.html页面
    assistant->showDocumentation("index.html");
}

最后在析构函数中销毁assistant指针,即在MainWindow::~MainWindow()函数中代码:

MainWindow::~MainWindow()
{
    delete ui;
    // 销毁assistant
    delete assistant;
}

现在运行程序,按下工具栏上的 help动作就可以启动Qt Assistant了。

这里还要提示一下,如果要发布该程序,那么需要将documentation目录复制到发布目录中,这时运行程序,还会提示缺少一些dll文件,那么就可以根据提示在Qt安装目录的 bin目录中将相应的dll文件复制过来。

对应这个例子,可以在帮助中通过Simple Text Viewer Example关键字查看。

QtAssistant的定制可以通过Customizing Qt Assistant关键字查看。The Qt HelpFramework关键字对应的文档中还讲解了使用QHelpEngine的 API将帮助内容直接嵌入到应用程序中,感兴趣的读者可以参考一下。

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

Qt—帮助系统 的相关文章

  • Qt 人工鼠标点击无法正常工作

    小玩具应用程序可以在这里找到 http gist github com 517445 http gist github com 517445 我正在尝试将人工鼠标事件发送到小部件 我使用QApplication sendEvent为此 接下
  • Qt qDebug() 在 Windows shell 中不起作用

    我正在使用一个qDebug Qt 框架的printf屏幕上有东西 当我从 Qt Creator 运行应用程序时它工作得很好 但是当我尝试从 Windows 执行它时cmd它什么也没显示 为什么会发生这种情况 你必须添加 CONFIG con
  • QT:删除QGridLayout中QLabel之间的空格

    我将一些具有不同颜色的 QLabels 添加到 QGridLayout 作为 QWidget 的布局 现在我在每个 Qlabel 与下一个 Qlabel 之间有一个间距 我想将其删除 我尝试将标签的边距设置为 0 将 GridLayout
  • 如何去除QWizard中的水平线?

    我正在研究一个样式表QWizard我想删除按钮上方的水平线 我尝试递归浏览所有小部件并将其边框设置为无 但似乎没有任何小部件具有此边框 这是我的代码 可以找到完整的可构建示例here https gist github com ardeid
  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • QTableView 并双击一个单元格

    我正在开发测试用例编辑器 该编辑器包含 USART 传输和接收数据包格式 编辑器是一个表格视图 发送和接收数据包的长度为八个字节 例如 0x01 0x02 0x03 0x08 它在我的第五和第六栏中 现在 我希望此列中的单元格为只读 但是当
  • 如何在 Qt 应用程序中嵌入 Python 解释器?

    有没有一种简单的方法可以将 Python 解释器嵌入到 Qt 应用程序中 如果可能的话 我希望有一个跨平台的解决方案 这就是目的PythonQt http pythonqt sourceforge net 它支持 Windows Linux
  • Qt中用于线程间通信的类设计

    问题陈述 用相机跟踪物体并相应地移动相机的方位角和仰角 Process 相机获取物体的图像 处理相机的每一帧以查找物体 应该被跟踪 并将每帧中生成的信息传递给机械设备 万向节 以平移和倾斜方式移动摄像机 Design 主 Gui 在一个线程
  • QFileSystemModel setRootPath

    我正在尝试创建一个 Qt 应用程序来显示文件夹 Mac OS 中的 Users 文件夹 的内容 这是代码 QFileSystemModel dirModel new QFileSystemModel dirModel gt setRootP
  • QML 列表视图拖放

    我想创建两个 qml 列表视图 可以执行两个功能 拖放一个列表中的项目以更改项目的顺序 跨列表拖放项目 项目将从一个列表中删除并添加到另一个列表中 根据 Qt 文档中的拖放示例 我决定创建两个访问同一列表模型的列表视图 列表模型中的每个项目
  • Q风格所有权

    在 Qt 应用程序中使用样式时 我遇到了一个有趣的问题QStyle所有权 QStyle继承自QObject 通常接受QObject parent作为构造函数参数来管理其子级的生命周期 但QStyle的构造函数没有此构造函数参数 第一个问题
  • 为什么 QT 设计器重新调整大小或不允许我缩小或展开小部件或按钮?

    很多时候 在使用 QT 设计器时 我发现自己需要通过缩小或扩展来调整事物的大小 每当我尝试这样做时 程序都不允许我这样做 而只是恢复到将对象放置在窗口中时给我的原始默认大小 无论我的布局如何 为什么要这样做 是否有可能改变这一点 以便我可以
  • 如何将 QFile 与 std::iostream 一起使用?

    是否可以像 std iostream 一样使用 QFile 我很确定那里一定有一个包装纸 问题是在哪里 我有另一个库 它需要 std istream 作为输入参数 但在我的程序中 此时我只有一个 QFile 我使用以下代码提出了自己的解决方
  • 使 QLabel 的像素图透明

    我有一个带有 QLabel 和像素图的主窗口 我想让它透明 或不那么不透明 我正在使用下面的代码 ui gt label gt setAttribute Qt WA TranslucentBackground ui gt label gt
  • 是否可以根据 QSlider 的位置来改变其手柄的颜色?

    我非常清楚如何通过样式表自定义 QSlider 但我想知道是否可以执行以下操作 我希望滑块的手柄从蓝色变为黄色 当设置在左侧时 它是蓝色的 设置在左侧时 它是蓝色的 当你将它向右移动时 它会出现从蓝色到黄色的渐变 如果可以通过样式表 如何实
  • Qt:更改 Mac OS X 上的应用程序 QMenuBar 内容

    我的应用程序对多个 页面 使用 QTabWidget 其中顶级菜单根据用户所在的页面而变化 我的问题是 尝试重新创建菜单栏的内容会导致严重的显示问题 它在除 Mac OS X 之外的所有平台上按预期使用第一种和第三种样式 尚未测试第二种 但
  • 使用 QNetworkAccessManager 的 Qt 控制台应用程序

    我正在尝试写一个Qt调用网络服务的应用程序 这是一个控制台应用程序 url 将作为命令行参数传入 我搜索了例如http程序在Qt并找到这个链接 http qt project org doc qt 5 qnetworkaccessmanag
  • 如何为 Windows 安装开源 Qt 库 5 二进制版本

    这个问题具体是关于Qt libraries 5 0 0 for Windows VS 2010 406 MB at http qt project org downloads http qt project org downloads 但我
  • 使用 qbs 构建 qt 应用程序

    我想知道在 Linux 上使用 qbs 编译 构建和创建 Android Qt 应用程序的步骤 我拥有所有必要的工具 目前我可以使用 qmake 创建 apk Qbs 目前不支持构建 Qt Android 应用程序 Qbs v1 4 中引入
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se

随机推荐

  • 阿里云大佬告诉你为什么学不会设计模式,归根到底还是方法不对

    最近总有读者在后台跟我说 工作几年 自己的代码质量似乎没有什么提升 我觉得他的情况非常典型 很多人应该或多或少都有过类似的经历 毕业几年 几乎一直在做复制黏贴的工作 偶尔会遇到原有业务扩展的需求 想简单应付一下完事的话 也不难 无非就是多加
  • 查询水果价格 (15分)

    给定四种水果 分别是苹果 apple 梨 pear 桔子 orange 葡萄 grape 单价分别对应为3 00元 公斤 2 50元 公斤 4 10元 公斤 10 20元 公斤 首先在屏幕上显示以下菜单 1 apple 2 pear 3 o
  • Hadoop学习——MapReduce的简单介绍及执行步骤

    MapReduce概述 MapReduce是一个分布式的计算框架 编程模型 最初由由谷歌的工程师开发 基于GFS的分布式计算框架 后来Cutting根据 Google Mapreduce 设计了基于HDFS的Mapreduce分布式计算框架
  • IDEA修改内存未生效原因和解决

    修改IDEA安装目录下的idea64 exe vmoptions server Xms1024m Xmx2048m XX ReservedCodeCacheSize 2048m 发现IDEA的内存修改并未生效 右下角显示依然是974M 原因
  • windows下进程间通信的(13种方法)

    Windows进程间的通信 迎风的祺 博客园 windows下进程间通信的 13种方法 phymat nico的专栏 CSDN博客 windows进程间通信
  • eclipse报错 parameterized types are only available if source level is 1.5 or greater

    preface 好久没有更新 blog 了 最近在 写新的项目 今天在用eclipse 出现了之前遇到的问题 这里记录下 问题 eclipse 控制台 报错 parameterized types are only available if
  • CUDA+OPENCV+PYTHON tensorflow 源码环境搭建

    CUDA OPENCV PYTHON tensorflow 源码环境搭建 接上文caffe环境安装 https blog csdn net u012350025 article details 104589982 主机环境ubuntu18
  • 基于C++的带权无向图的实现 (五)- 连通图和连通分量

    该系列文章是本人整理的有关带权无向图的数据结构和算法的分析与实现 若要查看源码可以访问我的github仓库 如有问题或者建议欢迎各位指出 目录 基于C 的带权无向图的实现 一 数据结构 基于C 的带权无向图的实现 二 遍历算法 基于C 的带
  • 台式计算机怎么看有没有开独显,台式机独立显卡怎么样打开

    给台式机插入了独立显卡 但不会打开怎么办呢 下面由学习啦小编给你做出详细的台式机独立显卡打开方法介绍 希望对你有帮助 台式机独立显卡打开方法一 把显示器的数据连接线接到独立显卡上 用的就是独立显卡 把显示器的数据线连接在主板的显示输出口上
  • MyEclipse8.5的安装过程

    1 双击进行安装 点Next接受 选择好路径后 等待安装完毕 2 选择路径 3 进入工作台如下图 4 配置Tomcat 工具栏 Window Preferences 5 Myeclipse Servers Tomcat 选择版本 勾选Ena
  • 2029:【例4.15】水仙花数

    2029 例4 15 水仙花数 时间限制 1000 ms 内存限制 65536 KB 提交数 1247 通过数 720 题目描述 求100 999中的水仙花数 若三位数ABC ABC A3 B3 C3 则称ABC为水仙花数 例如153 13
  • springboot2.x默认采用cglib代理,以及配置jdk动态代理的方法

    众所周知 springboot开启AOP需要在启动类加上注解 EnableAspectJAutoProxy 但开发过程中发现即使不加 EnableAspectJAutoProxy 注解 bean还是被代理过 而且是Cglib代理对象 此时在
  • win32下Qt5BLE蓝牙开发笔记

    BLE简介 BLE蓝牙是蓝牙2 0以上的蓝牙模块 经典蓝牙是蓝牙2 0以下的蓝牙 蓝牙分为客户端和服务器两端 经典蓝牙可以通过socket编程进行客户端与服务器之间的通信 与网络socket相似 BLE蓝牙则无法使用这种方式进行通信 BLE
  • ICASSP 2023说话人识别方向论文合集

    今年入选 ICASSP 2023 的论文中 说话人识别 声纹识别 方向约有64篇 初步划分为Speaker Verification 31篇 Speaker Recognition 9篇 Speaker Diarization 17篇 An
  • 算法竞赛当中的思考方法——方法论篇。

    方法论 万物皆朴素的第一性原理 几乎任何领域的任何问题的解决方案 都可以看作是 某个结构上的朴素方法的优化 计算机只能处理规模有限的问题 在给定规模且不考虑效率的情况下 问题一定存在朴素解法 具体手段有直接模拟 利用bit枚举 各种搜索算法
  • Spring Cloud面试8连问,谁顶得住?

    问题一 什么是 Spring Cloud Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序 提供与外部系统的集成 Spring cloud Task 一个生命周期短暂的微服务框架 用于
  • 数据结构-带头双向循环链表的基本实现(C语言,简单易懂,含全部代码)

    链表的概念和结构 概念 链表是一种物理存储结构上非连续 非顺序的存储结构 数据元素的逻辑顺序是通过链表中的指针链接次序实现的 结构 实际中链表的结构非常多样 以下情况组合起来就有8种链表结构 1 单向 双向 2 带头 不带头 3 循环 非循
  • java逆序输出一个整数_Java实现整数的逆序输出(三种方法)

    Java实现整数的逆序输出和C语言相似 下面我介绍三种方法 第一种 无限制整数的逆序输出 import java util Scanner class Cycle01 public static void main String args
  • Tulsi编译失败问题解决

    Tulsi编译失败 Xcode12 4 bazel 4 0 brew 20210218 tulsi最新 解决办法 跑了 usr local Cellar python 2 将这个目录去掉或者改名字为不可用 然后系统默认跑了python3就好
  • Qt—帮助系统

    一个完善的应用程序应该提供尽可能丰富的帮助信息 Qt中可以使用工具提示 状态提示以及 What s This 等简单的帮助提示 也可以使用Qt Assistant来提供强大的在线帮助 简单的帮助提示 已经讲到了工具提示和状态提示 这里简单介