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

QT实现中英文键盘

请添加图片描述

使用Qt中实现中英文键盘,支持各种linux嵌入式设备。
实现思路:需要一个中文字体库,将字体库加载到一个Hash容器,字母和拼音作为key值,对应的中文作为value值。
核心代码:

#include "UKeyBoard.h"
#include "ui_UKeyBoard.h"
#include <QFile>
#include <QKeyEvent>
#include <QDebug>UKeyBoard::UKeyBoard(QWidget *parent) :QWidget(parent),ui(new Ui::UKeyBoard)
{ui->setupUi(this);QFile* file = new QFile(QApplication::applicationDirPath()+"/PinYin_Chinese.txt");file->open(QIODevice::ReadOnly);QString sss = QString::fromUtf8(file->readAll());qDebug()<<sss.size();QStringList ssslist = sss.split("\r\n");foreach (QString var, ssslist) {QStringList pinyin = var.mid(1,var.size() - 1).split(" ");QString word = var.mid(0,1);for (int i = 0; i < pinyin.size(); ++i) {if (m_wordHash.find(pinyin[i]) == m_wordHash.end())m_wordHash.insert(pinyin[i],QStringList()<<word);elsem_wordHash[pinyin[i]].append(word);}}connectInit();
}UKeyBoard::~UKeyBoard()
{delete ui;
}void UKeyBoard::connectInit()
{connect(ui->Key_Q_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_W_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_E_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_R_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_T_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_Y_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_U_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_I_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_O_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_P_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_A_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_S_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_D_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_F_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_G_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_H_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_J_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_K_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_L_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_Z_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_X_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_C_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_V_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_B_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_N_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->Key_M_Btn,&QToolButton::clicked,this,&UKeyBoard::slotKeyBtn);connect(ui->wordBtn1,&QToolButton::clicked,this,&UKeyBoard::slotInputChange);connect(ui->wordBtn2,&QToolButton::clicked,this,&UKeyBoard::slotInputChange);connect(ui->wordBtn3,&QToolButton::clicked,this,&UKeyBoard::slotInputChange);connect(ui->wordBtn4,&QToolButton::clicked,this,&UKeyBoard::slotInputChange);connect(ui->wordBtn5,&QToolButton::clicked,this,&UKeyBoard::slotInputChange);connect(ui->wordBtn6,&QToolButton::clicked,this,&UKeyBoard::slotInputChange);connect(ui->wordBtn7,&QToolButton::clicked,this,&UKeyBoard::slotInputChange);
}
//输入中文
void UKeyBoard::slotInputChange()
{QToolButton* btn = (QToolButton*)sender();QString value = btn->text();QKeyEvent *key = new QKeyEvent(QEvent::KeyPress, 'w', Qt::NoModifier, value.split(" ").last());//通过postEvent将事件key的文本内容发送出去,QApplication::focusWidget()当前窗口中,有光标的控件上QApplication::postEvent(ui->inputEdit->focusWidget(), key); //_currentLineEditm_curWords.clear();ui->selectWordEdit->setText("");ui->selectWordEdit->hide();ui->wordBtn1->setText("");ui->wordBtn2->setText("");ui->wordBtn3->setText("");ui->wordBtn4->setText("");ui->wordBtn5->setText("");ui->wordBtn6->setText("");ui->wordBtn7->setText("");
}
//上一页中文
void UKeyBoard::on_lastPageBtn_clicked()
{if (_index > 0)_index--;QString val = ui->selectWordEdit->text();wordChange(val,_index);
}
//下一页中文
void UKeyBoard::on_nextPageBtn_clicked()
{_index++;QString val = ui->selectWordEdit->text();if (wordChange(val,_index) < 0)_index--;
}
//按键输入
void UKeyBoard::slotKeyBtn()
{QToolButton* btn = (QToolButton*)sender();ui->inputEdit->setFocus();if (_keyType == 0){QString val = ui->selectWordEdit->text();int position = ui->selectWordEdit->cursorPosition();val.insert(position,btn->text());ui->selectWordEdit->setText(val);m_curWords.clear();m_curWords.append(m_wordHash.value(val));for (QHash<QString,QStringList>::const_iterator it = m_wordHash.begin(); it != m_wordHash.end();it++) {if (it.key().indexOf(val) == 0){if (it.key() == val)continue;m_curWords.append(it.value());}}wordChange(val,0);updateSelectInputPos();}else{QString value = btn->text();QKeyEvent *key = new QKeyEvent(QEvent::KeyPress, 'w', Qt::NoModifier, value);//通过postEvent将事件key的文本内容发送出去,QApplication::focusWidget()当前窗口中,有光标的控件上QApplication::postEvent(ui->inputEdit->focusWidget(), key); //_currentLineEdit}}
//更新编辑框大小和状态
void UKeyBoard::updateSelectInputPos()
{if (!ui->selectWordEdit->text().isEmpty()){ui->selectWordEdit->setFocus();ui->selectWordEdit->show();QFontMetrics _metrics(ui->inputEdit->font());QFontMetrics _metrics1(ui->selectWordEdit->font());QString inputVal = ui->inputEdit->text().mid(0,ui->inputEdit->cursorPosition());int inputPos = 5+_metrics.width(inputVal)+ui->inputEdit->x();ui->selectWordEdit->setGeometry(inputPos,ui->inputEdit->y()+3,_metrics1.width(ui->selectWordEdit->text())+6,36);}else{ui->inputEdit->setFocus();ui->selectWordEdit->clear();ui->selectWordEdit->hide();}
}
//中文检索
int UKeyBoard::wordChange(QString val,int index)
{_index = index;if (m_curWords.size() < 7*index)return -1;ui->wordBtn1->setText("");ui->wordBtn2->setText("");ui->wordBtn3->setText("");ui->wordBtn4->setText("");ui->wordBtn5->setText("");ui->wordBtn6->setText("");ui->wordBtn7->setText("");if (m_curWords.size()>7*index)ui->wordBtn1->setText("1 "+m_curWords[7*index]);if (m_curWords.size()>7*index+1)ui->wordBtn2->setText("2 "+m_curWords[7*index+1]);if (m_curWords.size()>7*index+2)ui->wordBtn3->setText("3 "+m_curWords[7*index+2]);if (m_curWords.size()>7*index+3)ui->wordBtn4->setText("4 "+m_curWords[7*index+3]);if (m_curWords.size()>7*index+4)ui->wordBtn5->setText("5 "+m_curWords[7*index+4]);if (m_curWords.size()>7*index+5)ui->wordBtn6->setText("6 "+m_curWords[7*index+5]);if (m_curWords.size()>7*index+6)ui->wordBtn7->setText("7 "+m_curWords[7*index+6]);return 0;
}
//大小写切换
void UKeyBoard::on_capsBtn_clicked()
{if (!_capsType)_capsType = true;else_capsType = false;if (_keyType == 1){if (_capsType){changeKeyType(2);}else{changeKeyType(1);}}else if (_keyType == 2){if (_capsType){changeKeyType(4);}else{changeKeyType(3);}}else if (_keyType == 0){QString val = ui->inputEdit->text();int position = ui->inputEdit->cursorPosition();QString wordVal = ui->wordBtn1->text().split(" ").last();if (wordVal.isEmpty())wordVal = ui->selectWordEdit->text();val.insert(position,wordVal+",");ui->inputEdit->setText(val);ui->inputEdit->setCursorPosition(position+wordVal.size()+1);}ui->inputEdit->setFocus();ui->selectWordEdit->clear();ui->selectWordEdit->hide();ui->wordBtn1->setText("");ui->wordBtn2->setText("");ui->wordBtn3->setText("");ui->wordBtn4->setText("");ui->wordBtn5->setText("");ui->wordBtn6->setText("");ui->wordBtn7->setText("");
}
//删除字符
void UKeyBoard::on_delBtn_clicked()
{QString val = ui->selectWordEdit->text();if (!val.isEmpty()){int cursorPosition = ui->selectWordEdit->cursorPosition()-1;val.remove(cursorPosition,1);ui->selectWordEdit->setText(val);ui->selectWordEdit->setCursorPosition(cursorPosition);m_curWords.clear();m_curWords.append(m_wordHash.value(val));for (QHash<QString,QStringList>::const_iterator it = m_wordHash.begin(); it != m_wordHash.end();it++) {if (it.key().indexOf(val) == 0){if (it.key() == val)continue;m_curWords.append(it.value());}}wordChange(val,0);if (val.isEmpty()){ui->wordBtn1->setText("");ui->wordBtn2->setText("");ui->wordBtn3->setText("");ui->wordBtn4->setText("");ui->wordBtn5->setText("");ui->wordBtn6->setText("");ui->wordBtn7->setText("");ui->selectWordEdit->hide();ui->inputEdit->setFocus();}}else{val = ui->inputEdit->text();int cursorPosition = ui->inputEdit->cursorPosition()-1;val.remove(cursorPosition,1);ui->inputEdit->setText(val);ui->inputEdit->setCursorPosition(cursorPosition);}updateSelectInputPos();
}
//切换键盘类型
void UKeyBoard::on_swithBtn_clicked()
{if (_keyType == 0)_keyType = 1;else if (_keyType == 1)_keyType = 2;else if (_keyType == 2)_keyType = 0;_capsType = false;if (_keyType == 0){changeKeyType(0);ui->swithBtn->setText("EN");}else if (_keyType == 1){changeKeyType(1);ui->swithBtn->setText("123");}else{changeKeyType(3);ui->swithBtn->setText("CN");}ui->inputEdit->setFocus();ui->selectWordEdit->clear();ui->selectWordEdit->hide();
}
//空格
void UKeyBoard::on_spaceBtn_clicked()
{int position = ui->inputEdit->cursorPosition();QString val = ui->inputEdit->text();if (_keyType == 0){QString wordVal = ui->wordBtn1->text().split(" ").last();if (wordVal.isEmpty())wordVal = ui->selectWordEdit->text();val.insert(position,wordVal+" ");ui->inputEdit->setText(val);ui->inputEdit->setCursorPosition(position+wordVal.size()+1);}else{val.insert(position," ");ui->inputEdit->setText(val);ui->inputEdit->setCursorPosition(position+1);}ui->inputEdit->setFocus();ui->selectWordEdit->clear();ui->selectWordEdit->hide();ui->wordBtn1->setText("");ui->wordBtn2->setText("");ui->wordBtn3->setText("");ui->wordBtn4->setText("");ui->wordBtn5->setText("");ui->wordBtn6->setText("");ui->wordBtn7->setText("");
}
//光标左移
void UKeyBoard::on_leftMoveBtn_clicked()
{if (ui->selectWordEdit->text().isEmpty()){if (ui->inputEdit->cursorPosition()-1 < 0)ui->inputEdit->setCursorPosition(ui->inputEdit->text().size());elseui->inputEdit->setCursorPosition(ui->inputEdit->cursorPosition()-1);}else{if (ui->selectWordEdit->cursorPosition()-1 < 0)ui->selectWordEdit->setCursorPosition(ui->selectWordEdit->text().size());elseui->selectWordEdit->setCursorPosition(ui->selectWordEdit->cursorPosition()-1);}
}//光标右移
void UKeyBoard::on_rightMoveBtn_clicked()
{if (ui->selectWordEdit->text().isEmpty()){if (ui->inputEdit->cursorPosition()+1 > ui->inputEdit->text().size())ui->inputEdit->setCursorPosition(0);elseui->inputEdit->setCursorPosition(ui->inputEdit->cursorPosition()+1);}else{if (ui->selectWordEdit->cursorPosition()+1 > ui->selectWordEdit->text().size())ui->selectWordEdit->setCursorPosition(0);elseui->selectWordEdit->setCursorPosition(ui->selectWordEdit->cursorPosition()+1);}
}void UKeyBoard::on_enterBtn_clicked()
{this->hide();
}//切换键盘类型
void UKeyBoard::changeKeyType(int type)
{ui->selectWordEdit->setText("");ui->wordBtn1->setText("");ui->wordBtn2->setText("");ui->wordBtn3->setText("");ui->wordBtn4->setText("");ui->wordBtn5->setText("");ui->wordBtn6->setText("");ui->wordBtn7->setText("");if (type == 0){_capsType = false;ui->Key_A_Btn->setText("a");ui->Key_S_Btn->setText("s");ui->Key_D_Btn->setText("d");ui->Key_F_Btn->setText("f");ui->Key_G_Btn->setText("g");ui->Key_H_Btn->setText("h");ui->Key_J_Btn->setText("j");ui->Key_K_Btn->setText("k");ui->Key_L_Btn->setText("l");ui->Key_Q_Btn->setText("q");ui->Key_W_Btn->setText("w");ui->Key_E_Btn->setText("e");ui->Key_R_Btn->setText("r");ui->Key_T_Btn->setText("t");ui->Key_Y_Btn->setText("y");ui->Key_U_Btn->setText("u");ui->Key_I_Btn->setText("i");ui->Key_O_Btn->setText("o");ui->Key_P_Btn->setText("p");ui->Key_Z_Btn->setText("z");ui->Key_X_Btn->setText("x");ui->Key_C_Btn->setText("c");ui->Key_V_Btn->setText("v");ui->Key_B_Btn->setText("b");ui->Key_N_Btn->setText("n");ui->Key_M_Btn->setText("m");ui->capsBtn->setIcon(QIcon());ui->capsBtn->setText(".");}else if (type == 1){_capsType = false;ui->Key_A_Btn->setText("a");ui->Key_S_Btn->setText("s");ui->Key_D_Btn->setText("d");ui->Key_F_Btn->setText("f");ui->Key_G_Btn->setText("g");ui->Key_H_Btn->setText("h");ui->Key_J_Btn->setText("j");ui->Key_K_Btn->setText("k");ui->Key_L_Btn->setText("l");ui->Key_Q_Btn->setText("q");ui->Key_W_Btn->setText("w");ui->Key_E_Btn->setText("e");ui->Key_R_Btn->setText("r");ui->Key_T_Btn->setText("t");ui->Key_Y_Btn->setText("y");ui->Key_U_Btn->setText("u");ui->Key_I_Btn->setText("i");ui->Key_O_Btn->setText("o");ui->Key_P_Btn->setText("p");ui->Key_Z_Btn->setText("z");ui->Key_X_Btn->setText("x");ui->Key_C_Btn->setText("c");ui->Key_V_Btn->setText("v");ui->Key_B_Btn->setText("b");ui->Key_N_Btn->setText("n");ui->Key_M_Btn->setText("m");ui->capsBtn->setIcon(QIcon(":/img/keyboard-up_1.png"));ui->capsBtn->setIconSize(QSize(28,33));ui->capsBtn->setText("");}else if (type == 2){ui->Key_A_Btn->setText("A");ui->Key_S_Btn->setText("S");ui->Key_D_Btn->setText("D");ui->Key_F_Btn->setText("F");ui->Key_G_Btn->setText("G");ui->Key_H_Btn->setText("H");ui->Key_J_Btn->setText("J");ui->Key_K_Btn->setText("K");ui->Key_L_Btn->setText("L");ui->Key_Q_Btn->setText("Q");ui->Key_W_Btn->setText("W");ui->Key_E_Btn->setText("E");ui->Key_R_Btn->setText("R");ui->Key_T_Btn->setText("T");ui->Key_Y_Btn->setText("Y");ui->Key_U_Btn->setText("U");ui->Key_I_Btn->setText("I");ui->Key_O_Btn->setText("O");ui->Key_P_Btn->setText("P");ui->Key_Z_Btn->setText("Z");ui->Key_X_Btn->setText("X");ui->Key_C_Btn->setText("C");ui->Key_V_Btn->setText("V");ui->Key_B_Btn->setText("B");ui->Key_N_Btn->setText("N");ui->Key_M_Btn->setText("M");ui->capsBtn->setIcon(QIcon(":/img/keyboard-up.png"));ui->capsBtn->setIconSize(QSize(28,33));ui->capsBtn->setText("");}else if (type == 3){ui->Key_A_Btn->setText("-");ui->Key_S_Btn->setText("+");ui->Key_D_Btn->setText("=");ui->Key_F_Btn->setText("/");ui->Key_G_Btn->setText("\\");ui->Key_H_Btn->setText(";");ui->Key_J_Btn->setText("`");ui->Key_K_Btn->setText(",");ui->Key_L_Btn->setText(".");ui->Key_Q_Btn->setText("1");ui->Key_W_Btn->setText("2");ui->Key_E_Btn->setText("3");ui->Key_R_Btn->setText("4");ui->Key_T_Btn->setText("5");ui->Key_Y_Btn->setText("6");ui->Key_U_Btn->setText("7");ui->Key_I_Btn->setText("8");ui->Key_O_Btn->setText("9");ui->Key_P_Btn->setText("0");ui->Key_Z_Btn->setText("[");ui->Key_X_Btn->setText("]");ui->Key_C_Btn->setText("‘");ui->Key_V_Btn->setText("...");ui->Key_B_Btn->setText("¥");ui->Key_N_Btn->setText("。");ui->Key_M_Btn->setText("、");ui->capsBtn->setIcon(QIcon());ui->capsBtn->setText("#+=");}else if (type == 4){ui->Key_A_Btn->setText("!");ui->Key_S_Btn->setText("@");ui->Key_D_Btn->setText("#");ui->Key_F_Btn->setText("$");ui->Key_G_Btn->setText("%");ui->Key_H_Btn->setText("^");ui->Key_J_Btn->setText("&");ui->Key_K_Btn->setText("*");ui->Key_L_Btn->setText("(");ui->Key_Q_Btn->setText(")");ui->Key_W_Btn->setText("_");ui->Key_E_Btn->setText("°");ui->Key_R_Btn->setText("{");ui->Key_T_Btn->setText("}");ui->Key_Y_Btn->setText("|");ui->Key_U_Btn->setText(":");ui->Key_I_Btn->setText("\"");ui->Key_O_Btn->setText("<");ui->Key_P_Btn->setText(">");ui->Key_Z_Btn->setText("?");ui->Key_X_Btn->setText("~");ui->Key_C_Btn->setText("”");ui->Key_V_Btn->setText("“");ui->Key_B_Btn->setText("《");ui->Key_N_Btn->setText("》");ui->Key_M_Btn->setText("—");ui->capsBtn->setIcon(QIcon());ui->capsBtn->setText("123");}
}

完整源码

相关文章:

QT实现中英文键盘

使用Qt中实现中英文键盘&#xff0c;支持各种linux嵌入式设备。 实现思路&#xff1a;需要一个中文字体库&#xff0c;将字体库加载到一个Hash容器&#xff0c;字母和拼音作为key值&#xff0c;对应的中文作为value值。 核心代码&#xff1a; #include "UKeyBoard.h"…...

java中并发编程CompletableFuture和supplyAsync的用法

在Java中&#xff0c;并发编程可以使用CompletableFuture类来实现异步操作和并行任务。其中&#xff0c;supplyAsync是CompletableFuture类的一个静态方法&#xff0c;用于执行一个有返回值的异步任务。 supplyAsync方法的语法如下&#xff1a; public static <U> Comp…...

chrony服务器

目录 1.chrony简介 2.chrony安装配置 2.1 chrony安装及配置 非常重要&#xff1a;在配置之前&#xff0c;检查防火墙和selinux是否关闭 3.将chrony配置为其他主机的时间服务器 3.1 修改chrony配置文件 4.chronyc命令 1.chrony简介 chrony 是开源的遵循网络时间协议&…...

春秋云镜 CVE-2021-24762

春秋云镜 CVE-2021-24762 WordPress Plugin Perfect Survey 注入 靶标介绍 WordPress Perfect Survey plugin在1.5.2之前版本存在SQL注入漏洞&#xff0c;该漏洞源于基于数据库的应用缺少对外部输入SQL语句的验证。攻击者可利用该漏洞执行非法SQL命令。 启动场景 漏洞利用 …...

K8s中的Service

Service 1.Service存在的意义&#xff1f; &#xff08;1&#xff09;pod注册在service里面&#xff0c;做服务发现使用 &#xff08;2&#xff09;定义一组Pod访问策略&#xff08;负载均衡&#xff09; 2.Pod和Service关系 通过service实现Pod的负载均衡 3.常用Service类…...

[软件工程] 全局分析规格说明书模板

1 价值需求 描述目标系统的价值需求&#xff0c;可以附上商业模式画布。 1.1 利益相关者 描述目标系统的利益相关者&#xff0c;包括终端用户、企业组织、投资人等。 1.2 系统愿景 描述利益相关者共同达成一致的愿景&#xff0c;该愿景的描述需要对准企业的战略目标。 1.3 系统…...

【JAVASE】封装

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 封装 1. 什么是封装2. 访问限定符3. 封装…...

Java多线程(四)

目录 一、线程的状态 1.1 观察线程的所有状态 1.2 线程状态和状态转移的意义 1.2.1 NEW、RUNNABLE、TERMINATED状态转换 1.2.2 WAITING、BLOCKED、TIMED_WAITING状态转换 1.2.3 yield()大公无私让出cpu 一、线程的状态 1.1 观察线程的所有状态 public class Demo9 {public st…...

Linux 文件系统预留空间

在一次磁盘打满的场景下&#xff0c;使用了df -h命令来查看磁盘使用率。 [roottest tmp]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 28G 0 28G 0% /dev tmpfs 28G 0 28G 0% /dev/shm tmpfs 28G 2.8G …...

篇一:单例模式:C++中的独一无二

篇一&#xff1a;“单例模式&#xff1a;C中的独一无二” 设计模式在软件开发中起到了至关重要的作用&#xff0c;其中单例模式是最为常用且基础的设计模式之一。单例模式确保一个类只有一个实例&#xff0c;并提供全局访问点&#xff0c;以保证系统中的某个对象只有唯一的存在…...

JVM之内存结构

1.程序计数器 定义&#xff1a;程序计数器&#xff08;Program Counter Register&#xff09;是JVM中一块较小的内存空间。解释器在解释JVM指令为机器码以供CPU执行时&#xff0c;会去程序计数器当中找到jvm指令的执行地址。 作用&#xff1a;记住下一条jvm指令的执行地址 特…...

C#实现结构体与字节流的相互转化

unity项目中&#xff0c;涉及到与C的相互通信&#xff0c;而通信接口为C封好的动态库。所以&#xff0c;传输信息时&#xff0c;需要向C端发送字节流信息。 对此&#xff0c;需将结构体数据转为字节流&#xff0c;其代码如下&#xff1a; public static byte[] StructToBytes(…...

用LangChain开源框架实现知识机器人

前言 Large Language Models (LLMs)在2020年OpenAI 的 GPT-3 的发布而进入世界舞台 。从那时起&#xff0c;他们稳步增长进入公众视野。 众所周知 OpenAI 的 API 无法联网&#xff0c;所以大家如果想通过它的API实现联网搜索并给出回答、总结 PDF 文档、基于某个 Youtube 视频…...

HCIP——前期综合实验

前期综合实验 一、实验拓扑二、实验要求三、实验思路四、实验步骤1、配置接口IP地址2、交换机配置划分vlan10以及vlan203、总部分部&#xff0c;骨干网配置OSPF分部总部骨干网 4、配置BGP建立邻居关系总部骨干网分部 5、发布用户网段6、将下一跳改为本地7、允许AS重复8、重发布…...

【2023年电赛】运动目标控制与自动追踪系统(E 题)最简单实现

本方案的思路是最简单的不涉及复杂算法&#xff1a;识别矩形框&#xff0c;标记矩形框&#xff0c;输出坐标和中心点&#xff0c;计算长度&#xff0c;控制舵机移动固定长度&#xff01;仅供完成基础功能参考&#xff0c;不喜勿喷&#xff01; # 实现运动目标控制与自动追踪系…...

【IMX6ULL驱动开发学习】22.IMX6ULL开发板读取ADC(以MQ-135为例)

IMX6ULL一共有两个ADC&#xff0c;每个ADC都有八个通道&#xff0c;但他们共用一个ADC控制器 1.设备树 在imx6ull.dtsi文件中已经帮我们定义好了adc1的节点部分信息 adc1: adc02198000 {compatible "fsl,imx6ul-adc", "fsl,vf610-adc";reg <0x0219…...

宝塔安装ModStart,快速开启高效开发之旅!

宝塔面板是一款强大的服务器管理工具&#xff0c;而ModStart则是基于Laravel的模块化快速开发框架&#xff0c;二者的结合将为您的项目开发带来前所未有的便利和高效。在这篇文章中&#xff0c;我们将为您详细介绍如何在宝塔面板上安装ModStart&#xff0c;让您快速搭建功能丰富…...

第六章 HL7 架构和可用工具 - 定义新的消息类型和结构类型

文章目录 第六章 HL7 架构和可用工具 - 定义新的消息类型和结构类型编辑数据结构和代码表 第六章 HL7 架构和可用工具 - 定义新的消息类型和结构类型 消息类型标识消息并与 HL7 MSH:9 字段中的值匹配。定义消息类型时&#xff0c;指定发送消息结构类型&#xff08;可能与消息类…...

通向架构师的道路之Tomcat性能调优

一、总结前一天的学习 从“第三天”的性能测试一节中&#xff0c;我们得知了决定性能测试的几个重要指标&#xff0c;它们是&#xff1a; 吞吐量 Responsetime Cpuload MemoryUsage 我 们也在第三天的学习中对Apache做过了一定的优化&#xff0c;使其最优化上…...

vue03 es6中对数组的操作,vue对数据监控的原理(分别对对象和数组的监控)

在js中&#xff0c;对数组的操作一般都是固定的模式&#xff1a;常用的函数&#xff0c;具体的方法在这个文章中去看&#xff1a; http://t.csdn.cn/Fn1Ik 一般会用到的函数有&#xff1a; pop&#xff08;&#xff09; 这个函数是表示把数组中的元素&#xff08;数组&#xff…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

Mac flutter环境搭建

一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...

项目进度管理软件是什么?项目进度管理软件有哪些核心功能?

无论是建筑施工、软件开发&#xff0c;还是市场营销活动&#xff0c;项目往往涉及多个团队、大量资源和严格的时间表。如果没有一个系统化的工具来跟踪和管理这些元素&#xff0c;项目很容易陷入混乱&#xff0c;导致进度延误、成本超支&#xff0c;甚至失败。 项目进度管理软…...

Oracle实用参考(13)——Oracle for Linux物理DG环境搭建(2)

13.2. Oracle for Linux物理DG环境搭建 Oracle 数据库的DataGuard技术方案,业界也称为DG,其在数据库高可用、容灾及负载分离等方面,都有着非常广泛的应用,对此,前面相关章节已做过较为详尽的讲解,此处不再赘述。 需要说明的是, DG方案又分为物理DG和逻辑DG,两者的搭建…...

day51 python CBAM注意力

目录 一、CBAM 模块简介 二、CBAM 模块的实现 &#xff08;一&#xff09;通道注意力模块 &#xff08;二&#xff09;空间注意力模块 &#xff08;三&#xff09;CBAM 模块的组合 三、CBAM 模块的特性 四、CBAM 模块在 CNN 中的应用 一、CBAM 模块简介 在之前的探索中…...