使用QPushButton实现计算机

1. 按钮类:QPushButton

1.1 信号

 void clicked(bool checked = false)//被点击触发
 void pressed()//当按下按钮时发出此信号
 void released()//当松开按钮时发出此信号
 void toggled(bool checked)//每当可检查按钮改变其状态时,都会发出此信号。

1.2 实现按钮的三种方式

1.2.1 一、使用代码实现按钮相关功能

1.2.1.1 按钮类的实例化
第一种:源码实现
 QPushButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr) //参数1传递图片,参数2传递文本,参数3指定父对象
 QPushButton(const QString &text, QWidget *parent = nullptr)//参数1传递文本,参数2指定父对象
 QPushButton(QWidget *parent = nullptr)  //指定父对象

实例

第一种:源码实现
 QPushButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr) //参数1传递图片,参数2传递文本,参数3指定父对象
 QPushButton(const QString &text, QWidget *parent = nullptr)//参数1传递文本,参数2指定父对象
 QPushButton(QWidget *parent = nullptr)  //指定父对象
1.2.1.2 按钮的基本方法
//设置父对象
    btn->setParent(this);
    //设置按钮显示的文本
    btn->setText("登录");
    //设置按钮的大小
    btn->resize(QSize(50,20));
    //移动按钮
    btn->move(100,0);
    //设置按钮的几何属性
    btn->setGeometry(100,100,100,30);
    //设置是否禁用按钮
    btn->setEnabled(true);//false:禁用   true:启用(默认)
    //设置按钮中的图标
    btn->setIcon(QIcon(":/img/photo.jpg"));
    //设置按钮背景是否隐藏
    btn->setFlat(false);//true:隐藏  false:不隐藏(默认)
    //设置鼠标定位到按钮上提示的文本
    btn->setToolTip("这是按钮");
    //设置按钮是否具有选中使能
    btn->setCheckable(true);//true:使能(默认)  false:失能
    btn->setChecked(true);//true:选中(默认)   false:未选中
    //设置按钮是否具备快捷键
    btn->setShortcutEnabled(0,true);
    //设置按钮的快捷键
    btn->setShortcut(QKeySequence::Backspace);
    //获取快捷键
    QKeySequence key=btn->shortcut();
    //设置是否是回车键作为快捷键
    btn->setAutoDefault(true);//true:回车键有效(默认)  false:无效
    //获取按钮的文本
    QString text=btn->text();//获取按钮中的文本
    //判断背景是否是隐藏
    bool flag= btn->isFlat();
    //设置按钮的字体
    btn->setFont(QFont("宋体",30));
    //设置光标
    btn->setCursor(Qt::PointingHandCursor);
1.2.1.3举例

熟悉按钮QPushButton的使用

qpush_button

mydialog.h

#ifndef MYDIALOG_H
#define MYDIALOG_H

#include <QDialog>
#include <QPushButton>
#include <QDebug>

QT_BEGIN_NAMESPACE
namespace Ui { class Mydialog; }
QT_END_NAMESPACE

class Mydialog : public QDialog
{
    Q_OBJECT

public:
    Mydialog(QWidget *parent = nullptr);
    ~Mydialog();


public slots:
    void print();

private:
    Ui::Mydialog *ui;

    //实例化的三种方式
    QPushButton* btn = new QPushButton;
//    QPushButton* btn = new QPushButton(this);
//    QPushButton* btn = new QPushButton("登录",this);


};
#endif // MYDIALOG_H

mydialog.cpp

#include "mydialog.h"
#include "ui_mydialog.h"
#include "QIcon"

//熟悉按钮QPushButton的使用
Mydialog::Mydialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Mydialog)
{
    ui->setupUi(this);

    //设置父对象
    btn->setParent(this);
    //设置按钮现实的文本
    btn->setText("登录");
    //设置按钮大小
    btn->resize(QSize(50,20));
    //移动按钮
    btn->move(100,0);
    //设置按钮的几何属性
    btn->setGeometry(100,100,100,30);

    //设置禁用按钮
   /* btn->setEnabled(false);*///false禁用 true启用,默认启用
    btn->setEnabled(true);

    //设置按钮图标
    btn->setIcon(QIcon(":/img/photo.jpg"));

    //设置背景是否隐藏
//    btn->setFlat(true);//true 隐藏   false不隐藏
    btn->setFlat(false);

    //设置鼠标定位到按钮位置提示文本
    btn->setToolTip("这里是按钮");

    //设置按钮是否具有选中使能
    btn->setCheckable(true);//true 使能 false失能
    btn->setChecked(true);//true 选中(默认)false 未选中

    //设置按钮是否具备快捷键
    btn->setShortcutEnabled(0,true);
    //设置按钮快捷键
    btn->setShortcut(QKeySequence::Backspace);
    //获取快捷键
    QKeySequence key = btn->shortcut();

    //设置是否是回车键作为快捷键
    btn->setAutoDefault(true);//true回车键有效(默认),false无效

    //获取按钮文本
    QString text = btn->text();
    //是否是隐藏
    bool flag = btn->isFlat();

    //设置按钮字体
    btn->setFont(QFont("宋体",15));//参数1 字体  参数2 大小

    //设置光标样子
    btn->setCursor(Qt::PointingHandCursor);

    //绑定按钮信号和本类槽
    connect(this->btn,SIGNAL(clicked()),this,SLOT(print()));

    //这个pushButton是我们直ui界面拖出来的不是手动写的
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(print()));


}

Mydialog::~Mydialog()
{
    delete ui;
}

void Mydialog::print(){
    qDebug()<<"hello"<<endl;
}


1.2.2 二、ui界面实现按钮功能

text:设置按钮的文本
icon:设置图片
iconsize:设置图片的大小
shortcut:设置快捷键
checkable:设置是否选中使能
chekced:设置是否选中
autoDefaoult:设置回车键是否有效
defalut:设置默认按钮
flat:设置按钮的背景是否隐藏

1.2.3 三、采用继承QPushbutton方式

示例

class MyButton : public QPushButton
{
    Q_OBJECT
public:
    explicit MyButton(QWidget *parent = nullptr);

signals:
    void send_Data(int a);

};

1.2.3.1 举例

qpush_button_inherit

mybutton.h

#ifndef MYBUTTON_H
#define MYBUTTON_H

#include <QWidget>
#include <QPushButton>

class Mybutton : public QPushButton //注意这里继承的是QPushButton
{
    Q_OBJECT
public:
    explicit Mybutton(QWidget *parent = nullptr);

signals://定义信号
    void send_data(int a);

};

#endif // MYBUTTON_H

mybuuton.cpp

#include "mybutton.h"

Mybutton::Mybutton(QWidget *parent)
    : QPushButton{parent}//注意这里实现构造时 继承的也是QPushButton
{

}

mydialog.h

#ifndef MYDIALOG_H
#define MYDIALOG_H

#include <QDialog>
#include<QDebug>
#include<mybutton.h>

QT_BEGIN_NAMESPACE
namespace Ui { class Mydialog; }
QT_END_NAMESPACE

class Mydialog : public QDialog
{
    Q_OBJECT

public:
    Mydialog(QWidget *parent = nullptr);
    ~Mydialog();

public slots://定义槽
    void receive_data(int a);//与发送数据信号绑定
    void print();//这个与clicked信号绑定

private:
    Ui::Mydialog *ui;
    
    //自定义按钮实例化
    Mybutton* btn = new Mybutton(this);

};
#endif // MYDIALOG_H

mydialog.cpp

#include "mydialog.h"
#include "ui_mydialog.h"

//继承qPushButton的方式实现按钮
Mydialog::Mydialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Mydialog)
{
    ui->setupUi(this);

    this->btn->setText("按钮");
    this->btn->move(100,40);
    //绑定clicked
    connect(this->btn,SIGNAL(clicked()),this,SLOT(print()));
    //绑定发送数据
    connect(this->btn,SIGNAL(send_data(int)),this,SLOT(receive_data(int)));

}

Mydialog::~Mydialog()
{
    delete ui;
}

void Mydialog::print(){//点击的槽函数实现
    qDebug()<<"接收到clicked信号"<<endl;
    emit this->btn->send_data(10);
}

void Mydialog::receive_data(int a){
    qDebug()<<"收到数据"<<a<<endl;
}



1.2.4  练习 :实现计算机

设计一个计算器,计算0-9的加减乘除运算,并将结果进行输出(必须纯代码实现)

calculator

mydialog.h

#ifndef MYDIGLOG_H
#define MYDIGLOG_H

#include <QDialog>
#include <QPushButton>
#include <QDebug>

QT_BEGIN_NAMESPACE
namespace Ui { class Mydiglog; }
QT_END_NAMESPACE

class Mydiglog : public QDialog
{
    Q_OBJECT

public:
    Mydiglog(QWidget *parent = nullptr);
    ~Mydiglog();

    void calculate();


public slots:
    void print1();
    void print2();
    void print3();
    void print4();
    void print5();
    void print6();
    void print7();
    void print8();
    void print9();
    void print0();
    void print_jia();
    void print_jian();
    void print_cheng();
    void print_chu();
    void print_deng();


private:
    Ui::Mydiglog *ui;

    QPushButton* btn1 = new QPushButton("1",this);
    QPushButton* btn2 = new QPushButton("2",this);
    QPushButton* btn3 = new QPushButton("3",this);
    QPushButton* btn4 = new QPushButton("4",this);
    QPushButton* btn5 = new QPushButton("5",this);
    QPushButton* btn6 = new QPushButton("6",this);
    QPushButton* btn7 = new QPushButton("7",this);
    QPushButton* btn8 = new QPushButton("8",this);
    QPushButton* btn9 = new QPushButton("9",this);
    QPushButton* btn0 = new QPushButton("0",this);
    QPushButton* btn_jia = new QPushButton("+",this);
    QPushButton* btn_jian = new QPushButton("-",this);
    QPushButton* btn_cheng = new QPushButton("*",this);
    QPushButton* btn_chu = new QPushButton("/",this);
    QPushButton* btn_deng = new QPushButton("=",this);

    QString str1;//存储操作符之前的数字
    QString caozuofu = "";//存储操作符
    QString str2;//存储操作符之后的数字
};
#endif // MYDIGLOG_H

mydialog.cpp

#include "mydiglog.h"
#include "ui_mydiglog.h"

Mydiglog::Mydiglog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Mydiglog)
{
    ui->setupUi(this);

    btn1->move(100,80);//移动位置
    btn2->move(200,80);//移动位置
    btn3->move(300,80);//移动位置

    btn4->move(100,120);//移动位置
    btn5->move(200,120);//移动位置
    btn6->move(300,120);//移动位置

    btn7->move(100,160);//移动位置
    btn8->move(200,160);//移动位置
    btn9->move(300,160);//移动位置

    btn0->move(200,200);//移动位置

    btn_jia->move(400,200);
    btn_jian->move(400,160);
    btn_cheng->move(400,120);
    btn_chu->move(400,80);

    btn_deng->move(300,200);

    //绑定按钮信号和本类的槽
    connect(this->btn1,SIGNAL(clicked()),this,SLOT(print1()));
    connect(this->btn2,SIGNAL(clicked()),this,SLOT(print2()));
    connect(this->btn3,SIGNAL(clicked()),this,SLOT(print3()));

    connect(this->btn4,SIGNAL(clicked()),this,SLOT(print4()));
    connect(this->btn5,SIGNAL(clicked()),this,SLOT(print5()));
    connect(this->btn6,SIGNAL(clicked()),this,SLOT(print6()));

    connect(this->btn7,SIGNAL(clicked()),this,SLOT(print7()));
    connect(this->btn8,SIGNAL(clicked()),this,SLOT(print8()));
    connect(this->btn9,SIGNAL(clicked()),this,SLOT(print9()));

    connect(this->btn0,SIGNAL(clicked()),this,SLOT(print0()));

    connect(this->btn_jia,SIGNAL(clicked()),this,SLOT(print_jia()));
    connect(this->btn_jian,SIGNAL(clicked()),this,SLOT(print_jian()));
    connect(this->btn_cheng,SIGNAL(clicked()),this,SLOT(print_cheng()));
    connect(this->btn_chu,SIGNAL(clicked()),this,SLOT(print_chu()));

    connect(this->btn_deng,SIGNAL(clicked()),this,SLOT(print_deng()));


}

Mydiglog::~Mydiglog()
{
    delete ui;
}

void Mydiglog::calculate(){


    int shuzi1 = str1.toInt();//字符转数字

    int shuzi2 = str2.toInt();//字符转数字

    if(caozuofu.at(0)=="+"){
        shuzi1+shuzi2;
        qDebug()<<shuzi1<<" + "<<shuzi2<<" = "<<shuzi1+shuzi2<<endl;
    }else if(caozuofu.at(0)=="-"){
        qDebug()<<shuzi1<<" - "<<shuzi2<<" = "<<shuzi1-shuzi2<<endl;
    }else if(caozuofu.at(0)=="*"){
        qDebug()<<shuzi1<<" * "<<shuzi2<<" = "<<shuzi1*shuzi2<<endl;
    }else if(caozuofu.at(0)=="/"){
        qDebug()<<shuzi1<<" / "<<shuzi2<<" = "<<(float)shuzi1/shuzi2<<endl;
    }

    str1.clear();//清除字符串
    str2.clear();
    caozuofu.clear();

}

void Mydiglog::print1(){

    //获取按钮文本
    QString text1 = btn1->text();

    //但这里用户输入的肯定不是操作符
    if(caozuofu.isEmpty()){//判断是存储操作符之前的数字还是之后的数字
        //用户还没输入操作符,所以数字应该记录在操作符之前的字符串里
        str1.append(text1);
        qDebug()<<str1;
    }else{
        //存入操作符之后的字符串里
        str2.append(text1);
        qDebug()<<str2;
    }
}

void Mydiglog::print2(){

    //获取按钮文本
    QString text2 = btn2->text();

    //但这里用户输入的肯定不是操作符
    if(caozuofu.isEmpty()){//判断是存储操作符之前的数字还是之后的数字
        //用户还没输入操作符,所以数字应该记录在操作符之前的字符串里
        str1.append(text2);
        qDebug()<<str1;
    }else{
        //存入操作符之后的字符串里
        str2.append(text2);
        qDebug()<<str2;
    }
}
void Mydiglog::print3(){

    //获取按钮文本
    QString text3 = btn3->text();

    //但这里用户输入的肯定不是操作符
    if(caozuofu.isEmpty()){//判断是存储操作符之前的数字还是之后的数字
        //用户还没输入操作符,所以数字应该记录在操作符之前的字符串里
        str1.append(text3);
        qDebug()<<str1;
    }else{
        //存入操作符之后的字符串里
        str2.append(text3);
        qDebug()<<str2;
    }
}
void Mydiglog::print4(){

    //获取按钮文本
    QString text4 = btn4->text();

    //但这里用户输入的肯定不是操作符
    if(caozuofu.isEmpty()){//判断是存储操作符之前的数字还是之后的数字
        //用户还没输入操作符,所以数字应该记录在操作符之前的字符串里
        str1.append(text4);
        qDebug()<<str1;
    }else{
        //存入操作符之后的字符串里
        str2.append(text4);
        qDebug()<<str2;
    }
}
void Mydiglog::print5(){

    //获取按钮文本
    QString text5 = btn5->text();

    //但这里用户输入的肯定不是操作符
    if(caozuofu.isEmpty()){//判断是存储操作符之前的数字还是之后的数字
        //用户还没输入操作符,所以数字应该记录在操作符之前的字符串里
        str1.append(text5);
        qDebug()<<str1;
    }else{
        //存入操作符之后的字符串里
        str2.append(text5);
        qDebug()<<str2;
    }
}
void Mydiglog::print6(){

    //获取按钮文本
    QString text6 = btn6->text();

    //但这里用户输入的肯定不是操作符
    if(caozuofu.isEmpty()){//判断是存储操作符之前的数字还是之后的数字
        //用户还没输入操作符,所以数字应该记录在操作符之前的字符串里
        str1.append(text6);
        qDebug()<<str1;
    }else{
        //存入操作符之后的字符串里
        str2.append(text6);
        qDebug()<<str2;
    }
}
void Mydiglog::print7(){

    //获取按钮文本
    QString text7 = btn7->text();

    //但这里用户输入的肯定不是操作符
    if(caozuofu.isEmpty()){//判断是存储操作符之前的数字还是之后的数字
        //用户还没输入操作符,所以数字应该记录在操作符之前的字符串里
        str1.append(text7);
        qDebug()<<str1;
    }else{
        //存入操作符之后的字符串里
        str2.append(text7);
        qDebug()<<str2;
    }
}
void Mydiglog::print8(){

    //获取按钮文本
    QString text8 = btn8->text();

    //但这里用户输入的肯定不是操作符
    if(caozuofu.isEmpty()){//判断是存储操作符之前的数字还是之后的数字
        //用户还没输入操作符,所以数字应该记录在操作符之前的字符串里
        str1.append(text8);
        qDebug()<<str1;
    }else{
        //存入操作符之后的字符串里
        str2.append(text8);
        qDebug()<<str2;
    }
}
void Mydiglog::print9(){

    //获取按钮文本
    QString text9 = btn9->text();

    //但这里用户输入的肯定不是操作符
    if(caozuofu.isEmpty()){//判断是存储操作符之前的数字还是之后的数字
        //用户还没输入操作符,所以数字应该记录在操作符之前的字符串里
        str1.append(text9);
        qDebug()<<str1;
    }else{
        //存入操作符之后的字符串里
        str2.append(text9);
        qDebug()<<str2;
    }
}
void Mydiglog::print0(){

    //获取按钮文本
    QString text0 = btn0->text();

    //但这里用户输入的肯定不是操作符
    if(caozuofu.isEmpty()){//判断是存储操作符之前的数字还是之后的数字
        //用户还没输入操作符,所以数字应该记录在操作符之前的字符串里
        str1.append(text0);
        qDebug()<<str1;
    }else{
        //存入操作符之后的字符串里
        str2.append(text0);
        qDebug()<<str2;
    }
}

void Mydiglog::print_jia(){
    //获取按钮文本
    QString text_jia = btn_jia->text();

    //这个if的作用方式用户多次点击操作符
    if(caozuofu.isEmpty()){//操作符得空进入
        caozuofu.append(text_jia);
        qDebug()<<caozuofu;
    }
}
void Mydiglog::print_jian(){

    //获取按钮文本
    QString text_jian = btn_jian->text();

    if(caozuofu.isEmpty()){//操作符得空进入
        caozuofu.append(text_jian);
        qDebug()<<caozuofu;
    }
}
void Mydiglog::print_cheng(){

    //获取按钮文本
    QString text_cheng = btn_cheng->text();

    if(caozuofu.isEmpty()){//操作符得空进入
        caozuofu.append(text_cheng);
        qDebug()<<caozuofu;
    }
}
void Mydiglog::print_chu(){

    //获取按钮文本
    QString text_chu = btn_chu->text();

    if(caozuofu.isEmpty()){//操作符得空进入
        caozuofu.append(text_chu);
        qDebug()<<caozuofu;
    }
}

void Mydiglog::print_deng(){

    if(!str1.isEmpty() && !caozuofu.isEmpty() && !str2.isEmpty()){
        this->calculate();//直接跳转计算函数
    }else{
        qDebug()<<"请确保输入正确,请重新输入"<<endl;
        str1.clear();//清除字符串
        str2.clear();
        caozuofu.clear();
    }

}


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

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

相关文章

网页设计工作室网站Web前端制作个人网页(html+css+javascript)网页设计网站模板采用DIV CSS布局制作,网页作品有多个页面

网页设计工作室网站Web前端制作个人网页(htmlcssjavascript)网页设计网站模板采用DIV CSS布局制作&#xff0c;网页作品有多个页面 【网页设计工作室网站Web前端制作个人网页(htmlcssjavascript)网页设计网站模板采用DIV CSS布局制作&#xff0c;网页作品有多个页面】 https://…

怎样的摆渡系统,能实现安全可管控的跨网数据传输?

大数据时代&#xff0c;数据在流通与传输的过程中&#xff0c;更需要注意到数据的安全防护&#xff0c;护航数据价值。“让数据主宰一切的隐忧”&#xff0c;数字战争的时代&#xff0c;各国早已认识到网络安全愈发重要&#xff0c;数据也成为各国发展的重要武器。 出于安全性和…

GB28181视频汇聚平台EasyCVR级联后,部分通道视频无法播放是什么原因?

GB28181协议智慧安防平台EasyCVR是基于各种IP流媒体协议传输的视频汇聚和融合管理平台。视频流媒体服务器EasyCVR采用了开放式的网络结构&#xff0c;支持高清视频的接入和传输、分发&#xff0c;平台提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制…

Cesium笔记 初始化 原生Cesium

1、创建vue项目 vue create my_demo 2、下载Cesium 可以从官网下载&#xff0c;也可以使用node下载 npm install cesium 3、把node_modules文件夹中下载得Cesium&#xff0c;移出到public文件夹下 4、将Cesium.js 以及样式文件widgets.css在index.html中引用 <!DOCT…

麒麟KYLINOS上使用命令设置声音

原文链接&#xff1a;麒麟KYLINOS上使用命令设置声音 hello&#xff0c;大家好啊&#xff01;今天我要给大家介绍的是在麒麟KYLINOS操作系统上使用命令行设置系统声音的方法。在某些情况下&#xff0c;特别是当您需要在多台机器上批量设置声音或在定制系统镜像时&#xff0c;使…

Positive证书——平价证书的最好选择

1. 经济实惠 Positive证书以其经济实惠的价格而闻名。对于小型企业或刚刚起步的网站来说&#xff0c;成本是一个重要的考虑因素。与其他高价SSL证书相比&#xff0c;Positive证书提供了同样强大的加密技术&#xff0c;但价格更为亲民。这使得任何人都能够为其网站提供安全性&a…

GEE计算Landsat8的NDVI

目录 前言源代码结果 前言 NDVI&#xff08;近红-红&#xff09;/&#xff08;近红红&#xff09; normalizedDifference方法是&#xff08;A-B&#xff09;/&#xff08;AB&#xff09;的计算方法 计算NDVI一般用来配合其他反演参数&#xff0c;构造指数或者数据升降尺度。 …

Taro+vue3 实现选座位 功能 以及座位显示

1.类似选座位那种功能 我的功能座位 不是html元素 而是 座位图片 都是图片 const onConfirm () > {// const area_arr selectedSeat.value.map((item) > {// return item.areaId;// });// const abc isRepeat(area_arr);// if (!abc) {// Taro.showToast({//…

深入剖析pcap中的网络异常:TTL过期攻击、ARP中毒、TCP重传与重叠碎片等

网络流量数据包捕获是网络安全领域的重要部分&#xff0c;而pcap文件则是这一过程的常见载体。为了深入解析pcap文件中潜在的可疑网络流量&#xff0c;我们需要运用强大的网络安全威胁评估与审计工具。这些工具能够帮助我们捕捉、记录、检测和诊断网络中的数据传输问题&#xf…

双碳管理系统任务需求分析(第10套)

需求规格说明书 一、引言 &#xff08;一&#xff09;项目背景 编写本需求规格说明书的目的是为了详细呈现碳足迹产品需求和系统的功能描述&#xff0c;以进一步定制应用软件系统开发的细节问题&#xff0c;便于与项目开发协调工作。本文档面向的读者主要是项目委托单位的管…

vue3 组合式 API 在 onMounted 中调用 dom 报错 Initialize failed: invalid dom.

问题 在开发的过程中&#xff0c;项目中需要用到 echarts&#xff0c;引入后在渲染的过程中报错了&#xff1a;Initialize failed: invalid dom. 这个报错表示元素在未渲染完成的情况下就被调用了&#xff0c;作者在以前也遇到过这种情况&#xff0c;在 vue2 中正常来说将 ech…

控制注塑机PQ比例阀放大器

控制不带电反馈的单或双比例电磁铁的博世力士乐&#xff08;Bosch Rexroth&#xff09;、伊顿威格士&#xff08;EATON Vickers&#xff09;、油研&#xff08;YUKEN&#xff09;、贺德克&#xff08;HYDAC&#xff09;、大金&#xff08;DAIKIN&#xff09;、不二越&#xff0…

性能优化--实战利用arthas排查java服务cpu占用过高的问题

使用jps -l查看目前的java应用进程 启动arthas&#xff0c;选择需要监控的进程 dashboar查看该应用整体情况 使用thread命令&#xff0c;查看占用cpu过高的几个线程ID 然后使用thread 线程ID查看具体线程在执行哪些内容&#xff0c;可以看到对应的类和方法 正在上传… 重…

<Python>PyQt5中UI界面和逻辑函数分开写的一种方式

前言 如果经常使用PyQt5这种模块来编写带UI界面的程序&#xff0c;那么很自然的就会涉及到&#xff0c;一旦程序比较大&#xff0c;UI控件多的时候&#xff0c;需要将UI和逻辑程序分离&#xff0c;这样方便管理&#xff0c;也方便维护。 配置&#xff1a; 平台&#xff1a;win…

超级工具大盘点

在当今竞争激烈和快节奏的工作环境中&#xff0c;提高效率成为每个人追求的目标。为了更好地应对日常任务和项目&#xff0c;我们需要运用有效的工具和策略。软件是其中一种强大的支持工具&#xff0c;可以极大地提升工作效率和管理能力。在本文中&#xff0c;我将分享一些值得…

esp32UART串口外设(Arduino)

通用异步接收器/发送器 &#xff08;UART&#xff09; 介绍 通用异步接收器/发送器 &#xff08;UART&#xff09; 是一种硬件功能&#xff0c;它使用广泛采用的异步串行通信接口&#xff08;如 RS232、RS422 和 RS485&#xff09;处理通信&#xff08;即时序要求和数据成帧&…

@FunctionalSpringBootTest 和@SpringBootTest注解的区别

FunctionalSpringBootTest 和 SpringBootTest 是Spring框架中用于测试的两个不同注解。下面是它们之间的主要区别&#xff1a; 用途和范围&#xff1a; SpringBootTest&#xff1a;这个注解用于需要测试Spring应用程序上下文的场合。它会加载完整的应用程序上下文&#xff0c;适…

案例:自定义下拉刷新动画(ArkTS)

文章目录 介绍相关概念完整示例代码结构解读 自定义下拉组件自定义刷新动画总结 介绍 本篇Codelab主要介绍组件动画animation属性设置。当组件的某些通用属性变化时&#xff0c;可以通过属性动画实现渐变效果&#xff0c;提升用户体验。 本Codelab使用的display接口处于mock阶…

Python 镜像源使用指南:加速你的开发过程

&#x1f31f;&#x1f30c; 欢迎来到知识与创意的殿堂 — 远见阁小民的世界&#xff01;&#x1f680; &#x1f31f;&#x1f9ed; 在这里&#xff0c;我们一起探索技术的奥秘&#xff0c;一起在知识的海洋中遨游。 &#x1f31f;&#x1f9ed; 在这里&#xff0c;每个错误都…

MongoDB存储原理

存储引擎是数据库的组件&#xff0c;负责管理数据如何存储在内存和磁盘上。MongoDB 支持多个存储引擎&#xff0c;因为不同的引擎对于特定的工作负载表现更好。选择合适的存储引擎可以显著影响应用程序的性能。 WiredTiger 介绍 MongoDB 从 3.0 开始引入可插拔存储引擎的概念…