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);
            else
                m_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); //_currentLineEdit

    m_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());
        else
            ui->inputEdit->setCursorPosition(ui->inputEdit->cursorPosition()-1);
    }
    else
    {
        if (ui->selectWordEdit->cursorPosition()-1 < 0)
            ui->selectWordEdit->setCursorPosition(ui->selectWordEdit->text().size());
        else
            ui->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);
        else
            ui->inputEdit->setCursorPosition(ui->inputEdit->cursorPosition()+1);
    }
    else
    {
        if (ui->selectWordEdit->cursorPosition()+1 > ui->selectWordEdit->text().size())
            ui->selectWordEdit->setCursorPosition(0);
        else
            ui->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");
    }
}

完整源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/58035.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【雕爷学编程】MicroPython动手做(28)——物联网之Yeelight 2

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

RISC-V基础之函数调用(三)保留寄存器(包含实例)

RISC-V将寄存器分为保留和非保留两类。保留寄存器是指在函数调用前后必须保持相同值的寄存器&#xff0c;因为调用者期望在调用后能够继续使用这些寄存器的值。保留寄存器包括s0到s11&#xff08;因此称为saved&#xff09;&#xff0c;sp和ra。非保留寄存器&#xff0c;也称为…

数据可视化(六)多个子图及seaborn使用

1.多个子图绘制 #绘制多个子图 #subplot&#xff08;*args&#xff0c;**kwargs&#xff09; 每个subplot函数只能绘制一个子图 #subplots&#xff08;nrows&#xff0c;ncols&#xff09; #fig_add_subplot(行&#xff0c;列&#xff0c;区域) #绘制子图第一种方式 plt.subp…

网络安全进阶学习第十课——MySQL手工注入

文章目录 一、MYSQL数据库常用函数二、MYSQL默认的4个系统数据库以及重点库和表三、判断数据库类型四、联合查询注入1、具体步骤&#xff08;靶场演示&#xff09;&#xff1a;1&#xff09;首先判断注入点2&#xff09;判断是数字型还是字符型3&#xff09;要判断注入点的列数…

网工内推 | 云计算工程师专场,CCNP/HCIP认证优先

01 弧聚科技 招聘岗位&#xff1a;网络工程师&#xff08;云计算方向&#xff09; 职责描述&#xff1a; 1、作为H3C初级云计算交付工程资源培养对象&#xff0c;需配合完成相关华三产品及服务规范培训。 2、培训赋能后&#xff0c;安排到H3C云项目交付中进行项目交付及驻场支…

【Nginx13】Nginx学习:HTTP核心模块(十)Types、AIO及其它配置

Nginx学习&#xff1a;HTTP核心模块&#xff08;十&#xff09;Types、AIO及其它配置 今天学习的内容也比较简单&#xff0c;主要的是 Types 相关的配置&#xff0c;另外还会了解一下 AIO 以及部分没有特别大的分类归属的配置指令的使用。后面的内容都是 HTTP 核心模块中比较小…

核心交换机新增了一个网段,现在下面PC可以获取地址访问内网 ,访问外网说DNS有问题不通

环境: SANGFOR AF 8.0.75 SANGFOR AC 13.0.47 H3C S6520-26Q-SI 问题描述: 1.在核心交换机上新规划了一个网段192.168.200.0/24,现在下面PC可以正常获取IP地址和DNS,正常访问内网服务和其它地址段IP ,访问外网说DNS有问题不通打不开网页 2.DNS解析失败,ping dns服务…

Kubernetes高可用集群二进制部署(二)ETCD集群部署

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署&#xff08;一&#xff09;主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署&#xff08;二&#xff09;ETCD集群部署 Kubernetes高可用集群二进制部署&#xff08;三&#xff09;部署…

第四次作业 运维高级 安装tomcat8和部署jpress应用

1. 简述静态网页和动态网页的区别。 静态网页 静态网页是指存放在服务器文件系统中实实在在的HTML文件。当用户在浏览器中输入页面的URL&#xff0c;然后回车&#xff0c;浏览器就会将对应的html文件下载、渲染并呈现在窗口中。早期的网站通常都是由静态页面制作的。 静态网页…

银河麒麟V10 wireshark安装说明(断网离线)

下载离线安装包 链接&#xff1a;https://pan.baidu.com/s/11QFRmCGlIJrJaiKcHh9Hag?pwdu9wv 提取码&#xff1a;u9wv 安装步骤 tar zxvf wireshark.tar.gz cd wireshark sudo dpkt -i *.deb wireshark

构建vue项目配置和环境配置

目录 1、环境变量process.env配置2、vue package.json多环境配置vue-cli-service serve其他用法vue-cli-service build其他用法vue-cli-service inspect其他用法3、vue导出webpack配置4、配置打包压缩图片文件5、打包去掉多余css(由于依赖问题暂时未实现)6、打包去除console.…

【每日一题】—— C. Challenging Cliffs(Codeforces Round 726 (Div. 2))

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…

Spring Boot 系列4 -- 统一功能处理

目录 前言 1. Spring AOP 用户统⼀登录验证的问题 1.1 自定义拦截器 1.2 配置拦截器并配置拦截的规则 1.3 拦截器的原理源码分析 2. 统一异常处理 2.1 实现统一异常处理 2.2 测试统一异常处理 3. 统一的数据格式返回 3.1 统⼀数据返回格式的实现 3.2 测试统一的数据返…

智慧水务和物联网智能水表在农村供水工程中的应用

摘 要&#xff1a;随着社会的进步和各项事业的飞速发展&#xff0c;人民生活水平的逐步提升&#xff0c;国家对农村饮水安全有了更高的要求&#xff0c;为了进一步提升农村供水服务的质量&#xff0c;利用现代化、信息化科学技术提升农村供水服务质量&#xff0c;提高用水管理效…

GB28181智能安全帽方案探究及技术实现

什么是智能安全帽&#xff1f;​ 智能安全帽是一种集成先进科技的安全帽&#xff0c;可基于GB28181规范&#xff0c;适用于铁路巡检、电力、石油化工等高风险行业的作业人员&#xff0c;以及消防、救援等紧急情况下的安全防护。 智能安全帽通常具有以下功能&#xff1a; 实时…

RocketMQ发送消息超时异常

说明&#xff1a;在使用RocketMQ发送消息时&#xff0c;出现下面这个异常&#xff08;org.springframework.messging.MessgingException&#xff1a;sendDefaultImpl call timeout……&#xff09;&#xff1b; 解决&#xff1a;修改RocketMQ中broke.conf配置&#xff0c;添加下…

git使用(由浅到深)

目录流程图 1. 分布式版本控制与集中式版本控制 1.1 集中式版本控制 集中式版本控制系统有:CVS和SVN它们的主要特点是单一的集中管理的服务器&#xff0c;保存所有文件的修订版本&#xff1b;协同开发人员通过客户端连接到这台服务器&#xff0c;取出最新的文件或者提交更新…

天气API强势对接

&#x1f935;‍♂️ 个人主页&#xff1a;香菜的个人主页&#xff0c;加 ischongxin &#xff0c;备注csdn ✍&#x1f3fb;作者简介&#xff1a;csdn 认证博客专家&#xff0c;游戏开发领域优质创作者,华为云享专家&#xff0c;2021年度华为云年度十佳博主 &#x1f40b; 希望…

“苏豪 x 莱佛士”再度携手,惊艳亮相上海发型师节!

2023年6月28日&#xff0c;以“为爱启航”为主题的第16届AHF亚洲发型师节在上海跨国采购中心盛大开幕。继上次在施华蔻专业2023春夏新季风发布会上&#xff0c;苏豪x莱佛士合作的大秀&#xff0c;赢得了现场观众阵阵掌声。这次“Kraemer苏豪x莱佛士”再度携手&#xff0c;惊艳亮…

【雕爷学编程】MicroPython动手做(25)——语音合成与语音识别

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…