使用QPushButton实现计算机

news2025/1/12 23:13:27

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();
    }

}


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

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

相关文章

携程testab算法分析

声明 本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。 如有侵权,请联系我进行删除。 这里只是我分析过程,以及一些重要点的记录,没有…

UE5 C++(十五)— TimerHandle(定时器)的使用

文章目录 设置定时器声明FTimerHandle定义执行函数设置定时器 清除定时器 定时器&#xff08;Timer&#xff09; 可用于执行延迟类型的操作&#xff0c;或让某些操作在一段时间内重复执行。 设置定时器 定时器的设置只需三步即可完成&#xff1a;声明定时器句柄 FTimerHandle…

固态硬盘只显示一半容量怎么办?

有时候我们会发现固态硬盘只显示一半容量&#xff0c;那么为什么会出现这个问题呢&#xff1f;下面我们就一起来了解一下。 为什么硬盘没有显示满容量&#xff1f; 在Windows 11/10/8/7中硬盘容量显示错误&#xff0c;有很多原因会导致这种情况发生。以下总结了一些常见的原因…

PHP开发日志 ━━ 不同方法判断某个数组中是否存在指定的键名,测试哪种方法效率高

我们可以用isset($arr[a]) 或者 array_key_exists(a, $arr) 来判断a键名是否存在与$arr数组。 那么这两种方式哪个运行速度快呢&#xff1f; 不多废话了&#xff0c;现在我们写一段代码来测试一下&#xff1a; $array [a > 1, b > 2, c > 3];$start microtime(tru…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷③

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷3 目录 需要竞赛软件包环境以及备赛资源可私信博主&#xff01;&#xff01;&#xff01; 2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷3 模块一 …

《Shader开发实战》-笔记

一、初识游戏图形 1、什么是渲染&#xff1f; 渲染实际上就是创建图像的过程&#xff0c;在渲染过程中创建的图像被称为渲染或者帧&#xff0c;该图像&#xff08;帧&#xff09;以每秒多次在计算机屏幕上进行呈现&#xff0c;即帧率。 负责渲染图像&#xff08;帧&#xff09…

美国证券交易委员会 X 账户被黑,引发比特币市场震荡

Bleeping Computer 网站消息&#xff0c;威胁攻击者成功“占领”了美国证券交易委员会的 X 账户&#xff0c;并发布一条关于批准比特币 ETF 在证券交易所上市的虚假公告。 帖子原文&#xff1a;今天&#xff0c;美国证券交易委员会批准比特币 ETF 在注册的国家证券交易所上市&a…

华为认证 | HCIP-Storage V5.5 认证正式发布!

华为认证存储高级工程师HCIP-Storage V5.5&#xff08;中文版&#xff09;自2023年12月28日起正式在中国区发布。 01 发布概述 基于“平台生态”战略&#xff0c;围绕“云-管-端”协同的新ICT技术架构&#xff0c;华为公司打造了覆盖ICT领域的认证体系&#xff0c;包含ICT基础…

自动化生产线-采用工业机器人比人工有哪些优势?

工业机器人相对于人工具有一些显著的优势&#xff0c;这些优势使它们在制造和生产领域得到广泛应用。以下是工业机器人相对于人工的一些主要优势&#xff1a; 1、精度和一致性&#xff1a; 机器人可以执行高精度的操作&#xff0c;确保产品的质量和规格一致&#xff0c;而且不容…

如何加密U盘数据?U盘数据加密软件怎么选?

U盘作为最常用的移动储存设备&#xff0c;是很多人储存数据的重要工具。而普通的U盘不具备保护数据的功能&#xff0c;很容易导致数据泄露。因此&#xff0c;我们需要使用专业的U盘加密软件来加密保护U盘数据。那么&#xff0c;U盘数据加密软件该怎么选择呢&#xff1f;下面我们…

golang中的循环依赖

作为 Golang 开发人员&#xff0c;您可能遇到过导入周期。Golang 不允许导入循环。如果 Go 检测到代码中的导入循环&#xff0c;则会抛出编译时错误。在这篇文章中&#xff0c;让我们了解导入周期是如何发生的以及如何处理它们。 导入周期 假设我们有两个包&#xff0c;p1并且…

windows10+ubuntu20.04双系统中,ubuntu系统显示home空间不足的扩容方法

实际上网上有两种扩容方法&#xff0c;除了本文的方法外&#xff0c;另一种是在使用启动U盘打开试用ubuntu&#xff0c;应该涉及到nvidia显卡驱动问题故未采用。另一种即本文。 最开始安装双系统时内存分配没有分配好&#xff0c;给ubuntu系统分配的空间较小,导致了后来的的问…

分布式锁3: zk实现分布式锁5 使用中间件curator-interprocessmutex可重入锁

一 curator的说明 1.1 curator的说明 curator是netflix公司开源的一个zk客户端。对Zookeeper提供的原生客户端进行封装&#xff0c;简化了Zookeeper客户端的开发量。Curator解决了很多zookeeper客户端非常底层的细节开发工作&#xff0c;包括连接重连、反复注册wathcer和Node…

玩转Mysql 四(MySQL逻辑架构与数据引擎)

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。如有侵权&#xff0c;请留言&#xff0c;我及时删除&#xff01; 一、MySQL逻辑架构 1、从Oracle收购MySQL后&#xff0c;MySQL逻辑架构受Oracle影响&#xff0c;MyS…

C++与Typescript的区别

目录 一、C类模板和函数模板 1.类模板 2.函数模板 二&#xff0c;Typescript 的泛型声明 1.泛型函数 2.泛型类 为什么C和Typescript语言中主张模板和泛型 一、C类模板和函数模板 在C中&#xff0c;类模板和函数模板允许你为多种数据类型编写通用的代码。这就像每个人都有…

14:00进去,14:05就出来了,面试问的有点变态。。

刚从小厂出来&#xff0c;没想到在另一家公司我又寄了。 在这家公司上班&#xff0c;每天都要加班&#xff0c;但看在钱给的比较多的份上&#xff0c;也就不太计较了。但万万没想到一纸通知&#xff0c;所有人不准加班了&#xff0c;不仅加班费没有了&#xff0c;薪资还要降40…

Jarvis步进法(Jarvis March)凸包算法

Jarvis步进法&#xff08;也称为包裹法&#xff09;&#xff1a; Jarvis步进法是一种逐步选择凸包顶点的算法。从点集中选择一个起始点&#xff0c;然后在每一步中选择下一个顶点&#xff0c;该顶点是当前点集中与当前点形成的线段上&#xff0c;极角最小的点。该算法的时间复杂…

【深度学习:数据增强】计算机视觉中数据增强的完整指南

【深度学习&#xff1a;数据增强】计算机视觉中数据增强的完整指南 为什么要做数据增强&#xff1f;等等&#xff0c;什么是数据增强&#xff1f;数据增强技术数据增强的注意事项和潜在陷阱什么时候应该做数据增强&#xff1f;类不平衡的数据增强那么我应该选择哪些转换呢&…

图像分类任务的可视化脚本,生成类别json字典文件

1. 前言 之前的图像分类任务可视化&#xff0c;都是在train脚本里&#xff0c; 用torch中dataloader将图片和类别加载&#xff0c;然后利用matplotlib库进行可视化。 如这篇文章中&#xff1a;CNN 卷积神经网络对染色血液细胞分类(blood-cells) 在分类任务中&#xff0c;必定…