当前位置: 首页 > news >正文

wxWidgets使用wxStyledTextCtrl(Scintilla编辑器)的正确姿势

开发CuteMySQL/CuteSqlite开源客户端的时候,需要使用Scintilla编辑器,来高亮显示SQL语句,作为C/C++领域最成熟稳定又小巧的开源编辑器,Scintilla提供了强大的功能,wxWidgets对Scintilla进行包装后的是控件类:wxStyledTextCtrl。下面我们用正确的姿势来打开使用它。

先看下效果:

我们对该SQL编辑器的需求是:

1.显示行号

2.SQL语法高亮

3.输入SQL智能提示

4.适配DARK风格

好的,我们直接看下源码,程序员还是代码说话,其他都是废话,不多说了。

一、声明wxStyledTextCtrl的子类QSqlEditor

#pragma once
#include <wx/stc/stc.h>
#include <vector>class QSqlEditor : public wxStyledTextCtrl
{...// 重要函数一:初始化编辑器,适配SQL语法,高亮,行号等void setupSqlSyntax(int nSize, const char* face);// 重要函数二:自动弹出智能提示,参数tags为表名,视图,字段名,函数,存储过程等void autoShow(const std::vector<std::string> & tags);// 重要函数三:自动替换光标当前单词void autoReplaceWord();private:......};

二、初始化编辑器,适配SQL语法


void QSqlEditor::setupSqlSyntax(int nSize, const char* face)
{// - lex setup (lex语法解释器配置)SetLexer(wxSTC_LEX_SQL); // 选择SQL解释器// Divide each styling byte into lexical class bits (default: 5) and indicator// bits (default: 3). If a lexer requires more than 32 lexical states, then this// is used to expand the possible states.// 将每个样式字节划分为词法类位(默认值:5)和指示符位(默认值:3)。// 如果词法分析器需要超过 32 个词法状态,则用于扩展可能的状态。// SetStyleBitsEx(5);StyleSetForeground(wxSTC_STYLE_DEFAULT, wxColour(255, 0, 0)); // 编辑器的文本默认的前景色(文本默认的颜色)StyleSetBackground(wxSTC_STYLE_DEFAULT, bkgColor); // 编辑器默认的背景色StyleClearAll(); // 清理编辑器所有的样式// - OtherSetIndent(4); // 缩进4字符SetIndentationGuides(wxSTC_IV_LOOKBOTH); // 显示或隐藏缩进参考线UsePopUpEx(true); // 设置当用户在某些区域上按错鼠标按钮时是否自动显示弹出菜单// Error markerMarkerDefine(0, wxSTC_MARK_ARROW); // 设置用于箭头标记编号的符号,以及(可选)前景色(第三参数)和背景色(第四参数)MarkerSetBackground(0, wxColour(255, 255, 255)); // 设置第0个Marker的背景色MarkerSetForeground(0, wxColour(0, 0, 0)); // 设置第0个Marker的前景色// Font And Size 编辑器的字体和大小wxFont font(wxSize(0, nSize), wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, face);StyleSetFont(wxSTC_STYLE_DEFAULT, font);StyleSetSize(wxSTC_STYLE_DEFAULT, nSize);// - Margins// number margin SetMarginType(0, wxSTC_MARGIN_NUMBER); // 行号边距,将边距设置为数字。此处设置第0个边距是行号数字SetMarginWidth(0, 37); // 设置边距宽度,第0个边距边宽// SetMarginBackground(0, bkgColor); // 注意,这里不生效的原因是SetMarginBackground只对SC_MARGIN_COLOUR类型的margin生效,这里第0边距是wxSTC_MARGIN_NUMBER// folding margin 折叠线边距SetMarginMask(1, wxSTC_MASK_FOLDERS);  // 设置第2个边距为折叠标记SetMarginWidth(1, 12); // 设置边距宽度,第2个边距边宽SetMarginSensitive(1, true); // 使第2个边距对鼠标单击敏感或不敏感。// - Choose folding icons 选择折叠的小图标MarkerDefine(wxSTC_MARKNUM_FOLDEROPEN, wxSTC_MARK_BOXMINUS); // 定义折叠线打开的图标:方框减号MarkerDefine(wxSTC_MARKNUM_FOLDER, wxSTC_MARK_BOXPLUS); // 定义折叠线收缩的图标:方框加号MarkerDefine(wxSTC_MARKNUM_FOLDERSUB, wxSTC_MARK_VLINE); // 定义子折叠线:VLINEMarkerDefine(wxSTC_MARKNUM_FOLDERTAIL, wxSTC_MARK_LCORNER); // 定义折叠线结束的图标:L型拐角MarkerDefine(wxSTC_MARKNUM_FOLDEREND, wxSTC_MARK_BOXPLUSCONNECTED); // 定义折叠线结束的图标:方框加号连接MarkerDefine(wxSTC_MARKNUM_FOLDEROPENMID, wxSTC_MARK_BOXMINUSCONNECTED); // 定义折叠线打开中间的图标:方框减号连接MarkerDefine(wxSTC_MARKNUM_FOLDERMIDTAIL, wxSTC_MARK_LCORNERCURVE); // 定义折叠线中间收尾的图标:T型拐角曲线// - Choose folding icon colours 选择折叠的小图标颜色MarkerSetForeground(wxSTC_MARKNUM_FOLDEROPEN, textColor); // 设置折叠线打开小图标的前景色MarkerSetBackground(wxSTC_MARKNUM_FOLDEROPEN, bkgColor); // 设置折叠线打开小图标的背景色MarkerSetForeground(wxSTC_MARKNUM_FOLDER, textColor); // 设置折叠线收缩小图标的前景色MarkerSetBackground(wxSTC_MARKNUM_FOLDER, bkgColor); // 设置折叠线收缩小图标的背景色MarkerSetForeground(wxSTC_MARKNUM_FOLDERSUB, textColor); // 设置子折叠线的背景色MarkerSetBackground(wxSTC_MARKNUM_FOLDERSUB, textColor); // 设置子折叠线的背景色MarkerSetForeground(wxSTC_MARKNUM_FOLDERTAIL, textColor); // 设置折叠线收缩结束小图标的背景色MarkerSetBackground(wxSTC_MARKNUM_FOLDERTAIL, textColor); // 设置折叠线收缩结束小图标的背景色MarkerSetForeground(wxSTC_MARKNUM_FOLDEREND, textColor); // 设置折叠线结束小图标的前景色MarkerSetBackground(wxSTC_MARKNUM_FOLDEREND, bkgColor); // 设置折叠线结束小图标的背景色MarkerSetForeground(wxSTC_MARKNUM_FOLDEROPENMID, textColor); // 设置折叠线打开中间小图标的前景色MarkerSetBackground(wxSTC_MARKNUM_FOLDEROPENMID, bkgColor); // 设置折叠线打开中间小图标的背景色MarkerSetForeground(wxSTC_MARKNUM_FOLDERMIDTAIL, textColor); // 设置折叠线中间收尾的小图标的前景色MarkerSetBackground(wxSTC_MARKNUM_FOLDERMIDTAIL, textColor); // 设置折叠线中间收尾的小图标的背景色// 行号文本颜色,仅仅对SetMarginType(0, wxSTC_MARGIN_NUMBER);起作用StyleSetForeground(wxSTC_STYLE_LINENUMBER, textColor);// 行号背景颜色	StyleSetBackground(wxSTC_STYLE_LINENUMBER, bkgColor2);// 折叠边背景色SetFoldMarginHiColour(true, bkgColor2);SetFoldMarginColour(true, bkgColor2);// - Set carlet 光标// Color of Carlet 光标的颜色SetCaretForeground(wxColour(0x00CEC0D6));// Width of Carlet 光标大小SetCaretWidth(2);// set the caret blinking time to 400 milliseconds 光标闪烁间隔SetCaretPeriod(400);// - Set caret line colour (设置光标所处行的颜色)SetCaretLineBackground(wxColour(38, 40, 46)); // 光标所处行的背景色SetCaretLineVisible(true); // 显示光标所处行// - Comment block (注释块)StyleSetForeground(wxSTC_SQL_DEFAULT, wxColour(0, 0, 0)); // 默认SQL的前景色StyleSetForeground(wxSTC_SQL_COMMENT, wxColour(32768)); // SQL注释的前景色// - Single comment line (注释行)StyleSetForeground(wxSTC_SQL_COMMENTLINE, wxColour(32768)); // 默认SQL注释的前景色// - SQL number 数字StyleSetForeground(wxSTC_SQL_NUMBER, wxColour(0x002AACB8)); // SQL数字的前景色StyleSetBold(wxSTC_SQL_NUMBER, true); // SQL数字加粗// - SQL string/operator/identifier (字符串/操作符/标识符)StyleSetForeground(wxSTC_SQL_STRING, wxColour(0x00cc99ff)); // SQL字符串的前景色StyleSetForeground(wxSTC_SQL_CHARACTER, wxColour(0x00cc99ff)); // SQL字符的前景色StyleSetForeground(wxSTC_SQL_OPERATOR, wxColour(0x00BCBEC4)); // SQL操作符的前景色StyleSetBold(wxSTC_SQL_OPERATOR, true); // SQL操作符加粗StyleSetForeground(wxSTC_SQL_IDENTIFIER, wxColour(0x00BCBEC4));// SQL标识符的前景色// - Color Of Selection (选中的颜色)SetSelBackground(true, wxColour(49, 106, 197)); // 选中项启用并设置背景色SetSelForeground(true, wxColour(255, 255, 255)); // 选中项启用并设置前景色// Set KeywordswxString keywords(sqlKeyWords);SetKeyWords(0, keywords);// Color Of KeywordStyleSetForeground(wxSTC_SQL_WORD, wxColour(0x00ff9966)); // 0x00CF8E6DStyleSetForeground(wxSTC_SQL_WORD2, wxColour(0x00ff9966));StyleSetForeground(wxSTC_SQL_USER1, wxColour(0x00ff9966));// 自动停顿的字符AutoCompStops(autoStopChars);// ignore the cmd key for CTRL+[key] 忽略CTRL+[key]int  n = static_cast<int>(sizeof(ignoreCtrlKey));for (int i = 0; i < n; i++) {CmdKeyClear(ignoreCtrlKey[i], wxSTC_KEYMOD_CTRL);}// Working Fold SetProperty("fold", "1");SetProperty("fold.compact", "1");SetProperty("fold.html", "1");SetProperty("fold.html.preprocessor", "1");SetProperty("fold.comment", "1");SetProperty("fold.at.else", "1");SetProperty("fold.flags", "1");SetProperty("fold.preprocessor", "1");SetProperty("styling.within.preprocessor", "1");// set tab width to 4SetTabWidth(4);
}

上述初始化代码实现了SQL语法高亮,行号,折叠线,以及适配DARK风格的功能。因此我们的4个需求已经实现了3个,下面我们再用代码实现智能提示。

三、智能提示

智能提示,我们首先需要一个外层QSqlEditor的类QueryPageEditor,该类主要的作用:

1.创建编辑器,并显示到界面上。

2.捕捉QSqlEditor的各类事件。

3.调用QSqlEditor::autoShow函数,实现智能提示。

我们通过捕捉wxStyledTextCtrl的EVT_STC_AUTOCOMP_SELECTION事件,来实现智能提示。声明的代码简略如下:

class QueryPageEditor :  public QPanel<DatabaseSupplier>
{DECLARE_EVENT_TABLE()
public:...
private:...// 编辑器QSqlEditor* editor;// 创建编辑器void createEditor();// 响应EVT_STC_CHARADDED字符输入,智能提示void OnStcCharAdded(wxStyledTextEvent& event);// 响应EVT_STC_AUTOCOMP_SELECTION,自动替换当前单词void OnAutoCSelection(wxStyledTextEvent& event);
}// 事件表
BEGIN_EVENT_TABLE(QueryPageEditor, wxPanel)...EVT_STC_CHARADDED(Config::DATABASE_QUERY_EDITOR_ID, OnStcCharAdded) // 字符输入 EVT_STC_AUTOCOMP_SELECTION(Config::DATABASE_QUERY_EDITOR_ID, OnAutoCSelection) // 提示选择...
END_EVENT_TABLE()// 创建创建编辑器
void QueryPageEditor::createEditor()
{...editor = new QSqlEditor();editor->Create(this, Config::DATABASE_QUERY_EDITOR_ID, wxDefaultPosition, wxDefaultSize, wxNO_BORDER | wxCLIP_CHILDREN);editor->setup(12, FN("Courier New").c_str());editor->SetFocus();...
}// 响应EVT_STC_CHARADDED字符输入,智能提示
void QueryPageEditor::OnStcCharAdded(wxStyledTextEvent& event)
{wxString line, preline, word;line = editor->GetCurLine();if (line.empty()) {return ;}preline = editor->getPrePositionTextOfCurLine();word = editor->getCurWord();size_t curPosInLine = editor->getCurPosInLine();std::vector<std::string> tags = delegate->getTags(line.ToStdString(), preline.ToStdString(), word.ToStdString(), curPosInLine);editor->autoShow(tags);
}// 响应EVT_STC_AUTOCOMP_SELECTION,自动替换当前单词
void QueryPageEditor::OnAutoCSelection(wxStyledTextEvent& event)
{wxString selText = editor->GetSelectedText();if (selText.empty()) {editor->autoReplaceWord();return;}if ((char)selText.at(0) == '<' && (char)selText.Last() == '>') {editor->autoReplaceSelectTag();return;}editor->autoReplaceWord();
}

 然后我们再看下上述类调用两个编辑器实现的函数:

editor->autoShow(tags); // 参数tags : 要提示的单词,比如表名,函数,字段名等

editor->autoReplaceWord(); // 自动替换光标当前的单词

// 自动提示,参数tags : 要提示的单词,比如表名,函数,字段名等
void QSqlEditor::autoShow(const std::vector<std::string>& tags)
{if (tags.empty()) {return;}size_t n = tags.size();size_t sum = 0;std::for_each(tags.begin(), tags.end(), [&sum](const std::string& str) {sum += str.size();});char* itemList = new char[tags.size() + sum];memset(itemList, 0, tags.size() + sum);char * ptr = itemList;for (size_t i = 0; i < n; i++) {std::string tag = tags.at(i);if (i < n - 1) {tag += separator;}memcpy(ptr, tag.c_str(), tag.size());ptr += tag.size();}AutoCompSetSeparator(separator);AutoCompSetIgnoreCase(true);AutoCompSetCaseInsensitiveBehaviour(1);AutoCompStops(autoStopChars);AutoCompShow(0, itemList);delete[] itemList;
}//  自动替换光标当前的单词
void QSqlEditor::autoReplaceWord()
{int curPos = GetCurrentPos();int start = WordStartPosition(curPos, true);int end = WordEndPosition(curPos, true);SetSelection(start, end);wxString text = AutoCompGetCurrentText();replaceSelText(text);AutoCompCancel();
}

好了,最后一个需求:输入SQL智能提示,也完成了。 

四, 完整代码:

Github - 类QSqlEditor代码icon-default.png?t=O83Ahttps://github.com/CuteBitSoft/CuteMySQL/tree/master/src/ui/common/editor

Github - 类QueryPageEditor代码icon-default.png?t=O83Ahttps://github.com/CuteBitSoft/CuteMySQL/tree/master/src/ui/database/rightview/page/editor

相关文章:

wxWidgets使用wxStyledTextCtrl(Scintilla编辑器)的正确姿势

开发CuteMySQL/CuteSqlite开源客户端的时候&#xff0c;需要使用Scintilla编辑器&#xff0c;来高亮显示SQL语句&#xff0c;作为C/C领域最成熟稳定又小巧的开源编辑器&#xff0c;Scintilla提供了强大的功能&#xff0c;wxWidgets对Scintilla进行包装后的是控件类&#xff1a;…...

Spring Boot中Bean的 构造器注入、字段注入和方法注入

在Spring中&#xff0c;依赖注入&#xff08;DI&#xff09;是实现控制反转&#xff08;IoC&#xff09;的一种方式&#xff0c;Spring提供了多种注入方式来将依赖关系注入到Bean中&#xff0c;常见的方式有构造器注入、字段注入和方法注入。下面将详细介绍这三种注入方式。 1…...

深入浅出支持向量机(SVM)

1. 引言 支持向量机&#xff08;SVM, Support Vector Machine&#xff09;是一种常见的监督学习算法&#xff0c;广泛应用于分类、回归和异常检测等任务。自1990年代初期由Vapnik等人提出以来&#xff0c;SVM已成为机器学习领域的核心方法之一&#xff0c;尤其在模式识别、文本…...

梯度下降的数学原理:用泰勒公式剖析梯度下降

梯度下降&#xff08;Gradient Descent&#xff09;是机器学习中非常核心的优化算法&#xff0c;通过不断调整模型参数&#xff0c;让损失函数&#xff08;Loss Function&#xff09;逐渐变小&#xff0c;从而提高模型的性能。损失函数是一个用来衡量预测值与真实值差距的函数&…...

城市应急指挥系统

城市应急指挥系统的重要性 随着现代化城市的高速发展&#xff0c;我们面临着多种应急突发情景&#xff0c;如自然灾害、事故灾难、公共卫生事件以及社会安全事件等。这些事件对城市的安全稳定构成严重威胁&#xff0c;因此&#xff0c;建立一套高效、全面的城市应急指挥系统显…...

pycharm 快捷键

PyCharm 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供了丰富的快捷键来提高开发效率。以下是一些常用的 PyCharm 快捷键&#xff08;基于 Windows/Linux 系统&#xff0c;Mac 系统可能略有不同&#xff09;&#xff1a; 通用快捷键 功能快捷键&a…...

游戏网站大全

http://piano.ssjjss.com/ 钢琴模拟器 https://gangqin.bmcx.com/?tdsourcetags_pcqq_aiomsg#/ 在线钢琴 https://www.gushiwen.cn/ 古诗文; https://www.bilibili.com/video/BV1UEWpeaEQK/ https://bouncyballs.org/ 掉落的球球 https://fakeupdate.net/ 假装升级界面 ht…...

线性代数期末总复习的点点滴滴(1)

一、可逆矩阵、行列式、秩的关系 1.行列式与可逆矩阵的关系 所以&#xff0c;不难看出矩阵可逆的充分必要条件是该矩阵的行列式不为0。 2.接着来看&#xff0c;满秩和矩阵行列式的关系 不难看出满秩和行列式不为0是等价的。 3.再来看&#xff0c;满秩和矩阵可逆的关系 说明了…...

感受野如何计算?

感受野&#xff08;Receptive Field, RF&#xff09;是卷积神经网络&#xff08;CNN&#xff09;中的一个重要概念&#xff0c;它指的是网络中某个特定神经元能够接收到的输入图像上的区域大小。换句话说&#xff0c;感受野定义了输出特征图中的每个单元依赖于输入图像中哪些像…...

0101多级nginx代理websocket配置-nginx-web服务器

1. 前言 项目一些信息需要通过站内信主动推动给用户&#xff0c;使用websocket。web服务器选用nginx&#xff0c;但是域名是以前通过阿里云申请的&#xff0c;解析ip也是阿里云的服务器&#xff0c;甲方不希望更换域名。新的系统需要部署在内网服务器&#xff0c;简单拓扑图如…...

解决 Ubuntu 20.04 和 ROS Noetic 中的 No Module Named ‘rospkg‘ 错误

解决 Ubuntu 20.04 和 ROS Noetic 中的 “No Module Named ‘rospkg’” 错误 在 Ubuntu 20.04 系统上运行 ROS Noetic 时&#xff0c;遇到了一个常见错误&#xff1a;“缺少 rospkg 模块”。这种问题主要是由于 Python 环境配置不当所导致。以下是对该问题的详细分析&#xf…...

day14-16系统服务管理和ntp和防火墙

一、自有服务概述 服务是一些特定的进程&#xff0c;自有服务就是系统开机后就自动运行的一些进程&#xff0c;一旦客户发出请求&#xff0c;这些进程就自动为他们提供服务&#xff0c;windows系统中&#xff0c;把这些自动运行的进程&#xff0c;称为"服务" window…...

java 根据路径下载文件转换为MultipartFile,并且上传到服务器

直接上代码 controller层 GetMapping("/downloadAndUploadAttachment")UpdateOperationLogging(msg "根据路径下载文件转换为MultipartFile,并且上传到服务器")Operation(summary "根据路径下载文件转换为MultipartFile,并且上传到服务器", de…...

递归实现指数型枚举(递归)

92. 递归实现指数型枚举 - AcWing题库 每个数有选和不选两种情况 我们把每个数看成每层&#xff0c;可以画出一个递归搜索树 叶子节点就是我们的答案 很容易写出每dfs函数 dfs传入一个u表示层数 当层数大于我们n时&#xff0c;去判断每个数字的选择情况&#xff0c;输出被选…...

WebMvcConfigurer和WebMvcConfigurationSupport(MVC配置)

一:基本介绍 WebMvcConfigurer是接口&#xff0c;用于配置全局的SpringMVC的相关属性&#xff0c;采用JAVABean的方式来代替传统的XML配置文件&#xff0c;提供了跨域设置、静态资源处理器、类型转化器、自定义拦截器、页面跳转等能力。 WebMvcConfigurationSupport是webmvc的…...

HIPT论文阅读

题目《Scaling Vision Transformers to Gigapixel Images via Hierarchical Self-Supervised Learning》 论文地址&#xff1a;[2206.02647] Scaling Vision Transformers to Gigapixel Images via Hierarchical Self-Supervised Learning 项目地址&#xff1a;mahmoodlab/HI…...

完全二叉树的权值(蓝桥杯2019年试题G)

给定一棵包含N个节点的完全二叉树&#xff0c;树上的每个节点都有一个权值&#xff0c;按从上到小、从左到右的顺序依次是A1、A2……An,&#xff08;1&#xff0c;2&#xff0c;n为下标。&#xff09;如下图所示。 现在&#xff0c;小明要把相同深度的节点的权值加到一起&#…...

用adb命令给APP做压力测试,有什么不同?

压力测试 app做压力测试目的是模拟用户在使用软件时随意向软件发出指令&#xff0c;例如操作app的点击&#xff0c;滑动&#xff0c;返回等一系列随机事件&#xff0c;来检测app的承受能力 第一步&#xff1a;手机安装包需要待测的app 第二步&#xff1a;输入adb start-ser…...

Spring 6 实现 Bean 异步初始化,减少项目启动时间

在 Spring 6 中&#xff0c;异步初始化 Bean 为优化应用启动性能提供了有力手段。通过让特定的 Bean 在后台进行初始化&#xff0c;避免其阻塞应用的启动流程&#xff0c;从而显著缩短应用从启动到对外提供服务的时间。 一、基础环境搭建 首先&#xff0c;确保项目的依赖中引入…...

【案例80】麒麟操作系统无法使用Uclient访问NC65

问题现象 麒麟操作系统&#xff0c;安装Uclient&#xff0c;添加应用后无法看到登录界面&#xff0c;一直在转圈。 问题分析 进入到Uclient的工作目录 发现在工作目录下&#xff0c;无相关app.log生成。 查看Uclient的main.log发现&#xff0c;有大量的报错与Uclient下的sha…...

一个签名笔迹量化分析专家辅助系统

写在正文前 关于签名的鉴定有国家制定的标准&#xff0c;一个小册子&#xff0c;好像是 80多页 &#xff0c;俺看的还是 2000年版的&#xff0c;现在应该有很多新版本了。这方面有很多教材和书籍。而且国家也有专门的评审。 正文开始 这是翻老硬盘时发现的&#xff0c;09年左…...

富途证券C++面试题及参考答案

C++ 中堆和栈的区别 在 C++ 中,堆和栈是两种不同的内存区域,它们有许多区别。 从内存分配方式来看,栈是由编译器自动分配和释放的内存区域。当一个函数被调用时,函数内的局部变量、函数参数等会被压入栈中,这些变量的内存空间在函数执行结束后会自动被释放。例如,在下面的…...

鸿蒙app封装 axios post请求失败问题

这个问题是我的一个疏忽大意&#xff0c;在这里记录一下。如果有相同问题的朋友&#xff0c;可以借鉴。 当我 ohpm install ohos/axios 后&#xff0c;进行简单post请求验证&#xff0c;可以请求成功。 然后&#xff0c;我对axios 进行了封装。对axios 添加请求拦截器/添加响…...

详解 Qt WebEngine 模块

Qt WebEngine 模块是 Qt 提供的一个功能强大的模块&#xff0c;用于在 Qt 应用中嵌入和显示现代网页内容。该模块基于 Chromium 引擎&#xff0c;支持丰富的 Web 技术&#xff08;如 HTML5、CSS3、JavaScript 等&#xff09;&#xff0c;适合需要嵌入网页浏览、Web 应用、JavaS…...

常用的缓存技术都有哪些

在计算机科学和软件开发领域&#xff0c;缓存技术是提高系统性能和响应速度 1. 本地缓存&#xff08;Local Cache&#xff09;&#xff1a; • 存在于应用程序本地内存中的缓存&#xff0c;用于存储频繁访问的数据&#xff0c;以减少对外部存储&#xff08;如数据库&#xff09…...

MySQL通过日志恢复数据的步骤

试验环境&#xff1a;Windows Server2012 r2、MySql-8.0.27-winx64。 1、先检查MySQL有没有开启binlog日志 通过下面的SQL命令查看MySQL是否开启日志以及日志文件的位置&#xff1a; show variables like %log_bin% 执行结果如下图所示&#xff1a; 图中&#xff0c;log_bi…...

SQL Server 表值函数使用示例

在 SQL Server 中,表值函数(Table-Valued Functions, TVFs)是一种用户定义函数,它可以返回一个表。表值函数有两种类型:内联表值函数(Inline Table-Valued Function)和多语句表值函数(Multi-Statement Table-Valued Function)。下面分别介绍这两种类型的表值函数及其使…...

计算机网络之多路转接epoll

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 计算机网络之多路转接epoll 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…...

BPMN与一般的流程图区别在那里?

1. 语义和标准性 BPMN&#xff08;业务流程建模符号&#xff09; 基于标准语义&#xff1a;BPMN是一种标准化的业务流程建模语言&#xff0c;拥有一套严谨的语义规范。它由国际对象管理组织&#xff08;OMG&#xff09;维护&#xff0c;定义了事件、活动、网关和流向等元素的确…...

内容与资讯API优质清单

作为开发者&#xff0c;拥有一套API合集是必不可少的。这个开发者必备的API合集汇集了各种实用的API资源&#xff0c;为你的开发工作提供了强大的支持&#xff01;无论你是在构建网站、开发应用还是进行数据分析&#xff0c;这个合集都能满足你的需求。你可以通过这些免费API获…...

uniapp获取内容高度

获取内容高度 getNewsHieght(index) {uni.createSelectorQuery().select(.content_${index}).boundingClientRect(rect > {console.log(打印该盒子的元素, rect.height);swiperHeight.value rect.height// console.log(打印swiperHeight的数值,this.swiperHeight);}).exec…...

Unity局部和世界坐标系相互转换的实现原理

注&#xff1a;本篇是基于唐老师的学习视频做的一些理论实践&#xff0c;需要提前知道一些线性代数的基础知识&#xff0c;原视频链接&#xff1a; 8.数学基础知识学习说明_哔哩哔哩_bilibili 前期准备&#xff1a; 知识点①&#xff1a; Unity中需要遵守的设定&#xff1a;…...

数据结构(Java版)第六期:LinkedList与链表(一)

目录 一、链表 1.1. 链表的概念及结构 1.2. 链表的实现 专栏&#xff1a;数据结构(Java版) 个人主页&#xff1a;手握风云 一、链表 1.1. 链表的概念及结构 链表是⼀种物理存储结构上⾮连续存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引⽤链接次序实现的。与火车…...

浅谈文生图Stable Diffusion(SD)相关模型基础

1.U-Net模型基础 1.基础概念 UNet模型是一种基于卷积神经网络的图像分割算法&#xff0c;它采用了U型的网络结构&#xff0c;由编码器&#xff08;下采样路径&#xff09;和解码器&#xff08;上采样路径&#xff09;两部分组成。 编码器负责提取输入图像的特征&#xff0c;…...

7-10 函数和排序练习一

输入n个数(n<10)&#xff0c;对其中的素数进行排序&#xff08;剔除非素数&#xff09;&#xff0c;输出排序后的数列结果。 建议&#xff1a;编写若干函数&#xff0c;用以判断素数&#xff0c;以及对数组进行排序。 输入格式: 第一行是一个正整数t,表示测试的总数。 然后…...

【FFmpeg 教程 一】截图

本章使用 ffmpeg 实现观影中经常会用到的功能&#xff0c;截图。 以下给出两种方式。 课程需具备的基础能力&#xff1a;Python 1. 使用 subprocess 调用 FFmpeg 命令 import subprocess def extract_frame(video_path, output_image_path, timestamp"00:00:05")&qu…...

Python选择题训练工具:高效学习、答题回顾与音频朗读一站式体验

一、引言 随着人工智能技术的不断进步&#xff0c;传统的教学方式已经逐渐向智能化、互动化转变。在众多英语测试题型中&#xff0c;选择题作为一种高效的方式被广泛应用于各类培训与考试中。为了帮助学生高效学习与自测&#xff0c;本篇文章将采用Python编写一款基于 Python …...

【Python】使用Selenium 操作浏览器 自动化测试 记录

【自动化】Python SeleniumUtil 工具 开启开发者模式 自动安装油猴用户脚本等-CSDN博客文章浏览阅读389次。【自动化】Python SeleniumUtil 工具。https://blog.csdn.net/G971005287W/article/details/144565691?spm1001.2014.3001.5501【学习记录】浏览器指纹相关学习记录&am…...

汽车IVI中控开发入门及进阶(42):OpenVG

概览: OpenVG是一个无版权、跨平台的API,它为高级用户界面和矢量图形库(如SVG)提供了一个低级硬件加速接口。OpenVG主要针对需要便携式加速高质量矢量图形以获得引人注目的用户界面和文本的消费电子产品、手持设备、可穿戴设备和汽车设备,同时使硬件加速能够在非常低的功…...

两点间最短距离 - Dijkstra

一、汇总 算法场景说明参考BFS 树 无权图的搜索 标准BFS默认搜索一条最短路径 改造后可以输出所有最短路径 https://blog.csdn.net/m0_37145844/article/details/144534202DFS走迷宫主要利用回溯算法思想&#xff0c;不保证最短路径https://blog.csdn.net/m0_37145844/articl…...

0002__GPU

国内GPU公司主要包括以下几家‌&#xff1a; ‌摩尔线程‌&#xff1a;摩尔线程被誉为“中国版英伟达”&#xff0c;成立于2019年&#xff0c;由前英伟达全球副总裁张建中创立。该公司已获得425项授权专利&#xff0c;计划上市&#xff0c;目标估值高达1500亿元。摩尔线程的技术…...

StarRocks 排查单副本表

文章目录 StarRocks 排查单副本表方式1 查询元数据&#xff0c;检查分区级的副本数方式2 SHOW PARTITIONS命令查看 ReplicationNum修改副本数命令 StarRocks 排查单副本表 方式1 查询元数据&#xff0c;检查分区级的副本数 # 方式一 查询元数据&#xff0c;检查分区级的副本数…...

基于字节大模型的论文翻译(含免费源码)

基于字节大模型的论文翻译 源代码&#xff1a; &#x1f44f; star ✨ https://github.com/boots-coder/LLM-application 展示 项目简介 本项目是一个基于大语言模型&#xff08;Large Language Model, LLM&#xff09;的论文阅读与翻译辅助工具。它通过用户界面&#xff08…...

【原生js案例】ajax的简易封装实现后端数据交互

ajax是前端与后端数据库进行交互的最基础的工具&#xff0c;第三方的工具库比如jquery,axios都有对ajax进行第二次的封装&#xff0c;fecth是浏览器原生自带的功能&#xff0c;但是它与ajax还是有区别的&#xff0c;总结如下&#xff1a; ajax与fetch对比 实现效果 代码实现 …...

uniapp Native.js 调用安卓arr原生service

有问题&#xff0c;文中的内容不正确 最近搞了个uni小项目&#xff0c;一个定制的小平板&#xff0c;带一个nfc设备&#xff0c;厂家只给了一套安卓原生demo&#xff0c;头一次玩原生安卓&#xff0c;废了好半天劲打出来arr包&#xff0c;想镶进uniapp里&#xff0c;网上查了好…...

关于画火山图(by ggplot2)的一些总结和经验

愿武艺晴小朋友一定得每天都开心! 文献中常用经典的火山图,是展示差异表达基因的利器。每次测完转录组,做实验组和对照组的比较后,都会用到。 我自己也画了不算太多也不算太少的次数。然后最近画的时候忽然间意识到这个可视化方法我经常用,却没系统的整理过,一些tips散…...

组装一台电脑需要哪些硬件设备?点击了解

组装一台电脑是一个既有趣又实用的过程&#xff0c;我们可以根据自己的需求和预算来定制一台完全符合个人使用习惯的计算机。 一、核心部件 1、中央处理器&#xff08;CPU&#xff09; CPU是计算机的“大脑”&#xff0c;负责执行各种计算任务。它的性能直接影响到计算机的运…...

Mac M1使用pip3安装报错

1. Mac系统使用pip3安装组件的时候报”外部管理环境”错误&#xff1a; error: externally-managed-environment 2.解决办法 去掉这个提示 1、先查看当前python版本&#xff1a; python3 --version 2、查找EXTERNALLY-MANAGED 文件的位置&#xff08;根据自己当前使用的pytho…...

在Linux系统安装配置 MySQL 和 hive,hive配置为远程模式

前提&#xff1a;已安装配置好了Hadoop环境&#xff0c;因为hive的底层是Hadoop 1 Mysql安装 搜索Centos7自带的mariadb rpm -qa|grep mariadb 卸载mariadb rpm -e mariadb-libs-5.5.64-1.el7.x86_64 --nodeps 再搜索一次看看是否还存在 rpm -qa|grep mariadb 安装mysql 创…...

亚信安全与方天股份达成战略合作,双向奔赴助力数字化转型

近日&#xff0c;亚信安全科技股份有限公司&#xff08;以下简称“亚信安全”&#xff09;正式与青岛方天科技股份有限公司&#xff08;以下简称“方天股份”&#xff09;签订合作框架协议。双方强强携手&#xff0c;在网络安全运营平台共建、信息化项目安全支撑、政企市场拓展…...