QT入门与基础控件

news2024/11/13 9:33:13

目录

一、QT入门

1.1QT简介

1.2经典应用

1.3工程搭建

1.3.1按钮 

1.3.2行编辑框

1.3.3简单确定位置

1.4信号与槽机制

二、布局管理器

2.1布局管理器

2.2输出控件

2.3输入控件

2.4按钮

2.5容器

2.5.1Group Box 

2.5.2Ccroll Area

2.5.3Tool Box

2.5.4 Tab Widget

2.5.5Stacked Widget

三、实现一个计算器


一、QT入门

1.1QT简介

QT是挪威Trolltech开发的多平台C++图形用户界面应用程序框架。

 它跑起来要求很低只要有Linux库就能跑起来

1.2经典应用

之前讲C++时就说过这个

1.3工程搭建

新建工程ctrl+N或者点击文件新建

 

名字随便,路径不能有中文,设置默认路径就下次直接存这里不设置就选一下,怎么设置都行

下一步

 

选择平台,展示没有别的可选项

 

这有三个选项:

mainwindows:大一些的项目

widget:中等大小

dialog:很小,就像某个软件打开一个选项不选完不能点别的那种

这里我们选择中等的就行,下面这个勾勾我们不勾

下面这个选项勾上以后可以拖拽设置界面

然后完成,现在只有一个框架我们运行一下

1.3.1按钮 

 

 我们只需要加上头文件,创建一个按键对象,就可以让这个小窗口多一个OK键。

 

1.3.2行编辑框

 

 

 

1.3.3简单确定位置

 

1.4信号与槽机制

 为了方便开发QT引入了信号与槽机制,升级了一下C++的语法。

 

 现在的OK键按下删除,我们想在加一个行编辑器,实现按下下面行编辑器的内容输入到上面。

这时候直接绑定按键就不行了我们需要设计一个槽函数

 

 

 

二、布局管理器

2.1布局管理器

 

新建一个工程

#include "widget.h"
#include <QVBoxLayout>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    le = new QLineEdit(this);
    le1 = new QLineEdit(this);
    pb = new QPushButton("OK", this);

    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(le);
    vbox->addWidget(le1);
    vbox->addWidget(pb);

    this->setLayout(vbox);
}

Widget::~Widget()
{

}

 

#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    le = new QLineEdit(this);
    le1 = new QLineEdit(this);
    pb = new QPushButton("OK", this);
#if 0
    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(le);
    vbox->addWidget(le1);
    vbox->addWidget(pb);

    this->setLayout(vbox);
#endif
    QHBoxLayout *hbox = new QHBoxLayout;
    hbox->addWidget(le);
    hbox->addWidget(le1);
    hbox->addWidget(pb);

    this->setLayout(hbox);
}

Widget::~Widget()
{

}

 

#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    le = new QLineEdit(this);
    le1 = new QLineEdit(this);
    pb = new QPushButton("OK", this);

#if 0
    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(le);
    vbox->addWidget(le1);
    vbox->addWidget(pb);

    this->setLayout(vbox);
#endif

#if 0
    QHBoxLayout *hbox = new QHBoxLayout;
    hbox->addWidget(le);
    hbox->addWidget(le1);
    hbox->addWidget(pb);

    this->setLayout(hbox);
#endif
#if 1
    QGridLayout *gbox = new QGridLayout;
    gbox->addWidget(le, 0, 0);
    gbox->addWidget(le1, 1, 1);
    gbox->addWidget(pb, 2, 2);
    this->setLayout(gbox);
#endif

}

Widget::~Widget()
{

}

 

#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QFormLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    le = new QLineEdit(this);
    le1 = new QLineEdit(this);
    pb = new QPushButton("OK", this);

    QFormLayout *fbox = new QFormLayout;
    fbox->addRow("user", le);
    fbox->addRow("pawd", le1);
    fbox->addRow("", pb);
    this->setLayout(fbox);

#if 0
    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(le);
    vbox->addWidget(le1);
    vbox->addWidget(pb);

    this->setLayout(vbox);
#endif

#if 0
    QHBoxLayout *hbox = new QHBoxLayout;
    hbox->addWidget(le);
    hbox->addWidget(le1);
    hbox->addWidget(pb);

    this->setLayout(hbox);
#endif
#if 0
    QGridLayout *gbox = new QGridLayout;
    gbox->addWidget(le, 0, 0);
    gbox->addWidget(le1, 1, 1);
    gbox->addWidget(pb, 2, 2);
    this->setLayout(gbox);
#endif

}

Widget::~Widget()
{

}

 

2.2输出控件

2.3输入控件

 

输入和输出用一个例子演示

当你需要引用一个照片时要把这个照片放到引自目录中

这个带有你工程名的就是,然后我们粘过去就行。

//.h文件
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLineEdit>
#include <QTextEdit>
#include <QComboBox>
#include <QComboBox>
#include <QTimeEdit>
#include <QDial>
#include <QSlider>
#include <QScrollBar>

#include <QLabel>
#include <QLCDNumber>
#include <QProgressBar>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();
private:
    //input
    QLineEdit *le;
    QTextEdit *te;
    QComboBox *cb;
    QTimeEdit *timee;
    QDial *dl;
    QSlider *sd;
    QScrollBar *sb;

    //output
    QLabel *lb, *lb1;
    QLCDNumber *lcd;
    QProgressBar *pgb;
};

#endif // WIDGET_H

 

//.c文件
#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //input
       le = new QLineEdit(this);
       te = new QTextEdit;
       cb = new QComboBox;
       cb->addItem("read");//选项1
       cb->addItem("write");//选项2
       timee = new QTimeEdit;
       dl = new QDial;
       sd = new QSlider;
       sd->setOrientation(Qt::Horizontal);//水平方向
       sb = new QScrollBar;
       sb->setOrientation(Qt::Horizontal);//水平方向
       QVBoxLayout *vbox = new QVBoxLayout;
       vbox->addWidget(le);
       vbox->addWidget(te);
       vbox->addWidget(cb);
       vbox->addWidget(timee);
       vbox->addWidget(dl);
       vbox->addWidget(sd);
       vbox->addWidget(sb);

       //output
       lb = new QLabel("hello");
       lb1 = new QLabel;
       QPixmap pix("1.png");
       lb1->setFixedSize(100, 100);//设置大小
       /*经过我的验证这个自适应大小不是照片是我们的窗口*/
       /*就是照片是100X100窗口随照片变*/
       lb1->setScaledContents(true);//自适应大小
       lb1->setPixmap( pix );
       lcd = new QLCDNumber;
       pgb = new QProgressBar;
       QVBoxLayout *vbox1 = new QVBoxLayout;
       vbox1->addWidget(lb);
       vbox1->addWidget(lb1);
       vbox1->addWidget(lcd);
       vbox1->addWidget(pgb);

       QHBoxLayout *hbox = new QHBoxLayout;
       hbox->addLayout(vbox);
       hbox->addLayout(vbox1);
       this->setLayout(hbox);

       connect(dl, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));
       connect(dl, SIGNAL(valueChanged(int)), pgb, SLOT(setValue(int)));
}

Widget::~Widget()
{

}

 暂时不需要设置主函数,默认就行效果就是下面这个样子。

 

2.4按钮

 

//.h文件
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLineEdit>
#include <QCheckBox>
#include <QPushButton>

class Widget : public QWidget
{
    Q_OBJECT
public slots:
    void setpass(bool flag)
    {
        if(!flag)
            le->setEchoMode(QLineEdit::Password);//显示密码
        else
            le->setEchoMode(QLineEdit::Normal);//不显示密码
    }
public:
    Widget(QWidget *parent = 0);
    ~Widget();
private:
    QLineEdit *le;
    QCheckBox *ck;
    QPushButton *pb;
};

#endif // WIDGET_H
#include "widget.h"
#include <QVBoxLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    le = new QLineEdit;
//    le->setEchoMode(QLineEdit::Password);
    ck = new QCheckBox("show passwd");
    pb = new QPushButton("clear");

    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(le);
    vbox->addWidget(ck);
    vbox->addWidget(pb);
    this->setLayout(vbox);

    connect(pb, SIGNAL(clicked(bool)), le, SLOT(clear()));
    connect(ck, SIGNAL(clicked(bool)), this, SLOT(setpass(bool)));
}

Widget::~Widget()
{

}

具体效果如下:实现了一个可以清除和选择是否明文的密码框

 

 

2.5容器

2.5.1Group Box 

#include "widget.h"
#include <QVBoxLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    gb = new QGroupBox("choice", this);

    r1 = new QRadioButton("aaaa");
    r2 = new QRadioButton("bbbb");
    r3 = new QRadioButton("cccc");

    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(r1);
    vbox->addWidget(r2);
    vbox->addWidget(r3);

    gb->setLayout(vbox);

    QVBoxLayout *mainbox = new QVBoxLayout;
    mainbox->addWidget(gb);
    this->setLayout(mainbox);
}

Widget::~Widget()
{

}

 

2.5.2Ccroll Area

#include "widget.h"
#include <QVBoxLayout>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    lb = new QLabel(this);
    QPixmap pix("1.png");
    lb->setPixmap(pix);

    sa = new QScrollArea(this);
    sa->setWidget(lb);

    QVBoxLayout *mainbox = new QVBoxLayout;
    mainbox->addWidget(sa);
    this->setLayout(mainbox);
}

Widget::~Widget()
{

}

2.5.3Tool Box

#include "widget.h"
#include <QVBoxLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    tb = new QToolBox;

    pb[0] = new QPushButton("aaa");
    pb[1] = new QPushButton("bbb");
    pb[2] = new QPushButton("ccc");

    tb->addItem(pb[0], "11111");
    tb->addItem(pb[1], "22222");
    tb->addItem(pb[2], "33333");

    QVBoxLayout *mainbox = new QVBoxLayout;
    mainbox->addWidget(tb);
    this->setLayout(mainbox);
}

Widget::~Widget()
{

}

这个Tool Box就像微信、QQ联系人分组那种

2.5.4 Tab Widget

 

 

#include "widget.h"
#include <QVBoxLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    tw = new QTabWidget;

    te1 = new QTextEdit("11111111");
    te2 = new QTextEdit("112221111");
    te3 = new QTextEdit("11113333");

    tw->addTab(te1, "1.c");
    tw->addTab(te2, "2.c");
    tw->addTab(te3, "3.c");

    QVBoxLayout *mainbox = new QVBoxLayout;
    mainbox->addWidget(tw);
    this->setLayout(mainbox);
}

Widget::~Widget()
{

}

 

2.5.5Stacked Widget

 

#include "widget.h"
#include <QVBoxLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    sw = new QStackedWidget;

    te1 = new QTextEdit("aaaa");
    te2 = new QTextEdit("aaadsfasdfasdfa");
    te3 = new QTextEdit("aaasdfaaa");

    sw->addWidget(te1);
    sw->addWidget(te2);
    sw->addWidget(te3);

    cb = new QComboBox;
    cb->addItem("1111");
    cb->addItem("2222");
    cb->addItem("3333");

    QVBoxLayout *mainbox = new QVBoxLayout;
    mainbox->addWidget(sw);
    mainbox->addWidget(cb);
    this->setLayout(mainbox);

    connect(cb, SIGNAL(activated(int)), sw, SLOT(setCurrentIndex(int)));
}

Widget::~Widget()
{

}

三、实现一个计算器

我这道行太浅了,大部分都得和老师学习一下。

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLineEdit>
#include <QPushButton>

class Widget : public QWidget
{
    Q_OBJECT
public slots:
    /*实现尾部字母的删除*/
    void chop_onedata();
    /*将数字键捕获*/
    void num_bt_pushed();
    /*将运算符键捕获*/
    void op_bt_pushed();
    /*将计算键捕获*/
    void calc_bt_pushed();
public:
    Widget(QWidget *parent = 0);
    ~Widget();
private:
    QLineEdit *in, *out;
    QPushButton *p1, *p2, *p3, *p4, *p5, *p6, *p7,*p8;
    //11-15加减乘除等于
    QPushButton *p0, *p9, *p11, *p12, *p13, *p14, *p15;
    QString op;
    int data1;
    int data2;
    int sum;
};

#endif // WIDGET_H
#include "widget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    //in = new QLineEdit(this);
    out = new QLineEdit(this);
    p1 = new QPushButton("1",this);
    p2 = new QPushButton("2",this);
    p3 = new QPushButton("3",this);
    p4 = new QPushButton("4",this);
    p5 = new QPushButton("5",this);
    p6 = new QPushButton("6",this);
    p7 = new QPushButton("7",this);
    p8 = new QPushButton("8",this);
    p9 = new QPushButton("9",this);
    p0 = new QPushButton("0",this);
    p11 = new QPushButton("+",this);
    p12 = new QPushButton("-",this);
    p13 = new QPushButton("X",this);
    p14 = new QPushButton("/",this);
    p15 = new QPushButton("=",this);

    QVBoxLayout *vbox = new QVBoxLayout;
    QHBoxLayout *hbox1 = new QHBoxLayout;
    QHBoxLayout *hbox2 = new QHBoxLayout;
    QHBoxLayout *hbox3 = new QHBoxLayout;

    hbox1->addWidget(p0);
    hbox1->addWidget(p1);
    hbox1->addWidget(p2);
    hbox1->addWidget(p3);
    hbox1->addWidget(p4);

    hbox2->addWidget(p5);
    hbox2->addWidget(p6);
    hbox2->addWidget(p7);
    hbox2->addWidget(p8);
    hbox2->addWidget(p9);

    hbox3->addWidget(p11);
    hbox3->addWidget(p12);
    hbox3->addWidget(p13);
    hbox3->addWidget(p14);
    hbox3->addWidget(p15);

    //vbox->addWidget(in);
    vbox->addWidget(out);
    vbox->addLayout(hbox1);
    vbox->addLayout(hbox2);
    vbox->addLayout(hbox3);

    this->setLayout(vbox);
    connect(p0, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p1, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p2, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p3, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p4, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p5, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p6, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p7, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p8, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));
    connect(p9, SIGNAL(clicked(bool)), this, SLOT(num_bt_pushed()));

    connect(p11, SIGNAL(clicked(bool)), this, SLOT(op_bt_pushed()));
    connect(p12, SIGNAL(clicked(bool)), this, SLOT(op_bt_pushed()));
    connect(p13, SIGNAL(clicked(bool)), this, SLOT(op_bt_pushed()));
    connect(p14, SIGNAL(clicked(bool)), this, SLOT(op_bt_pushed()));

    connect(p15, SIGNAL(clicked(bool)), this, SLOT(calc_bt_pushed()));

}
/*将运算符键捕获*/
void Widget::op_bt_pushed()
{
    //1.提取按键
    QPushButton *btx = static_cast<QPushButton *>(sender());
    //2.提取文字
    op = btx->text();
    //3.保存数据1
    data1 = out->text().toInt();
    //4.清除输入框
    out->clear();
}
/*将计算键捕获*/
void Widget::calc_bt_pushed()
{
    //1.提取第二操作数
    data2 = out->text().toInt();
    //2.运算
    switch(op.toStdString().c_str()[0])
    {
    case '+': sum = data1+data2; break;
    case '-': sum = data1-data2; break;
    case '*': sum = data1*data2; break;
    case '/': sum = data1/data2; break;
    }
    //3.显示结果
    out->setText(QString::number(sum));
}

void Widget::num_bt_pushed()
{
    //1.提取按键
    QPushButton *btx = static_cast<QPushButton *>(sender());
    //2.提取文字
    QString c = btx->text();
    //3.追加显示在编辑框
    QString data = out->text();
    out->setText(data+c);
}

void Widget::chop_onedata()
{
    //1.提取文字
    QString data = out->text();
    //2.将尾部删除
    data.chop(1);
    //3.放回去
    out->setText(data);
}
Widget::~Widget()
{

}

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

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

相关文章

射频脉冲频谱及退敏效应简述

当使用频谱仪测试射频脉冲信号的频谱时&#xff0c;设置不同的RBW可以得到不同的结果&#xff0c;有连续的包络谱和离散的线状谱之分。针对简单的射频脉冲而言&#xff0c;脉冲退敏效应是指&#xff0c;当显示线状谱时&#xff0c;中心载波的幅度将低于脉内平均功率&#xff0c…

网络工程师必修课主流两种方式实现不同VLAN间通信

我们知道默认不同VLAN间数据时不能通信的,想要实现不同VLAN间通信常用的有两种方式: 一、通过三层交换路由功能实现不同VLAN之间的通信 二、通过单臂路由实现不同VLAN之间的通信 1.通过三层SVI虚接口配置路由实现通信: 交换机A的配置 vlan batch 20 30 //创建VLAN20 V…

数据库概念及运算符介绍

文章目录一、介绍概念分类相关术语启动与关闭服务卸载MySQL的管理工具Navicat的下载和安装逻辑结构二、SQL介绍分类语法注释DDLDQL基本查询运算符伪表算术运算符比较运算符等号运算符安全等与运算符不等于运算符空运算符非空运算符最小值最大值运算符BETWEEN AND运算符IN运算符…

操作符详解

文章目录 算术操作符移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员表达式求值前言 一、算术操作符 - * / % 注意&#xff1a; 1. 除了 % 操作符之外&#xff0c;…

茕茕白兔十二年

白兔子黑兔子 一年一月&#xff1a;孤独 黑兔子主人公孤单一人躺在斐波那契试验田&#xff0c;犹如上帝造出的亚当。ta决定邀请别的兔子跟ta一起抵抗生活中的百无聊赖&#xff0c;就写下了“征友”明信片&#xff0c;并在明信片上畅想了他们在一起美好的“兔生”。 那一年的秋…

29. 两数相除

打卡!!!每日一题 今天给大家带来一道位运算类型的题目 题目描述&#xff1a; 题目示例&#xff1a; 对于这种类型的题目&#xff0c;当题目要求不能使用乘法、除法时&#xff0c;那么则需要我们从移位、或、与、异或等位运算的角度来进行考虑&#xff0c;接下来我带着大家…

Linux 软件安装 YUM管理工具 简单引入

概念引入 &#xff1a;# 首先提出一个问题&#xff0c;我们在 Linux 操作系统中是如何 安装软件的 &#xff1f;&#xff1f;>>>在 Linux 系统中&#xff0c;安装软件是有三种方式>>>第一种 &#xff1a; RPM 管理工具 第二种 &#xff1a; YUM 管理工具第三…

Docker 搭建 LNMP + Wordpress

一、服务器环境 容器操作系统IP地址主要软件nginxCentOS 7172.18.0.10Docker-NginxmysqlCentOS 7172.18.0.20Docker-MysqlmysqlCentOS 7172.18.0.20Docker-Mysql 二、Linux系统基础镜像 systemctl stop firewalld setenforce 0 docker pull centos:7 #从公有仓库中下载cento…

GB28181开源项目WVP部署详细流程

开箱即用的的28181协议视频平台 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HcH0Aobk-1674895367480)(null)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EmrNYHcL-1674895367646)(null)] [外链图片转存失败,源站可…

手写线程池

为什么要使用线程池? 降低资源的消耗&#xff0c;降低线程创建和销毁的资源消耗&#xff1b;降低响应速度&#xff1a;线程的创建时间为T1&#xff0c;执行时间T2&#xff0c;销毁时间T3&#xff0c;免去T1和T3的时间&#xff1b;提高线程的可管理性 线程池的核心思想&#x…

【从零带你玩转Linux】权限及相关指令

前言 &#x1f3e0;个人主页&#xff1a;泡泡牛奶 &#x1f335;系列专栏&#xff1a;从零带你玩转Linux 本期将会让大家了解什么是权限&#xff0c;权限该如何理解&#xff0c;以及Linux中一些有关权限设置的指令操作&#xff0c;让你在Linux使用中更加得心应手(&#xff5e;&…

Git详细使用文档

Git 1.项目存在哪些问题 1.项目安全性太低2.项目很难协同开发3.项目无端报错4.项目版本混乱 2.Git概念 Git是一个分布式的版本控制及协同开发工具 3.版本控制工具分类 3.1.集中式版本控制工具 cvs svn ​ 集中式版本控制系统&#xff0c;版本库是集中存放在中央服务器的&am…

LeetCode 刷题系列 -- 143. 重排链表

给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a;L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为&#xff1a;L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。示例 1&a…

深度卷积神经网络、池化层、为什么使用卷积、残差网络

目录1.深度卷积神经网络(a deep convolutional neural network)输入图像的维度是&#xff0c;如果&#xff0c;计算输出图像维度公式&#xff1a;。s表示步幅&#xff0c;p表示填充的层数。filters的通道数是和输入图像的通道数保持一致的。分析上图案例&#xff1a;第一层卷积…

leetcode刷题记录总结-5.双指针专题

文章目录一、过滤保序27.移除元素题解题解1&#xff1a;暴力解法题解2&#xff1a;双指针法[26. 删除有序数组中的重复项](https://leetcode.cn/problems/remove-duplicates-from-sorted-array/)题解[283. 移动零 ](https://leetcode.cn/problems/move-zeroes/description/)题解…

借助ChatGPT学习ROS2机器人编程

很好用&#xff0c;很方便。简单发布和订阅代码直接能跑的。如下&#xff1a;学习效率指数提升&#xff0c;果然数字生产力之神&#xff01;空洞的问题和回复&#xff1a;如何在一个月时间内掌握ROS2机器人操作系统的全部核心内容&#xff1f;要在一个月时间内掌握ROS2机器人操…

源码启动MeterSphereV2.6版本注意事项(三)

前言 之前写过一篇MeterSphereV2.3版本Mac本地启动详细教程&#xff08;含常见错误&#xff09;本地启动V2.3版本的。时隔3个月&#xff0c;MeterSphere已经到了V2.6 版本了&#xff0c;很多小伙伴私信我让我写一篇V2.6 版本的启动&#xff0c;刚好趁过年有时间&#xff0c;给…

Spring和SpringMvc详细讲解

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;Spring和SpringMvc详细讲解 ✅创作者&#xff1a;林在闪闪发光 ⏰预计时间&#xff1a;30分钟 &#x1f389;个人主页&#xff1a;林在闪闪发光的个人主页 &#x1f341;林在闪闪发光的个人社区&#xff0c;欢迎你的加入: …

金仓数据库单表与多表查询

单表与多表查询 单引号与双引号 针对有空格、特殊字符、数字开头的字段别名必须加双引号 针对标量字符串表达式必须用加单引号 连接运算 字符串的拼接运算 字符串拼接经常用于生成SQL脚本 删除exam模式下所有的表&#xff0c;可以通过拼接生成如下批量的SQL select drop t…

scipy learn sharpen filter

文章目录1. 问题2. 方案2.1 学习一个 5 * 5的滤波核2.2 学习分通道的滤波核 以及 分离卷积3. 分析根据图像对学习滤波核之前研究过根据图像对生成3Dlut, 以及生成颜色变换系数 这里我们利用图像对学习 滤波 1. 问题 遇到的问题是这样的&#xff0c;已知一个图像和经过邻域滤…