QT实现中英文键盘

news2024/10/6 6:03:03

请添加图片描述

使用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");
    }
}

完整源码

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

出海新篇章:品牌规划方法与海外市场拓展

品牌出海规划是确保企业在国际市场上获得成功的关键步骤&#xff0c;它涉及到对目标市场的深入研究和了解&#xff0c;同时需要明确的策略和目标。本文Nox聚星将和大家探讨品牌出海规划的关键要素&#xff0c;为品牌出海提供一些建议和指导。 一、市场调研与定位 在品牌出海之…

C++基础篇 第七天 异常、智能指针、nullptr,auto

目录 异常 异常概念&#xff1a; C和C中异常的区别 异常处理 1. throw抛出异常 2. try...catch 进行异常处理 3.try...catch抛出自建类的异常 4.自建类的异常延伸 捕获的扩展 提高异常捕获的概率 智能指针 auto_ptr&#xff08;已废弃&#xff0c;只做了解&#xf…

【工具使用】git基础操作1

目录 一.拉取git代码1.首次拉取命令2.使用图形化拉取代码3.Idea 开发工具拉取代码 二.查看当前状态1.查看在你上次提交之后是否有对文件进行再次修改 三.创建分支3.1.创建分支3.2.创建分支并切换至分支3.3.提交分支至远程仓 远程没有自动创建 四.查看分支4.1.查看本地分支 当前…

智慧园区项目:数字化引领城市转型

随着科技的迅猛发展&#xff0c;智慧园区项目正日益成为城市数字化转型的关键组成部分。这些智慧园区项目借助先进的技术&#xff0c;将传统的园区升级为智能化、数字化的生态系统&#xff0c;为城市的可持续发展和人们的生活质量带来了巨大的变革。 在智慧园区项目中&#xff…

别不信,这才是交换机组网的正确打开方式

下午好&#xff0c;我的网工朋友。 俱乐部更新交换机和路由器相关技术点一直是更新得非常勤快&#xff0c;懂的朋友都懂&#xff0c;毕竟知识点太多。这不&#xff0c;前两天刚说一篇。 之前我们聊过交换机的配置命令&#xff0c;选型关键&#xff0c;配置步骤&#xff0c;部…

C语言数组笔试题(详解)

目录 插入知识&#xff1a; 一.指向函数指针数组的指针 二.回调函数 什么是回调函数&#xff1f; 三.数组笔试题 个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生&#x1f43b;‍❄个人主页&#xff1a;GOTXX &#x1f4…

概率论与数理统计复习总结2

概率论与数理统计复习总结&#xff0c;仅供笔者复习使用&#xff0c;参考教材&#xff1a; 《概率论与数理统计》/ 荣腾中主编. — 第 2 版. 高等教育出版社《2024高途考研数学——概率基础精讲》王喆 概率论与数理统计实际上是两个互补的分支&#xff1a;概率论 在 已知随机…

亚像素到底能不能提高精度

01.什么是亚像素 亚像素(Sub Pixel),是面阵摄像机的成像面以像素为最小单位。 像素中心之间的距离有几个至十几个微米不等。为了最大限度利用图像信息来提高分辨率,有人提出了亚像素概念。意思是说,在两个物理像素之间还有像素,称之为亚像素,它完全是通过计算方法得出来的。…

three.js实现vr全景图(vue)

方法: 可以利用Threejs中的立方体或者球体实现全景图功能&#xff0c;把立方体或球体当成天空盒子&#xff0c;将无缝衔接的图片贴上&#xff0c;看起来就像在一个场景中&#xff0c;相机一般放置在中央。 three.js中文网 1、立方体实现 立方体6个面要贴上6个方向的图片&…

在 React 中渲染大型数据集的 3 种方法

随着 Web 应用程序变得越来越复杂&#xff0c;我们需要找到有效的方法来优化性能和渲染大型数据集。在 React 应用程序中处理大型数据集时&#xff0c;一次呈现所有数据可能会导致性能不佳和加载时间变慢。 虚拟化是一种通过一次仅呈现数据集的一部分来解决此问题的技术&#…

AIGC产业公司简况列表

最近梳理了国内外AIGC产业链相关的公司列表&#xff0c;如下图所示&#xff1a; 出自&#xff1a;AIGC产业公司简况列表 | 秋天的童话博客

ElementUI el-table 鼠标滚动失灵的问题及解决办法

Bug&#xff1a;ElementUI el-table 鼠标滚轮下滑动失灵的情况 我测出来的这个问题条件很苛刻&#xff0c;需要达到以下几个条件才会触发&#xff1a; 1.element plus&#xff08;其他版本没试&#xff09; 2.el-table-column组件有fixed属性时 3.template标签中有el-butto…

Adobe ColdFusion 反序列化漏洞复现(CVE-2023-29300)

0x01 产品简介 Adobe ColdFusion是美国奥多比&#xff08;Adobe&#xff09;公司的一套快速应用程序开发平台。该平台包括集成开发环境和脚本语言。 0x02 漏洞概述 Adobe ColdFusion存在代码问题漏洞&#xff0c;该漏洞源于受到不受信任数据反序列化漏洞的影响&#xff0c;攻击…

赶快卸载 Navicat和DataGrip吧,阿里又开源了一款数据库神器,太炸了

Chat2DB 是一款有开源免费的多数据库客户端工具&#xff0c;支持windows、mac本地安装&#xff0c;也支持服务器端部署&#xff0c;web网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比Chat2DB集成了AIGC的能力&#xff0c;能够将自然语言转换为SQL&#xff0c;也可以…

eclipse was unable to locate its companion shared library

当转移或者Copy工程时&#xff0c; eclipse was unable to locate its companion shared library eclipse.ini 里面的路径配置错误导致 --launcher.library C:/Users/**/.p2/pool/plugins/org.eclipse.equinox. launcher.win32.win32.x86_64_1.2.700.v20221108-1024 -product …

什么是数字化?数字化转型概念是怎么兴起的?

什么是数字化&#xff1f;数字化转型的概念是怎么兴起的&#xff1f;下面我将分为2部分给大家做详细讲解。 一、什么是数字化&#xff1f; 不同国家和不同行业&#xff0c;似乎对数字化转型有不同的定义。比如&#xff1a; 美国早在2003年就提出了“数字化双胞胎”的概念&…

FuncGPT来了!专注AI生成JAVA函数,五大能力ChatGPT都说好

大语言模型风靡全球&#xff0c;正加速重构各行各业。继 GPT-4 、文心一言等生成式 AI产品之后&#xff0c;代码生成工具的队伍再添新员。近日FuncGPT&#xff08;慧函数&#xff09;功能重磅上线。 作为飞算SoFlu软件机器人的一个重要组成部分&#xff0c;FuncGPT&#xff08;…

Python 程序设计入门(001)—— 安装 Python(Windows 操作系统)

Python 程序设计入门&#xff08;001&#xff09;—— 安装 Python&#xff08;Windows 操作系统&#xff09; 目录 Python 程序设计入门&#xff08;001&#xff09;—— 安装 Python&#xff08;Windows 操作系统&#xff09;一、下载 Python 安装包二、安装 Python三、测试&…

如何在Visual Studio Code中用Mocha对TypeScript进行测试

目录 使用TypeScript编写测试用例 在Visual Studio Code中使用调试器在线调试代码 首先&#xff0c;本文不是一篇介绍有关TypeScript、JavaScript或其它编程语言数据结构和算法的文章。如果你正在准备一场面试&#xff0c;或者学习某一个课程&#xff0c;互联网上可以找到许多…

Java版本工程行业管理系统源码-专业的工程管理软件-提供一站式服务 em

&#xfeff; 工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据…