当前位置: 首页 > news >正文

Qt开发:容器组控件的介绍和使用

文章目录

    • 一、Group Box(分组框)
      • 1.1 QGroupBox 简介
      • 1.2 基本用法
      • 1.3 设置为可勾选(可启用/禁用子控件)
      • 1.4 信号与槽连接(监控勾选状态)
      • 1.5 布局示例(完整)
    • 二、Scroll Area(滚动区域控件)
      • 2.1 QScrollArea 简介
      • 2.2 基本使用方式
      • 2.3 常用设置
      • 2.4 实际场景示例:图片查看器
      • 2.5 九宫格图片布局的版本(即横向+纵向滚动)
    • 三、Tab Widget(标签页控件)
      • 3.1 QTabWidget 简介
      • 3.2 常用函数
      • 3.3 基本使用示例
      • 3.4 切换响应(信号)
      • 3.5 设置标签位置
      • 3.6 QTabWidget 创建一个包含多个标签页
    • 四、Frame (框架)
      • 4.1 QFrame 简介
      • 4.2 常用设置项说明
      • 4.3 基本用法示例
      • 4.4 分隔线示例(水平/垂直线)
      • 4.5 作为容器嵌套其他控件
      • 4.6 使用 QFrame 创建一个典型的三分区主窗口布局
    • 五、ToolBox(工具箱)
      • 5.1 QToolBox 简介
      • 5.2 常用方法
      • 5.3 基本用法示例
      • 5.4 信号槽
      • 5.5 完整窗口应用 QToolBox

一、Group Box(分组框)

  在 Qt 中,Group Box(分组框) 是一种常用的容器控件,由 QGroupBox 类提供,用于将多个相关的控件组合在一起,通常带有一个标题以标识这组控件的功能区域。

1.1 QGroupBox 简介

QGroupBox 的作用是组织界面布局、逻辑分区,使界面更清晰、有条理。
特点:

  • 可添加标题;
  • 可设置是否可勾选(启用/禁用整组控件);
  • 可与布局管理器配合使用,容纳任意数量的控件。

1.2 基本用法

QGroupBox *groupBox = new QGroupBox("网络设置");// 可选择添加 layout 管理子控件
QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget(new QRadioButton("有线网络"));
vbox->addWidget(new QRadioButton("无线网络"));
groupBox->setLayout(vbox);

1.3 设置为可勾选(可启用/禁用子控件)

groupBox->setCheckable(true);         // 显示复选框
groupBox->setChecked(false);          // 初始是否启用

勾选时内部控件启用,取消勾选时内部控件会自动禁用。

1.4 信号与槽连接(监控勾选状态)

connect(groupBox, &QGroupBox::toggled, this, [](bool checked){qDebug() << "GroupBox 是否启用:" << checked;
});

1.5 布局示例(完整)

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QWidget>
#include <QGroupBox>
#include <QRadioButton>
#include <QCheckBox>
#include <QVBoxLayout>
#include <QGridLayout>class MainWindow : public QWidget
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr) : QWidget(parent) {// 组合框1:gpb_1QGroupBox *gpb_1 = new QGroupBox("单选按钮组1", this);QRadioButton *rbtn_1 = new QRadioButton("QRadioButton1", this);QRadioButton *rbtn_2 = new QRadioButton("QRadioButton2", this);QRadioButton *rbtn_3 = new QRadioButton("QRadioButton3", this);QVBoxLayout *vbly1 = new QVBoxLayout(this);vbly1->addWidget(rbtn_1);vbly1->addWidget(rbtn_2);vbly1->addWidget(rbtn_3);gpb_1->setLayout(vbly1);// 组合框2:gpb_2QGroupBox *gpb_2 = new QGroupBox("复选按钮组2", this);QCheckBox *cbx1 = new QCheckBox("CheckBox_1", this);QCheckBox *cbx2 = new QCheckBox("CheckBox_2", this);QCheckBox *cbx3 = new QCheckBox("CheckBox_3", this);cbx2->setTristate(true); // 设置是否支持半选状态,默认不支持半选状态QVBoxLayout *vbly2 = new QVBoxLayout(this);vbly2->addWidget(cbx1);vbly2->addWidget(cbx2);vbly2->addWidget(cbx3);gpb_2->setLayout(vbly2);// 组合框3:gpb_3QGroupBox *gpb_3 = new QGroupBox("单选按钮和复选按钮组3", this);gpb_3->setCheckable(true);QRadioButton *rbtn_31 = new QRadioButton("QRadioButton31", this);QRadioButton *rbtn_32 = new QRadioButton("QRadioButton32", this);QRadioButton *rbtn_33 = new QRadioButton("QRadioButton33", this);QCheckBox *cbx4 = new QCheckBox("CheckBox4");QVBoxLayout *vbly3 = new QVBoxLayout(this);vbly3->addWidget(rbtn_31);vbly3->addWidget(rbtn_32);vbly3->addWidget(rbtn_33);vbly3->addWidget(cbx4);gpb_3->setLayout(vbly3);// 组合框4:gpb_4QGroupBox *gpb_4 = new QGroupBox("综合按钮4", this);gpb_4->setCheckable(true);gpb_4->setChecked(true);QRadioButton *rbtn_4 = new QRadioButton("QRadioButton4", this);QRadioButton *rbtn_5= new QRadioButton("QRadioButton5", this);rbtn_5->setCheckable(true);rbtn_5->setChecked(true);QVBoxLayout *vbly4 = new QVBoxLayout(this);vbly4->addWidget(rbtn_4);vbly4->addWidget(rbtn_5);gpb_4->setLayout(vbly4);QGridLayout *gdlayout = new QGridLayout(this);gdlayout->addWidget(gpb_1, 0, 0, 1, 1);gdlayout->addWidget(gpb_2, 0, 1, 1, 1);gdlayout->addWidget(gpb_3, 1, 0, 1, 1);gdlayout->addWidget(gpb_4, 1, 1, 1, 1);this->setLayout(gdlayout);}~MainWindow() {}
};
#endif // MAINWINDOW_H

输出结果:
在这里插入图片描述

二、Scroll Area(滚动区域控件)

  在 Qt 中,滚动区域控件(Scroll Area) 是用于在内容超出显示区域时提供滚动功能的控件,由 QScrollArea 类实现。它允许你将一个大的 QWidget 放入其中,并在内容超出时自动显示滚动条。

2.1 QScrollArea 简介

QScrollArea 是一个滚动容器,通常用于嵌套显示:

  • 大量控件(如表单、设置项);
  • 尺寸较大的图像、图形界面等;
  • 动态生成的控件列表等。

它只支持一个子 widget,但该 widget 可以是带布局的容器。

2.2 基本使用方式

QScrollArea *scrollArea = new QScrollArea(this);QWidget *container = new QWidget;
QVBoxLayout *layout = new QVBoxLayout(container);for (int i = 0; i < 20; ++i) {layout->addWidget(new QLabel(QString("Label %1").arg(i + 1)));
}scrollArea->setWidget(container);
scrollArea->setWidgetResizable(true);  // 自动适应窗口大小

2.3 常用设置

在这里插入图片描述
例如:

scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);

2.4 实际场景示例:图片查看器

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QWidget>
#include <QScrollArea>
#include <QVBoxLayout>
#include <QLabel>
#include <QPixmap>class MainWindow : public QWidget
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr) : QWidget(parent) {this->resize(400, 300);this->setWindowTitle("图片滚动浏览示例");// 创建滚动区域QScrollArea *scrollArea = new QScrollArea(this);scrollArea->setFixedSize(400, 300);//scrollArea->setAlignment(Qt::AlignCenter); // 居中显示scrollArea->setWidgetResizable(true);// 创建内容容器QWidget *container = new QWidget;QVBoxLayout *layout = new QVBoxLayout(container);// 加载图像(演示用,多次重复加载同一张)QPixmap pixmap("./MultiTexture/BrushStroke_Coloured_Variant_C.png");  // 替换为你自己的图片路径if (!pixmap.isNull()) {for (int i = 0; i < 10; ++i) {QLabel *imgLabel = new QLabel;imgLabel->setPixmap(pixmap.scaled(300, 200, Qt::KeepAspectRatio, Qt::SmoothTransformation));layout->addWidget(imgLabel);}} else {QLabel *err = new QLabel("图片加载失败!");layout->addWidget(err);}scrollArea->setWidget(container);}~MainWindow() {}
};
#endif // MAINWINDOW_H

输出结果:
请添加图片描述

2.5 九宫格图片布局的版本(即横向+纵向滚动)

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QWidget>
#include <QScrollArea>
#include <QVBoxLayout>
#include <QLabel>
#include <QPixmap>class MainWindow : public QWidget
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr) : QWidget(parent) {this->resize(600, 400);this->setWindowTitle("九宫格图片浏览");QScrollArea *scrollArea = new QScrollArea(this);scrollArea->setFixedSize(600, 400);//scrollArea->setWidgetResizable(true);// 创建容器和网格布局QWidget *container = new QWidget(this);QGridLayout *grid = new QGridLayout(container);//grid->setSpacing(10);QPixmap pixmap("./MultiTexture/BrushStroke_Coloured_Variant_C.png"); // 替换为实际图片路径int cols = 5;int index = 0;if (!pixmap.isNull()) {for (int i = 0; i < 40; ++i) {  // 加载 40 张图QLabel *label = new QLabel;label->setPixmap(pixmap.scaled(150, 100, Qt::KeepAspectRatio, Qt::SmoothTransformation));label->setAlignment(Qt::AlignCenter);grid->addWidget(label, index / cols, index % cols);++index;}} else {QLabel *err = new QLabel("图片加载失败!");grid->addWidget(err, 0, 0);}scrollArea->setWidget(container);scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);}~MainWindow() {}
};
#endif // MAINWINDOW_H

输出结果:
请添加图片描述

三、Tab Widget(标签页控件)

  在 Qt 中,Tab Widget(标签页控件) 是一种常用的容器控件,可以将多个页面组织在同一个窗口内,以标签的形式切换,提供良好的模块化用户体验。对应的类为 QTabWidget。

3.1 QTabWidget 简介

  QTabWidget 提供一组可以切换的页面,每个页面都有一个对应的标签页(Tab)。常见于设置窗口、工具属性窗口、选项配置面板等。

3.2 常用函数

在这里插入图片描述

3.3 基本使用示例

QTabWidget *tabWidget = new QTabWidget(this);// 创建页面
QWidget *page1 = new QWidget;
QWidget *page2 = new QWidget;// 给页面添加布局和控件
page1->setLayout(new QVBoxLayout);
page1->layout()->addWidget(new QLabel("这是第一页"));page2->setLayout(new QVBoxLayout);
page2->layout()->addWidget(new QLabel("这是第二页"));// 添加页面到标签控件
tabWidget->addTab(page1, "第一页");
tabWidget->addTab(page2, "第二页");

3.4 切换响应(信号)

connect(tabWidget, &QTabWidget::currentChanged, this, [](int index){qDebug() << "当前切换到第" << index << "个标签页";
});

3.5 设置标签位置

tabWidget->setTabPosition(QTabWidget::North); // 默认
tabWidget->setTabPosition(QTabWidget::South); // 下方
tabWidget->setTabPosition(QTabWidget::West);  // 左侧
tabWidget->setTabPosition(QTabWidget::East);  // 右侧

3.6 QTabWidget 创建一个包含多个标签页

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QWidget>
#include <QTabWidget>
#include <QVBoxLayout>
#include <QFormLayout>
#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QCheckBox>
#include <QTextEdit>
#include <QPushButton>class MainWindow : public QWidget
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr) : QWidget(parent) {this->resize(400, 250);this->setWindowTitle("系统设置");QTabWidget *tabWidget = new QTabWidget(this);tabWidget->setFixedSize(400, 250);// 通用设置页QWidget *generalPage = new QWidget;QFormLayout *generalLayout = new QFormLayout(generalPage);generalLayout->addRow("用户名:", new QLineEdit);generalLayout->addRow("语言:", new QComboBox);generalLayout->addRow("自动启动:", new QCheckBox);// 网络设置页QWidget *networkPage = new QWidget;QFormLayout *networkLayout = new QFormLayout(networkPage);networkLayout->addRow("IP地址:", new QLineEdit("192.168.1.1"));networkLayout->addRow("端口:", new QLineEdit("8080"));networkLayout->addRow("启用代理:", new QCheckBox);// 关于页QWidget *aboutPage = new QWidget;QVBoxLayout *aboutLayout = new QVBoxLayout(aboutPage);QLabel *aboutText = new QLabel("智能安检系统 v1.0\n© 2025 安检科技有限公司");aboutText->setAlignment(Qt::AlignCenter);aboutLayout->addWidget(aboutText);// 添加页面到TabWidgettabWidget->addTab(generalPage, "通用设置");tabWidget->addTab(networkPage, "网络设置");tabWidget->addTab(aboutPage, "关于");}~MainWindow() {}
};
#endif // MAINWINDOW_H

输出结果:
请添加图片描述

四、Frame (框架)

  在 Qt 中,QFrame 是一个非常基础而灵活的控件,常用于作为视觉上的边框、分隔线或容器,能够帮助美化 UI 和组织布局。

4.1 QFrame 简介

  • QFrame 是 QWidget 的子类;
  • 可显示边框、分割线或用作面板容器;
  • 可以设置线条样式(凹陷、凸起、平面等);
  • 常用于 UI 界面分组、视觉分隔。

4.2 常用设置项说明

在这里插入图片描述
常用的 QFrame::Shape 值:
在这里插入图片描述
常用的 QFrame::Shadow 值:
在这里插入图片描述

4.3 基本用法示例

QFrame *frame = new QFrame(this);
frame->setFrameShape(QFrame::Box);             // 边框形状
frame->setFrameShadow(QFrame::Raised);         // 阴影样式
frame->setLineWidth(2);                        // 边框宽度
frame->setFixedSize(200, 100);                 // 尺寸

4.4 分隔线示例(水平/垂直线)

QFrame *line = new QFrame(this);
line->setFrameShape(QFrame::HLine);
line->setFrameShadow(QFrame::Sunken);
line->setLineWidth(1);

4.5 作为容器嵌套其他控件

QFrame *groupFrame = new QFrame(this);
groupFrame->setFrameShape(QFrame::Box);
groupFrame->setLayout(new QVBoxLayout);
groupFrame->layout()->addWidget(new QLabel("内容"));

4.6 使用 QFrame 创建一个典型的三分区主窗口布局

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QWidget>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QFrame>
#include <QLabel>class MainWindow : public QWidget
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr) : QWidget(parent) {this->resize(800, 500);this->setWindowTitle("QFrame 三分区布局示例");QHBoxLayout *mainLayout = new QHBoxLayout(this);mainLayout->setSpacing(10);mainLayout->setContentsMargins(10, 10, 10, 10);// 左侧导航区QFrame *leftFrame = new QFrame(this);leftFrame->setFrameShape(QFrame::StyledPanel);leftFrame->setFixedWidth(150);QVBoxLayout *leftLayout = new QVBoxLayout(leftFrame);leftLayout->addWidget(new QLabel("导航1"));leftLayout->addWidget(new QLabel("导航2"));leftLayout->addStretch();// 中间主内容区QFrame *centerFrame = new QFrame(this);centerFrame->setFrameShape(QFrame::StyledPanel);QVBoxLayout *centerLayout = new QVBoxLayout(centerFrame);centerLayout->addWidget(new QLabel("这里是主内容区"));centerLayout->addStretch();// 右侧辅助区QFrame *rightFrame = new QFrame(this);rightFrame->setFrameShape(QFrame::StyledPanel);rightFrame->setFixedWidth(200);QVBoxLayout *rightLayout = new QVBoxLayout(rightFrame);rightLayout->addWidget(new QLabel("辅助信息"));rightLayout->addStretch();// 添加到主布局mainLayout->addWidget(leftFrame);mainLayout->addWidget(centerFrame, 1);  // 主区弹性拉伸mainLayout->addWidget(rightFrame);}~MainWindow() {}
};
#endif // MAINWINDOW_H

在这里插入图片描述

五、ToolBox(工具箱)

  在 Qt 中,QToolBox 是一个用于折叠式分组显示内容的容器控件,它的外观类似于“抽屉式”控件,非常适合用于显示工具栏、设置分组、帮助信息等场景。

5.1 QToolBox 简介

  • QToolBox 是一个容器控件,可以容纳多个“页面”;
  • 每一页都有一个标签(标题),用户可以点击切换展开;
  • 同一时间只能展开一个页面,其它页面会自动折叠;
  • 类似于 Qt Designer 左侧的属性分类区域,或 IDE 的工具抽屉。

5.2 常用方法

在这里插入图片描述

5.3 基本用法示例

QToolBox *toolBox = new QToolBox(this);// 第一个页面
QWidget *page1 = new QWidget;
QVBoxLayout *layout1 = new QVBoxLayout(page1);
layout1->addWidget(new QLabel("工具1"));
layout1->addWidget(new QPushButton("按钮A"));// 第二个页面
QWidget *page2 = new QWidget;
QVBoxLayout *layout2 = new QVBoxLayout(page2);
layout2->addWidget(new QLabel("设置项1"));
layout2->addWidget(new QCheckBox("启用功能"));// 添加到工具箱
toolBox->addItem(page1, "工具集");
toolBox->addItem(page2, "设置面板");

5.4 信号槽

// 当当前展开页改变时触发
connect(toolBox, &QToolBox::currentChanged, [](int index){qDebug() << "切换到第" << index << "页";
});

5.5 完整窗口应用 QToolBox

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QWidget>
#include <QToolBox>
#include <QVBoxLayout>
#include <QLabel>
#include <QPushButton>
#include <QCheckBox>class MainWindow : public QWidget
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr) : QWidget(parent) {this->resize(300, 250);this->setWindowTitle("QToolBox 示例");QToolBox *toolBox = new QToolBox(this);toolBox->setFixedSize(300, 250);// 页面1QWidget *page1 = new QWidget(this);QVBoxLayout *l1 = new QVBoxLayout(page1);l1->addWidget(new QPushButton("工具按钮1"));l1->addWidget(new QPushButton("工具按钮2"));// 页面2QWidget *page2 = new QWidget(this);QVBoxLayout *l2 = new QVBoxLayout(page2);l2->addWidget(new QCheckBox("启用功能A"));l2->addWidget(new QCheckBox("启用功能B"));toolBox->addItem(page1, "工具集");toolBox->addItem(page2, "功能设置");}~MainWindow() {}
};
#endif // MAINWINDOW_H

输出结果:
请添加图片描述

相关文章:

Qt开发:容器组控件的介绍和使用

文章目录 一、Group Box&#xff08;分组框&#xff09;1.1 QGroupBox 简介1.2 基本用法1.3 设置为可勾选&#xff08;可启用/禁用子控件&#xff09;1.4 信号与槽连接&#xff08;监控勾选状态&#xff09;1.5 布局示例&#xff08;完整&#xff09; 二、Scroll Area&#xff…...

JS逆向入门案例1——集思录登录

JS逆向入门案例1——集思录登录 前言声明网站流程分析总结 前言 由于这段时间本职工作比较繁忙&#xff0c;没有很多空余的时间去研究各大厂的加密风控了&#xff0c;想起来自己刚接触js逆向走过坎坷&#xff0c;所以决定出一期js入门案例分析&#xff0c;为刚接触js逆向的小伙…...

ARM子程序和栈

微处理器中的栈由栈指针指向存储器中的栈顶来实现&#xff0c;当数据项入栈时&#xff0c;栈 指针向上移动&#xff0c;当数据项出栈时&#xff0c;栈指针向下移动。 实现栈时需要做出两个决定&#xff1a;一是当数据项进栈时是向低位地址方向向上生 长&#xff08;图a和图b&a…...

笔试专题(十五)

文章目录 排序子序列题解代码 消减整数题解代码 最长公共子序列(二)题解代码 排序子序列 题目链接 题解 1. 贪心 模拟 2. 1 2 3 2 2 应该是有两个排列子序列的&#xff0c;所以i n-1时ret 3. 把水平的位置和上升部分&#xff0c;水平位置和下降部分分为一个排列子序列 代…...

使用OpenCV 和 Dlib 进行卷积神经网络人脸检测

文章目录 引言1.准备工作2.代码解析2.1 导入必要的库2.2 加载CNN人脸检测模型2.3 加载并预处理图像2.4 进行人脸检测2.5 绘制检测结果2.6 显示结果 3.完整代码4.性能考虑5.总结 引言 人脸检测是计算机视觉中最基础也最重要的任务之一。今天我将分享如何使用dlib库中的CNN人脸检…...

某信服EDR3.5.30.ISO安装测试(一)

一、前言 1.某信服EDR3.5.30 以下简称“EDR3.5”&#xff0c;即统一端点安全管理系统aES(终端检测响应EDR)&#xff0c; 官网最新版&#xff1a;aES6.0.1R2&#xff0c;可下载的最低版本&#xff1a;EDR3.7.11R3&#xff0c; 下载地址&#xff1a;统一端点安全管理系统aES-…...

Dify 快速构建和部署基于LLM的应用程序

本文先对Dify做一个初步的认识&#xff0c;然后以一个实际的简单金融问答案例&#xff0c;配置chatflow 工作流。 一、Dify简介 如果你是第一次接触Dify&#xff0c;可以先创建一个简单的聊天助手&#xff0c;初步感觉一下&#xff0c;Dify在构建聊天问答类应用的过程。 比如…...

精益数据分析(40/126):移动应用商业模式的关键指标与盈利策略

精益数据分析&#xff08;40/126&#xff09;&#xff1a;移动应用商业模式的关键指标与盈利策略 在创业和数据分析的探索之路上&#xff0c;我们持续挖掘不同商业模式的内在规律&#xff0c;以寻求更好的发展机遇。今天&#xff0c;我们依旧秉持共同进步的理念&#xff0c;深…...

JavaScript 实现输入框的撤销功能

在 Web 开发中&#xff0c;为输入框添加撤销功能可以极大地提升用户体验&#xff0c;方便用户快速回滚到之前的输入状态。本文将通过一段简单的 HTML、CSS 和 JavaScript 代码&#xff0c;详细介绍如何实现输入框的撤销功能。 整体实现思路 利用 JavaScript 监听输入框的inpu…...

【C++】类和对象(一)

前言 类和对象第一部分知识包括定义访问限定符类域实例化this指针 本人其他文章&#xff1a;恋风诗 文章中的源码[gitte]&#xff1a;mozhengy 类和对象&#xff08;一&#xff09; 前言1. 类的定义引例1.1 类定义格式1.2 类的访问限定符1.3 类域 2. 实例化2.1 实例化概念2.2 …...

【Vue】Vue3源码解析与实现原理

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Vue 文章目录 1. Vue 3 架构概览1.1 模块化设计1.2 整体流程 2. 响应式系统2.1 响应式原理2.2 ref 和 reactive2.3 依赖收集与触发更新 3. 渲染系统3.1 虚拟DOM设计3.2 渲染管线3.3 Patch算法与Diff优化 4. 组件系统4.1 组件创建…...

黑马点评day02(缓存)

2、商户查询缓存 2.1 什么是缓存? 前言:什么是缓存? 就像自行车,越野车的避震器 举个例子:越野车,山地自行车,都拥有"避震器",防止车体加速后因惯性,在酷似"U"字母的地形上飞跃,硬着陆导致的损害,像个弹簧一样; 同样,实际开发中,系统也需要"避震…...

数据库MySQL学习——day9(聚合函数与分组数据)

文章目录 1. 聚合函数1.1 COUNT() 函数1.2 SUM() 函数1.3 AVG() 函数1.4 MIN() 函数1.5 MAX() 函数 2. GROUP BY 子句2.1 使用 GROUP BY 进行数据分组2.2 结合聚合函数 3. HAVING 子句3.1 使用 HAVING 过滤分组数据3.2 HAVING 和 WHERE 的区别 4. 实践任务4.1 创建一个销售表4.…...

为React组件库引入自动化测试:从零到完善的实践之路

为什么我们需要测试&#xff1f; 我们的ReactTypeScript业务组件库已经稳定运行了一段时间&#xff0c;主要承载各类UI展示组件&#xff0c;如卡片、通知等。项目初期&#xff0c;迫于紧张的开发周期&#xff0c;我们暂时搁置了自动化测试的引入。当时团队成员对组件逻辑了如指…...

数据结构——算法复杂度

一、数据结构定义 数据结构(Data Structure)是计算机存储、组织数据的⽅式&#xff0c;指相互之间存在⼀种或多种特定关系的数据元素的集合。没有⼀种单⼀的数据结构对所有⽤途都有⽤&#xff0c;所以我们要学各式各样的数据结构&#xff0c;如&#xff1a;线性表、树、图、哈希…...

Vue3响应式原理那些事

文章目录 1 响应式基础:Proxy 与 Reflect1.1 Proxy 代理拦截1.2 Reflect 确保 `this` 指向正确1.2.1 修正 `this` 指向问题1.2.2 统一的操作返回值1.3 与 Vue2 的对比2 依赖收集与触发机制2.1 全局依赖存储结构:WeakMap → Map → Set2.2 依赖收集触发时机2.3 依赖收集核心实…...

记9(Torch

目录 1、Troch 1、Troch 函数说明举例torch.tensor()torch.arange()创建张量创建一个标量&#xff1a;torch.tensor(42)创建一个一维张量&#xff1a;torch.tensor([1, 2, 3])创建一个二维张量&#xff1a;torch.tensor([[1, 2], [3, 4]])生成一维等差张量&#xff1a;语法&am…...

机器学习模型训练模块技术文档

一、模块结构概览 import numpy as np from sklearn.model_selection import cross_validate, learning_curve from sklearn.pipeline import make_pipeline from sklearn.svm import SVC from sklearn.neighbors import KNeighborsClassifier from sklearn.preprocessing imp…...

健康养生:从微小改变开始

养生不必大刀阔斧&#xff0c;几个微小改变&#xff0c;就能让健康慢慢扎根生活。晨起别急着洗漱&#xff0c;先花 5 分钟靠墙站立&#xff0c;拉伸脊柱、调整体态&#xff0c;唤醒身体。早餐把白米粥换成杂粮粥&#xff0c;搭配水煮蛋和一小碟凉拌黄瓜&#xff0c;营养更全面。…...

某信服EDR3.5.30.ISO安装测试(二)

一、物理机启动EDR 1、修复dracut 使用DiskGenius克隆虚拟磁盘到物理磁盘&#xff0c;将虚拟机移植到物理机&#xff0c;因为磁盘UUID变化等原因&#xff0c;首次默认启动失败&#xff0c;提示&#xff1a; Starting Dracut Emergency Shell... Warning:/dev/centos/root doe…...

Leetcode:回文链表

1、题目描述 给定一个链表的 头节点 head &#xff0c;请判断其是否为回文链表。 如果一个链表是回文&#xff0c;那么链表节点序列从前往后看和从后往前看是相同的。 示例 1&#xff1a; 输入: head [1,2,3,3,2,1] 输出: true 示例 2&#xff1a; 输入: head [1,2] 输出: …...

IL2CPP 技术深度解析

IL2CPP 是 Unity 开发的高性能脚本后端&#xff0c;它将 .NET 的中间语言 (IL) 转换为 C 代码&#xff0c;再编译为原生平台二进制文件。以下是 IL2CPP 的全面技术剖析。 一、架构设计原理 1. 整体编译流程 C# 源代码 → Roslyn 编译器 → IL (.NET DLL)→ IL2CPP 转换器 →…...

AI图片修复工具,一键操作,图片更清晰!

泛黄的老相册里藏着一座记忆博物馆&#xff0c;每张照片都是时光长河中的琥珀。祖父军装照上的折痕里藏着抗美援朝的故事&#xff0c;父母结婚照褪色的红唇映照着八十年代的风尚&#xff0c;童年抓拍照上模糊的身影正重演着我们成长的轨迹。这些承载着集体记忆的影像&#xff0…...

国内短剧 vs. 海外短剧系统:如何选择?2025年深度对比与SEO优化指南

在短剧市场爆发式增长的背景下&#xff0c;国内与海外短剧系统成为创业者与企业的热门选择。本文将从市场潜力、开发成本、内容创作、盈利模式及风险五大维度&#xff0c;结合最新行业数据与案例&#xff0c;深度解析两者的优劣势&#xff0c;助您做出最优决策。 一、市场前…...

linux crash工具详解

crash 是 Linux 系统中用于分析内核转储文件&#xff08;如 vmcore 或 kdump 生成的 dump 文件&#xff09;的核心工具。它结合了调试符号和内核数据结构&#xff0c;能够直观地查看崩溃时的系统状态。以下是其详细使用方法及核心功能解析&#xff1a; 一、安装与准备 1. 安装…...

Scala day6(Class,field,Single Object)

Foreword【こんにちは】 Today, we continue to learn Scala Language, though the Scala isn’t easy for Begainner, Big Data Technology need Scala Language, Spark【Distributed Calculation FrameWork】is based on Scala Language designed. I know the learning road…...

不小心把当前的环境变量路径覆盖掉怎么办

起因 配置环境变量&#xff08;~/.bashrc&#xff09;的时候没加:$PATH&#xff0c;导致 source ~/.bashrc之后只剩下刚刚配置的环境变量了。连vim都打不开 解决 添加临时环境变量export PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH再重新修改…...

unity TMP字体使用出现乱码方框

参考文章&#xff1a; Unity 设置默认字体&#xff08;支持老版及新版TMP&#xff09;_unity tmp字体-CSDN博客 原因是导入的项目package包没有连着tmp一起&#xff0c;这样在新工程中导入的tmp字体默认的是tmp自己的&#xff0c;解决方案就是替换成自己需要的tmp字体就行 替换…...

14.网络钓鱼实战

网络钓鱼实战 第一部分&#xff1a;网络钓鱼攻击详解第二部分&#xff1a;设计与分析钓鱼攻击第三部分&#xff1a;钓鱼攻击防范实践总结 目标: • 深入理解网络钓鱼攻击的实施过程 • 掌握设计和识别钓鱼攻击的技巧 • 通过模拟实践提升防范钓鱼攻击的能力 第一部分&#xf…...

pyqt写一个单片机配置界面

已经实现以下功能 1.可以选择单片机架构 2.选择完单片机架构后第二个框可以选择常见单片机型号 3.选择完常见单片机型号后第三个框可以选择内部资源如adc等&#xff08;可以选择多个内部资源&#xff09;4.选择完内部资源如adc等&#xff08;可以选择多个内部资源&#xff09;后…...

「Mac畅玩AIGC与多模态20」开发篇16 - 使用结构化输出字段控制后续流程示例

一、概述 本篇介绍如何在工作流中使用结构化输出字段作为判断依据&#xff0c;实现前后节点联动控制。通过执行 LLM 节点输出结构化 JSON&#xff0c;并使用其中的字段驱动后续判断节点执行不同路径&#xff0c;开发人员将掌握结构化字段在工作流中的引用方式与分支控制技巧。…...

Unity-Shader详解-其四

今天我们来聊Unity特有的表面着色器以及很少提到的几何着色器。 表面着色器 在前文关于光照的计算中&#xff0c;我们学会了很多&#xff1a;我们学习了一系列光照模型&#xff0c;比如专门针对漫反射的兰伯特模型和改进的半兰伯特模型&#xff0c;又比如由高光、漫反射和环境…...

Lua 元表和元方法

元表(Metatable)和元方法(Metamethod)是Lua中实现面向对象编程、操作符重载和自定义行为的重要机制。 元表 元表是一个普通的Lua表&#xff0c;可以附加到另一个表上&#xff0c;用于定义或修改该表的行为。每个表都可以有自己的元表。 setmetatable(tab,metatab) 将metatab设…...

GESP2024年3月认证C++八级( 第二部分判断题(6-10))

海伦公式参考程序&#xff1a; #include <iostream> #include <cmath> // 引入cmath库以使用sqrt函数using namespace std;double calculateTriangleArea(int a, int b, int c) {// 使用海伦公式double s (a b c) / 2.0; // 半周长return sqrt(s * (s - a) *…...

Nacos源码—3.Nacos集群高可用分析一

大纲 1.Nacos集群的几个问题 2.单节点对服务进行心跳健康检查和同步检查结果 3.集群新增服务实例时如何同步给其他节点 4.集群节点的健康状态变动时的数据同步 5.集群新增节点时如何同步已有服务实例数据 1.Nacos集群的几个问题 问题一&#xff1a;在单机模式下&#xff…...

信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(九)

个人笔记整理---仅供参考 第九章项目范围管理 9.1管理基础 9.2项目范围管理过程 9.3规划范围管理 9.4收集需求 9.5定义范围 9.6创建WBS 9.7确认范围 9.8控制范围...

DeepSeek学术论文写作全流程指令

一、选题与领域界定 研究热点捕捉 指令: “在[研究领域]中,现有文献对[具体问题]的[哪方面]研究不足?基于近5年文献归纳3个待突破方向,需结合高频关键词和交叉学科维度。” 示例: “在深度学习医疗影像分析中,现有文献对小样本训练的泛化性研究不足?基于2019-2023年顶会…...

【ArUco boards】标定板检测

之前定位用的Charuco标定板做的&#xff08;https://blog.csdn.net/qq_45445740/article/details/143897238&#xff09;&#xff0c;因为实际工况中对标定板的尺寸有要求&#xff0c;大概是3cm*2cm这个尺寸&#xff0c;加上选用的是ChAruco标定板&#xff0c;导致每一个aruco码…...

2025 年 408 真题及答案

2025 年 408 真题 历年408真题及答案下载直通车 1、以下 C 代码的时间复杂度是多少&#xff1f;&#xff08;&#xff09; int count 0; for (int i0; i*i<n; i)for (int j0; j<i; j)count;A O(log2n)B O(n)C O(nlogn)D O(n2) 2、对于括号匹配问题&#xff0c;符号栈…...

设计模式每日硬核训练 Day 18:备忘录模式(Memento Pattern)完整讲解与实战应用

&#x1f504; 回顾 Day 17&#xff1a;中介者模式小结 在 Day 17 中&#xff0c;我们学习了中介者模式&#xff08;Mediator Pattern&#xff09;&#xff1a; 用一个中介者集中管理对象之间的通信。降低对象之间的耦合&#xff0c;适用于聊天系统、GUI 控件联动、塔台调度等…...

ByteArrayOutputStream 类详解

ByteArrayOutputStream 类详解 ByteArrayOutputStream 是 Java 中用于在内存中动态写入字节数据的输出流(ByteArrayOutputStream和ByteArrayInputStream是节点流),位于 java.io 包。它不需要关联物理文件或网络连接,所有数据都存储在内存的字节数组中。 1. 核心特性 内存缓冲…...

Linux中web服务器的部署及优化

前言&#xff1a;Nginx 和 Apache HTTP Server 是两款非常流行的 Web 服务器。 Nginx 简介&#xff1a;Nginx 是一款轻量级的高性能 Web 服务器、反向代理服务器以及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。由俄罗斯人伊戈尔・赛索耶夫开发&#xff0c;其在处…...

使用Mathematica绘制Sierpinski地毯

在Mathematica中内置的绘制Sierpinski地毯的函数&#xff1a; SierpinskiCurve[n] gives the line segments representing the n-step Sierpiński curve. 注意&#xff0c;直接运行这个函数&#xff0c;返回的是Line对象&#xff0c;例如&#xff1a; 运行如下代码&#xf…...

Qt 信号槽机制底层原理学习

简介 Qt的信号和槽&#xff08;Signals and Slots&#xff09;是Qt开发团队创造的一种特殊回调机制&#xff0c;提供了非常简洁易用的事件触发-函数调用机制。 原理学习 虽然上层使用简单&#xff0c;但底层实现机制却复杂的不得了&#xff0c;这里简单的学习一下大概原理。…...

【Java学习笔记】包

包&#xff08;package&#xff09; 包的本质&#xff1a;实际上就是创建不同的文件夹或者目录来保存类文件 包的三大作用 区分相同名字的类 当类很多的时候可以更方便的管理类 控制访问范围 使用方法 关键字&#xff1a;import—>导入&#xff08;引入&#xff09; …...

进程的程序替换——exec系列函数的使用

目录 前言 一、替换函数 二、程序替换的本质 一些细节&#xff1a; 三、程序替换与环境变量间的关系 1.介绍其他参数的意义并总结 2.自定义环境变量 1&#xff09;通过execcle传参全局环境变量 2&#xff09;通过execcle传参自定义环境变量 3&#xff09;将自定义环境变量通过p…...

【论文阅读】DETR+Deformable DETR

可变形注意力是目前transformer结构中经常使用的一种注意力机制&#xff0c;最近补了一下这类注意力的论文&#xff0c;提出可变形注意力的论文叫Deformable DETR&#xff0c;是在DETR的基础上进行的改进&#xff0c;所以顺带着把原本的DETR也看了一下。 一、DETR DETR本身是…...

ArchLinux卡死在GRUB命令行模式修复

ArchLinux卡死在GRUB命令行模式修复 文章目录 ArchLinux卡死在GRUB命令行模式修复前言一、 系统配置1.系统配置2.磁盘分区信息 二、重建GRUB引导1.插入带ArchLinux ISO的U盘&#xff0c;BIOS选择U盘启动并进入ArchLinux安装界面。2.挂载btrfs根目录分区3.挂载/boot分区4.进入ch…...

Docker 容器 - Dockerfile

Docker 容器 - Dockerfile 一、Dockerfile 基本结构二、Dockerfile 指令详解2.1 FROM2.2 MAINTAINER2.3 COPY2.4 ADD2.5 WORKDIR2.6 VOLUME2.7 EXPOSE2.8 ENV2.9 RUN2.10 CMD2.11 ENTRYPOINT 三、Dockerfile 创建镜像与模板3.1 Dockerfile 镜像3.2 镜像管理3.3 Dockerfile 模板…...

C++ 中二级指针的正确释放方法

C 中二级指针的正确释放 一、什么是二级指针&#xff1f; 简单说&#xff0c;二级指针就是指向指针的指针。 即&#xff1a; int** p;它可以指向一个 int*&#xff0c;而 int* 又指向一个 int 类型的变量。 常见应用场景 动态二维数组&#xff08;例如 int** matrix&#x…...