【Qt】详细Qt基础 (包括自定义控件)

news2024/11/26 0:27:43

目录

  • QT 概述
  • 创建项目
    • 项目文件(. pro)
    • main.cpp
    • mainwindow.ui
    • mainwindow.h
    • mainwindow.cpp
  • 窗口类
    • QWidget 窗口显示
    • QDialog 窗口
  • QPushButton
    • 创建
    • 显示
  • 对象树
    • 基本概念
    • 功能
  • 坐标体系
  • 控件
    • Item Widgets
      • QListWidget
      • QTreeWidget
      • QTableWidget
    • 自定义控件

QT 概述

模块功能
Qt CoreQt 类库的核心,所有其他模块都依赖于此模块
Qt GUI设计 GUI 界面的基础类,包括 OpenGL
Qt Widgets用于构建 GUI 界面的 C++ 图形组件类

创建一个项目都会自动添加上述模块

注意点

  • QtCreator 创建的 项目名称 不能包含中文,不能包含空格,项目目录 也不能含中文
  • QtCreator 默认使用 UTF-8 格式编码对文件字符进行编码

创建项目

创建完后的

项目文件(. pro)

# 在项目文件中, 注释需要使用 井号(#)
# 项目编译的时候需要加载哪些底层模块
QT       += core gui 

# 如果当前Qt版本大于4, 会添加一个额外的模块: widgets
# Qt 5中对gui模块进行了拆分, 将 widgets 独立出来了
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
   
# 使用c++11新特性
CONFIG += c++11	

#如果在项目中调用了废弃的函数, 项目编译的时候会有警告的提示    
DEFINES += QT_DEPRECATED_WARNINGS

# 项目中的源文件
SOURCES += \
        main.cpp \
        mainwindow.cpp  # 这是自定义窗口类名字时候的生成的源文件,在创建项目的时候就看看到
        
# 项目中的头文件
HEADERS += \
        mainwindow.h  # 这是自定义窗口类名字时候的生成的头文件
        
# 项目中的窗口界面文件
FORMS += \
        mainwindow.ui  # 这是自定义窗口类名字时候的生成的 ui 文件

main.cpp

#include "mainwindow.h"		// 生成的窗口类头文件,创建项目时候的根据 class name 生成的
#include <QApplication>		// 应用程序类头文件

int main(int argc, char *argv[])
{
    // 创建应用程序对象, 在一个Qt项目中实例对象有且仅有一个
    // 类的作用: 检测触发的事件, 进行事件循环并处理
    QApplication a(argc, argv);
    // 创建窗口类对象
    // 这个 MainWindow 名字是创建项目时候自定义的那个 class name
    MainWindow w;
    // 显示窗口
    w.show();
    // 应用程序对象开始事件循环, 保证应用程序不退出
    return a.exec();
}

mainwindow.ui

<!-----以文本编辑器打开,会找到这样一行代码-->
<class>MainWindow</class>

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>		// Qt标准窗口类头文件

QT_BEGIN_NAMESPACE
// mainwindow.ui 文件中也有一个类叫 MainWindow, 将这个类放到命名空间 Ui 中
namespace Ui { class MainWindow; }	
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT	// 这个宏是为了能够使用Qt中的信号槽机制

public:
    // 发现和 ui 类中的 MainWindow 同名,这是为了在 cpp 中底层进行捆绑
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;		// 定义指针指向窗口的 UI 对象
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)  // 始化了一个指向 `ui::MainWindow` 类的新对象的指针 `ui`
{
    // 实例化 ui 指针对象,是因为让窗口实例化,这样才能展现出窗口
    // 将 mainwindow.ui 的实例对象和当前类的对象进行关联
    // 这样同名的两个类对象就产生了关联, 合二为一了
    // 因此在 mainwindow 中就能对 ui 界面改变了
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}
  • 因此 mainwindow.hmainwindow.cppmainwindow.ui 可以堪称是一个整体,是用两个同名对象关联

窗口类

  • QWidget

    • 父类是 QObject
    • 所有窗口类的基类
    • Qt 中的控件 (按钮,输入框,单选框…) 也属于窗口, 基类都是 QWidget
    • 可以内嵌到其他窗口中,没有边框
    • 可以不内嵌单独显示,独立的窗口, 有边框
  • QDialog

    • 对话框类,继承 QWidget
    • 模态和非模态两种显示方式
    • 不能内嵌到其他窗口中
  • QMainWindow

    • 是专门设计用作应用程序的主窗口的类,它继承自 QWidget,但提供了更高级的功能和布局。
    • 它有内置的支持,用于管理常见的主窗口元素,比如菜单栏 (QMenuBar)、工具栏 (QToolBar)、状态栏 (QStatusBar)、和中央窗口区 (centralWidget)
    • 不能内嵌到其他窗口中

QWidget 窗口显示

// MainWindow 是自己创建项目取的名字
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    TestWidget *w = new TestWidget;
    w->show();
}
  • 这个就是显示两个独立窗口
  • 一个是创建 MainWindow 对象时,Qt 框架会自动创建一个基本的窗口,因为 MainWindow 继承于 QMainWindow,然后 main() 函数中调用 show 方法,窗口显示
  • 一个是自定义的 TestWidget 窗口,由于没有设置父亲,单独显示,但前提是调用 show() 方法
// 和上面其他一致,就定义不同
// explicit TestWidget (QWidget *parent = nullptr);  这是传参的原型
TestWidget *w = new TestWidget(this);
// 这个语法也是没问题的,MainWindow 是 QWidget 的子类,父类指针指向子类,类似于多态了
  • 这个就是只显示一个窗口,只显示 MainWindow 窗口,TestWidget 窗口内嵌在了父窗口里面
  • 这是设置了父亲的显示,不是独立窗口

QDialog 窗口

QDialog 窗口都是独立作为一个窗口显示,都需要调用 show 方法,不管是否设置父亲

// 非模态
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    TestWidget *w = new TestWidget;
    w->show();
    TestDialog *d = new TestDialog;
    d->show();
}
  • 调用 show() 方法就是非模态显示,焦点即我们的鼠标 可以 随意切换到任意一个窗口
// 将上面的 show 方法变成 exec 方法,变成模态
d->exec();
  • 此时就是模态显示
  • 焦点即我们的鼠标 不可以 随意切换到任意一个窗口,只能点击当前的 QDialog 窗口
  • 它还会阻塞程序的执行,也就是将程序阻塞到当前位置,这里的显示就是 MainWindow 窗口一直不显示,因为调用是在 main 函数里,程序确阻塞在这里
  • 只有关闭 QDialog 窗口之后,才能够焦点随意切换,MainWindow 窗口显示出

QPushButton

创建

// 创建按钮
QPushButton *btn = new QPushButton;
btn->show();
// 需要指定父亲,不然会作为单独窗口显示
// 两种方式
btn->setParent(this);
QPushButton *btn = new QPushButton(this);  

显示

// 显示文本
// void setText(const QString &text);
// QString(const char *str); 可以隐式转换为 QString
btn->setText("第一个按钮");
QPushButton *btn2 = new QPushButton("第二个按钮", this);  
// 但是这个方法会按照控件的大小创建窗口

// 显示窗口标题
setWindowTitle("第一个窗口");   // 设置当前的类对象即 this 的窗口
TestWidget *w = new TestWidget;
w->setWindowTitle("指定窗口");       // 指定设置某个窗口标题

// 重置大小
// void resize(int w, int h);
resize(600, 400);       // 重置当前 this 的窗口大小
btn->resize(100, 100);  // 重置 btn 按钮的大小

// 设置固定窗口大小
setFixedSize(600, 400); // 设置之后,用户随意方向拖拽,长度都无法拉伸,固定了
setFixedHeight();        // 设置固定高度
setFixedWidth();        // 设置固定宽度

对象树

上面代码中,很容易发现我们 new 出来对象,却没有去手动释放,这就是对象树的功劳

基本概念

  • 在 Qt 中,大多数对象(特别是那些继承自 QObject 的类)都可以有一个父对象和多个子对象
  • 父对象与子对象之间形成了一种层次结构,称为对象树
  • 当你创建一个 Qt 对象并指定一个父对象时,新的对象会自动被添加到父对象的子对象列表中
QPushButton *btn = new QPushButton(this);`
  • 这行代码会创建一个 QPushButton 对象,并将其添加到 this 即当前窗口的子对象列表中
  • 对象树由 Qt 自动维护,通常不需要手动管理它

图例: anzhiyu

创建顺序从上到下,很好理解,析构反着来,可以用栈知识理解,先进后出 由对象树也能得出一个结论,创建出的类对象必须设置父对象

功能

内存管理

  • Qt 的对象树结构自动管理对象的内存
  • 当一个父对象被销毁时,它的所有子对象也会被自动销毁,这就意味着你不需要手动删除每一个子对象,这大大减少了内存泄漏的风险
  • 例如,当你关闭一个窗口时,窗口中的所有控件(如按钮、标签等)会被自动销毁

事件传播

  • Qt 中的事件(如鼠标点击、键盘输入等)会沿着对象树的层次结构传播
  • 通常,事件会首先发送到目标对象(如按钮),如果目标对象未处理该事件,则事件会传递给其父对象,直到顶层对象(如窗口)
  • 这种机制允许你在父对象中统一处理某些事件,而不需要在每个子对象中重复代码

坐标体系

QQ_1723279610516

  • 坐标原点是左上角即为 (0, 0),X 向右递增,Y 向下递增
  • 每个窗口的坐标体系规则是根据父窗口,注意不是顶级父类,是上一个父类,如上图的(10, 10) 是相对于 (0, 0) 的坐标,而 (20, 20) 是相对于 (10, 10) 的坐标,也就是以 (10, 10) 为起点往右 20 像素和往下 20 像素
  • X 即为宽,Y 即为高

示例一个层层套娃

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
    //创建一个按钮,让这个按钮作为当前创建的子控件
    QPushButton* btnA = new QPushButton(this);
    // 移动按钮的位置
    btnA->move(10,10);
    btnA->setText("  AAAA");
    //给按钮设置固定大小
    btnA->setFixedSize(200, 200);
    
    // 创建第二个按钮,让这个按钮作为当前创建的子控件
    QPushButton* btnB = new QPushButton(btnA);
    //移动按钮的位置
    btnB->move(10,10);
    btnB->setText("BBBB");
    //给按钮设置固定大小
    btnB->setFixedSize(100, 100);
    
    //创建第三个按钮,让这个按钮作为当前创建的子控件
    QPushButton* btnC = new QPushButton(btnB);
    //移动按钮的位置
    btnC->move(10,10);
    btnC->setText("C");
    // 给按钮设置固定大小
    btnC->setFixedSize(50,50);
}

效果:QQ_1723283671020

控件

Item Widgets

Item Widget 是用来表示单个可视化条目(例如列表中的一个项目、树形结构中的一个节点、表格中的一个单元格等)的控件

QListWidget

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

    QListWidgetItem*item = new QListWidgetItem("悯农");
    ui->listwidget->addItem(item);
    item->setTextAlignment(Qt::AlignHCenter);

    QStringList list;
    list << "锄禾日当午" << "汗滴禾下土" << "谁知盘中餐" << "粒粒皆辛苦";
    ui->listwidget->addItems(list);
}

效果:

QQ_1723625054718.png

QTreeWidget

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //treewidget树控件使用
    //设置水平头
    ui->treewidget->setHeaderLabels(QStringList() << "爱好" << "具体");
    QTreeWidgetItem *liItem = new QTreeWidgetItem(QStringList() << "水果");
    QTreeWidgetItem *pItem = new QTreeWidgetItem(QStringList() << "运动");
    
    //加载顶层的节点
    ui->treewidget->addTopLevelItem(liItem);
    ui->treewidget->addTopLevelItem(pItem);
    
    //追加子节点
    QStringList h1;
    h1 << "苹果" << "好吃";
    QTreeWidgetItem *l1 = new QTreeWidgetItem(h1);
    liItem->addChild(l1);
    //追加子节点
    QStringList h2;
    h2 << "篮球" << "爱玩";
    QTreeWidgetItem *l2 = new QTreeWidgetItem(h2);
    pItem->addChild(l2);
}

效果:

QQ_1723624685289

QTableWidget

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

    //设置列数
    ui->tablewidget->setColumnCount(3);
    //设置水平表头
    ui->tablewidget->setHorizontalHeaderLabels (QStringList ()<<"姓名"<<"性别"<<"年龄");
    //设置行数
    ui->tablewidget->setRowCount(3);
    //设置正文
    QMap<QString, QString> personMap;
    personMap.insert("张三", "男");
    personMap.insert("李四", "男");
    personMap.insert("王五", "男");

    int row = 0;
    for(auto it = personMap.begin(); it != personMap.end(); ++it) {
        int col = 0;
        ui->tablewidget->setItem(row, col++, new QTableWidgetItem(it.key()));      
        ui->tablewidget->setItem(row, col++, new QTableWidgetItem(it.value()));  
        // int 转换为 QString 
        ui->tablewidget->setItem(row, col++, new QTableWidgetItem(QString::number(row + 18))); 
    }
}

效果:

QQ_1723626502214

QMap 遍历

// QMap 遍历
// 法二
for (auto t : personMap) {
    int col = 0;
    ui->tablewidget->setItem(row, col++, new QTableWidgetItem(personMap.key(t)));  
    ui->tablewidget->setItem(row, col++, new QTableWidgetItem(t));               
    ui->tablewidget->setItem(row, col++, new QTableWidgetItem(QString::number(row + 18)));  
    row++;
}

// 法三
for (auto t : personMap.toStdMap()) {
    int col = 0;
    ui->tablewidget->setItem(row, col++, new QTableWidgetItem(t.first)); 
    ui->tablewidget->setItem(row, col++, new QTableWidgetItem(t.second)); 
    ui->tablewidget->setItem(row, col++, new QTableWidgetItem(QString::number(row + 18)));
    row++;
}

定义关联性类型

// 结构体
struct Person {
    QString name;
    QString sex;
    int age;
};

QList<Person> personList = {
    {"张三", "男", 18},
    {"李四", "男", 19},
    {"王五", "男", 20}
};

// QPair
QList<QPair<QString, QString>> personData = {
    {"张三", "男"},
    {"李四", "男"},
    {"王五", "男"}
};
// 调用就是 second, first

自定义控件

这里实现滑动条滑动,对应的 spinBox 也增加,相互制约的关系

效果:

QQ_1723635597797

  1. 新建一个 QWidgetSmallWidget,包含 ui 界面,在里面布局好要封装的控件
  2. 在新建的类的 cpp 文件中书写自定义控件的规则
void(QSpinBox:: *sp)(int) = &QSpinBox::valueChanged;
connect(ui->spinBox, sp, ui->hslider, &QSlider::setValue);
connect(ui->hslider, &QSlider::valueChanged, ui->spinBox, &QSpinBox::setValue);
  1. 这样就封装完成了,接下来就是使用这个类
    • 方法一就是在主窗口(需要调用这个类的窗口)的 ui 界面,使用一个 widget 容器,然后点击提升为,类名书写封装好的类,这样就 OK 了
    • 方法二是在主窗口(需要调用这个类的窗口)的头文件中定义封装好的类的对象,然后在 cpp 文件中实例化对象,就可以实现了
  2. 当然封装的不仅仅是简单的关联起了自定义控件,还需向外部提供一些必要的接口
// 头文件先定义,然后再 smallwidget.cpp 中实现
int SmallWidget::getNum() {
   return  ui->spinBox->value();
}

void SmallWidget::setNum(int num) {
   ui->spinBox->setValue(num);
}
  1. 接下来就是在外部调用这些接口了,为了方便实现,在主窗口 ui 界面新增了两个按钮,btn1, btn2,然后实现点击获取当前大小和设置大小
    • 方法一调用封装类调用接口方法
connect(ui->btn1, &QPushButton::clicked, ui->widget, [=]{
       qDebug() << ui->widget->getNum();
});

connect(ui->btn2, &QPushButton::clicked, ui->widget, [=]{
       ui->widget->setNum(50);
});

// widget 是使用的 QWidget 容器的名字
// 这种形式理解为就是一个 widget 指针指向了这个类,进行管理,类似于定义对象实例化对象
  • 方法二形式的调用
one = new SmallWidget(this);
connect(ui->btn2, &QPushButton::clicked,one, [=]{
       one->setNum(50);
});
// one 是在头文件 SmallWidget * one; 定义的,这里需要实例化一下再使用

说明:参考学习 https://subingwen.cn/

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

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

相关文章

Java_EE 多线程技术(Thread)--2

线程同步的使用使用this作为线程对象锁 某一个同步块需要同时拥有“两个以上对象的锁”时&#xff0c;就可能会发生“死锁”的问题。比如&#xff0c;“化妆线程”需要同时拥有“镜子对象”、“口红对象”才能运行同步块。那么&#xff0c;实际运行时&#xff0c;“小丫的化妆线…

解锁健康低卡的沙拉汁,享受清爽美味!

文章目录 蜂蜜芥末沙拉汁香草酸奶沙拉汁香草酸奶沙拉红酒醋黄芥末汁油醋沙拉汁百香果沙拉汁柠檬油醋汁蜂蜜芥末沙拉汁 往密封罐里,加入芥末酱、蜂蜜、苹果醋和胡椒,然后秘诀来了:用力摇10秒让油汁充分融合乳化,可以增添这款沙拉酱浓醇的厚度和风味。 香草酸奶沙拉汁 先将…

pytest + yaml 框架 - 支持pytest-repeat插件重复执行用例

平常在做功能测试的时候&#xff0c;经常会遇到某个模块不稳定&#xff0c;偶然会出现一些bug&#xff0c;对于这种问题我们会针对此用例反复执行多次&#xff0c;最终复现出问题来。 自动化运行用例时候&#xff0c;也会出现偶然的bug&#xff0c;可以针对单个用例&#xff0…

轻催和重催的催收方式?

在催收行业中&#xff0c;"轻催"和"重催"的概念通常指的是催收的策略和手段的不同。 轻催&#xff1a;这种方法通常适用于逾期时间较短&#xff0c;债务人可能只是暂时遗忘或遇到了短期的流动性问题。轻催的手段包括发送提醒通知、进行友好的电话提醒等&am…

汇编语言实现字母大小写转换

程序运行后数据段内容如箭头所示 执行转换后内存内容变为&#xff1a; 确实进行成功转换了

基于 CSS Grid 的简易拖拉拽 Vue3 组件,从代码到NPM发布(2)- NPM发布、在线示例

这里分享一下本开源项目是如何构建组件库及其如何发布到NPM上的&#xff0c;还有组件库与在线示例的构建有什么差异。 请大家动动小手&#xff0c;给我一个免费的 Star 吧~ 大家如果发现了 Bug&#xff0c;欢迎来提 Issue 哟~ github源码 NPM 示例地址 版本更新信息 这两天抽空…

file-unpumper:一款针对PE文件的安全分析工具

关于file-unpumper file-unpumper是一款针对PE&#xff08;可移植可执行&#xff09;文件的安全分析工具&#xff0c;可以帮助广大研究人员轻松对PE文件执行安全分析与审计任务。 file-unpumper是一款功能强大的命令行实用程序&#xff0c;旨在清理和分析可移植可执行(PE)文件…

XPath网页数据提取的得力助手

使用影刀RPA操作网页元素&#xff0c;你会发现总会有获取不到情况&#xff0c;这时我们就需要使用XPath来获取了。上一篇博文抓取小说内容&#xff0c;我们就是使用XPath来定位元素&#xff0c;简单快捷。 今天我们就来简单聊聊XPath&#xff01; 在当今数字化的时代&#xff…

介绍 MarsCode AI:下一代智能编程助手

在现代软件开发中&#xff0c;效率和代码质量的提升越来越成为开发者关注的焦点。今天&#xff0c;我们将介绍一款革命性的编程助手—— 豆包 MarsCode 编程助手&#xff0c;它由北京引力弹弓科技有限公司开发&#xff0c;旨在极大地提高开发流程中的各种环节&#xff0c;让编程…

Cuda-By-Example - 4

引入Thread概念 第4章使用GPU做并行运算的例子&#xff0c;归结起来就是定义一个内核函数&#xff0c;将数组dev_a和dev_b某一对元素相加。GPU发起N个block运行内核函数。每个block有自己的索引&#xff0c;这样kernel就可以凭借这个索引区分自身&#xff0c;来计算数组对应的…

Github 优质项目推荐(第七期):涵盖免费服务、API、低代码、安卓root、深度学习

文章目录 Github优质项目推荐 - 第七期一、【LangGPT】&#xff0c;5.7k stars - 让每个人都成为提示专家二、【awesome-selfhosted】&#xff0c;198k stars - 免费软件网络服务和 Web 应用程序列表三、【public-apis】&#xff0c;315k stars - 免费 API四、【JeecgBoot】&am…

如何在 cPanel 中使用 PHP-FPM

PHP性能一直是影响网站托管的一个重要问题。PHP是当前网络上使用最广泛的服务器编程语言&#xff0c;远远领先于其他语言。最受欢迎的内容管理系统和电子商务应用程序&#xff0c;如WordPress、Joomla、Drupal、Magento等&#xff0c;都是用PHP编写的。 PHP-FPM加速了在繁忙服务…

推荐几本编程入门书目

对于编程入门&#xff0c;推荐以下几本书籍&#xff0c;这些书籍覆盖了不同的编程语言&#xff0c;适合零基础的学习者逐步掌握编程基础&#xff1a; 1. 《Python编程快速上手——让繁琐工作自动化》 特点&#xff1a;以简单易懂的方式介绍了Python的基础知识和编程概念&#…

2024年四非边缘鼠鼠计算机保研回忆(记录版 碎碎念)

Hi&#xff0c;大家好&#xff0c;我是半亩花海。写下这篇博客时已然是金秋十月&#xff0c;心中的石头终于落地&#xff0c;恍惚间百感交集。对于保研这条路&#xff0c;我处于摸着石头过河、冲击、随缘的这些状态。计算机保研向来比其他专业难&#xff0c;今年形势更是艰难。…

如何做好薪酬福利体系设计,更好实现员工激励?

如何做好薪酬福利体系设计&#xff0c;更好实现员工激励&#xff1f; 中国作为福利制度建设的佼佼者&#xff0c;尤其在新中国成立后&#xff0c;员工福利体系日益丰富&#xff0c;涵盖了健康保障、休假权益及养老规划等多元化形式&#xff0c;作为间接报酬&#xff0c;有效激…

按模板批量生成工作表

按模板批量生成工作表&#xff0c;前提一个模板&#xff0c;然后用代码遍历循环填写人名&#xff0c;再保存为副本&#xff0c;即可达到效果 按模板批量生成工作表代码 Sub 批量生成员工表()last Sheet73.Range("C65535").End(xlUp).Row 普通区域arr Sheet73…

Redis配置篇 - 指定Redis配置的三种方式,以及Redis配置文件介绍

文章目录 1 指定Redis配置的三种方式1.1 通过命令行参数来指定Redis配置1.2 通过配置文件来指定Redis配置1.3 在服务器运行时更​​改 Redis 配置 2 关于Redis配置文件 1 指定Redis配置的三种方式 1.1 通过命令行参数来指定Redis配置 在redis启动时&#xff0c;可以直接通过命…

UCI-HAR数据集深度剖析:训练仿真与可视化解读

在本篇文章中&#xff0c;我们将深入探讨如何使用Python对UCI人类活动识别&#xff08;HAR&#xff09;数据集进行分割和预处理&#xff0c;以及运用模型网络CNN对数据集进行训练仿真和可视化解读。 一、UCI-HAR数据集分析及介绍 UCI-HAR数据集是一个公开的数据集&#xff0c…

xtu oj 彩球

样例输入# 3 7 5 3 1 2 3 1 2 3 1 6 4 3 1 2 2 3 1 3 6 2 2 1 2 3 4 5 5 样例输出# Yes Yes No 滑动窗口问题 AC代码 #include<stdio.h> #define N 10005 int main(){int T;scanf("%d",&T);while(T--){int n,m,k,i,flag1;//m个k种颜色 scanf("%d%d…

【C++入门篇 - 3】:从C到C++第二篇

文章目录 从C到C第二篇new和delete命名空间命名空间的访问 cin和coutstring的基本使用 从C到C第二篇 new和delete 在C中用来向系统申请堆区的内存空间 New的作用相当于C语言中的malloc Delete的作用相当于C语言中的free 注意&#xff1a;在C语言中&#xff0c;如果内存不够…