QT常见Layout布局器使用

news2024/11/15 7:11:57

布局简介

为什么要布局?通过布局拖动不影响鼠标拖动窗口的效果等优点.QT设计器布局比较固定,不方便后期修改和维护;在Qt里面布局分为四个大类 :

盒子布局QBoxLayout

网格布局QGridLayout

表单布局:QFormLayout

抽屉布局:QStackedLayout

分页显示:QTabWidget

分割器:Splitter

设置布局的基本步骤:

 (1)创建控件
 (2)创建布局管理类
 (3)将控件添加到布局管理类中
 (4)设置布局管理类为此时的窗口布局

QBoxLayout

一般使用它的两个子类QHBoxLayout 和 QVBoxLayout 负责水平和垂直布局

QVBoxLayout 基本使用

mainwindow.cpp(后面例程都在mainwindow.cpp演示):

#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include<QTextCodec>
#define chineseToQString(pChineseText)  QTextCodec::codecForName("GB2312")->toUnicode(pChineseText)

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setWindowTitle(chineseToQString("垂直布局"));
    QWidget* w=new QWidget;
    setCentralWidget(w);

    QVBoxLayout* vlayout=new QVBoxLayout;
    QPushButton* b1=new QPushButton("b1");
    QPushButton* b2=new QPushButton("b2");
    QPushButton* b3=new QPushButton("b3");

    vlayout->addWidget(b1);
    vlayout->addWidget(b2);
    vlayout->addWidget(b3);

    centralWidget()->setLayout(vlayout);
    this->resize(200, 160);
}
MainWindow::~MainWindow()
{

}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
};

#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

QHBoxLayout基本使用

#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include<QTextCodec>
#define chineseToQString(pChineseText)  QTextCodec::codecForName("GB2312")->toUnicode(pChineseText)

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setWindowTitle(chineseToQString("水平布局"));
    QWidget* w=new QWidget;
    setCentralWidget(w);

    QHBoxLayout* hlayout=new QHBoxLayout;
    QPushButton* b1=new QPushButton("b1");
    QPushButton* b2=new QPushButton("b2");
    QPushButton* b3=new QPushButton("b3");

    hlayout->addWidget(b1);
    hlayout->addWidget(b2);
    hlayout->addWidget(b3);

    centralWidget()->setLayout(hlayout);
    this->resize(100, 60);
}

 QHBoxLayout和QVBoxLayout综合使用

可以结合QGroupBox容器进行布局

#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGroupBox>
#include <QRadioButton>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setWindowTitle("垂直布局");
    QWidget* w=new QWidget;
    setCentralWidget(w);

    QVBoxLayout* container=new QVBoxLayout;

    QGroupBox *hobby_box = new QGroupBox("爱好");
    QVBoxLayout* v_layout=new QVBoxLayout;
    QRadioButton* btn1 = new QRadioButton("抽烟");
    QRadioButton* btn2 = new QRadioButton("喝酒");
    QRadioButton* btn3 = new QRadioButton("玩乐");
    v_layout->addWidget(btn1);
    v_layout->addWidget(btn2);
    v_layout->addWidget(btn3);
    hobby_box->setLayout(v_layout);

    QGroupBox* gender_box = new QGroupBox("性别");
    QHBoxLayout* h_layout = new QHBoxLayout();
    QRadioButton* btn4 =  new QRadioButton("男");
    QRadioButton* btn5 = new QRadioButton("女");
    h_layout->addWidget(btn4);
    h_layout->addWidget(btn5);
    gender_box->setLayout(h_layout);

    container->addWidget(hobby_box);
    container->addWidget(gender_box);

    centralWidget()->setLayout(container);
    this->resize(300, 300);
}

 

垂直和水平布局技巧 

可以根据需要灵活控制布局:

  • addStretch:添加拉伸条
  • setContentsMargins:设置边距
  • setStretchFactor:设置拉伸因子
  • setSpacing:设置每个控件之间距离
  • itemAt:获取布局内的控件元素

QGridLayout

QGridLayout基本使用

网格布局,有的人称之为九宫格布局;示例如下:

#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGroupBox>
#include <QRadioButton>
#include <QStringList>
#include <QLineEdit>
#include <QGridLayout>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setWindowTitle("网格布局");
    QWidget* w=new QWidget;
    setCentralWidget(w);

    QVBoxLayout* container=new QVBoxLayout;

    QPushButton* m_buttons[20];
    const char* btnText[20] =
    {
        "7", "8", "9", "+", "(",
        "4", "5", "6", "-", ")",
        "1", "2", "3", "*", "<-",
        "0", ".", "=", "/", "C"
    };

    QLineEdit* edit = new QLineEdit();
    edit->setPlaceholderText("请输入内容");

    QGridLayout* grid = new QGridLayout();

    int line_number = 0;
    int col_number = 0;
    for(line_number = 0;line_number < 4;line_number++){
         // 此时line_number是第几行
        for(col_number = 0;col_number < 5;col_number++){
            // 此时col_number是第几列
            m_buttons[line_number*5 + col_number] = new QPushButton();
            m_buttons[line_number*5 + col_number]->setText(btnText[line_number*5 + col_number]);
            grid->addWidget(m_buttons[line_number*5 + col_number], line_number, col_number);
        }
    }
    container->addWidget(edit);
    container->addLayout(grid);

    centralWidget()->setLayout(container);
    this->resize(300, 300);
}

网格布局技巧

QFormLayout

QFormLayout基本使用

表单布局,一般适用于提交数据form表单。比如: 登录,注册类似的场景

#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGroupBox>
#include <QRadioButton>
#include <QStringList>
#include <QLineEdit>
#include <QGridLayout>
#include <QFormLayout>
#include<QTextCodec>
#define chineseToQString(pChineseText)  QTextCodec::codecForName("GB2312")->toUnicode(pChineseText)

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setWindowTitle(chineseToQString("表单布局"));
    QWidget* w=new QWidget;
    setCentralWidget(w);

    QVBoxLayout* container=new QVBoxLayout;
    QFormLayout* form_layout = new QFormLayout();

    QLineEdit* edit1 = new QLineEdit();
    edit1->setPlaceholderText(chineseToQString("请输入账号"));
    form_layout->addRow(chineseToQString("账号:"), edit1);
    QLineEdit* edit2 = new QLineEdit();
    edit2->setPlaceholderText(chineseToQString("请输入密码"));
    form_layout->addRow((chineseToQString("密码:")), edit2);
 
    QPushButton* login_btn = new QPushButton(chineseToQString("登录"));
    login_btn->setFixedSize(100, 30);

    container->addLayout(form_layout);
    container->addWidget(login_btn,1,Qt::AlignRight);
    centralWidget()->setLayout(container);
    this->setFixedSize(300, 150);
}

表单布局技巧

QStackedLayout

QStackedLayout基本使用

抽屉式布局,或叫堆叠布局,提供了多页面切换的布局,一次只能看到一个界面。

#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGroupBox>
#include <QRadioButton>
#include <QStringList>
#include <QLineEdit>
#include <QGridLayout>
#include <QFormLayout>
#include <QTextCodec>
#include <QListWidget>
#include <QLabel>
#include <QStackedLayout>
#define chineseToQString(pChineseText)  QTextCodec::codecForName("GB2312")->toUnicode(pChineseText)

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setWindowTitle(chineseToQString("抽屉/堆叠布局"));
    QWidget* w=new QWidget;
    setCentralWidget(w);

    QListWidget *listWidget = new QListWidget(); //创建一个列表
    listWidget->setMinimumWidth(150);
    listWidget->setFont(QFont("宋体",14));
    listWidget->addItem("QPushButton");
    listWidget->addItem("QLabel");
    listWidget->addItem("QLineEdit");

    //新建 3 个窗口,分别放置文本框、按钮和单行输入框
    QWidget *widget1 = new QWidget;
    widget1->setMinimumSize(400,400);
    QVBoxLayout* widget1Layout = new QVBoxLayout;
    QVBoxLayout* widget2Layout = new QVBoxLayout;
    QVBoxLayout* widget3Layout = new QVBoxLayout;

    QPushButton *but1 = new QPushButton(chineseToQString("这是一个按钮1"));
    QPushButton *but2 = new QPushButton(chineseToQString("这是一个按钮2"));
    widget1Layout->addWidget(but1);
    widget1Layout->addWidget(but2);
    widget1->setLayout(widget1Layout);

    QWidget *widget2 = new QWidget;
    widget2->setMinimumSize(400,400);
    QLabel *lab1 = new QLabel(chineseToQString("这是一个文本框1"));
    QLabel *lab2 = new QLabel(chineseToQString("这是一个文本框2"));
    widget2Layout->addWidget(lab1);
    widget2Layout->addWidget(lab2);
    widget2->setLayout(widget2Layout);

    QWidget *widget3 = new QWidget;
    widget3->setMinimumSize(400,400);
    QLineEdit* edit1 = new QLineEdit(chineseToQString("这是一个单行输入框1"));
    QLineEdit* edit2 = new QLineEdit(chineseToQString("这是一个单行输入框2"));
    widget3Layout->addWidget(edit1);
    widget3Layout->addWidget(edit2);
    widget3->setLayout(widget3Layout);

    //创建一个分组布局,将 3 个窗口添加到分组控件中
    QStackedLayout *stackedLayout = new QStackedLayout;
    stackedLayout->addWidget(widget1);
    stackedLayout->addWidget(widget2);
    stackedLayout->addWidget(widget3);

    QPushButton* changeBtn = new QPushButton(chineseToQString("点击切换界面"));

    QVBoxLayout* vLayout = new QVBoxLayout;
    QHBoxLayout* container=new QHBoxLayout;
    vLayout->addWidget(listWidget);
    vLayout->addWidget(changeBtn);
    container->addLayout(vLayout,1);
    container->addLayout(stackedLayout,4);
    centralWidget()->setLayout(container);

    //连接信号和槽,实现当点击列表中的某一项,切换分组布局管理器显示的控件
    QObject::connect(listWidget,&QListWidget::currentRowChanged,stackedLayout,&QStackedLayout::setCurrentIndex);
    connect(changeBtn,&QPushButton::clicked,this,[=](){//也可以通过点击按钮循环切换
        int nextPage = (stackedLayout->currentIndex() + 1) % stackedLayout->count();
        stackedLayout->setCurrentIndex(nextPage);
    });
    this->setMinimumSize(600, 400);
}

抽屉布局技巧

QTabWidget

提供了便捷的分页显示功能,类似于编辑器中打开不同文件

#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGroupBox>
#include <QRadioButton>
#include <QStringList>
#include <QLineEdit>
#include <QGridLayout>
#include <QFormLayout>
#include <QTextCodec>
#include <QListWidget>
#include <QLabel>
#include <QStackedLayout>
#include <QTextEdit>

#define chineseToQString(pChineseText)  QTextCodec::codecForName("GB2312")->toUnicode(pChineseText)

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setWindowTitle(chineseToQString("QTabWidget"));
    QWidget* w=new QWidget;
    setCentralWidget(w);

    QTextEdit* text1 = new QTextEdit(this);
    QTextEdit* text2 = new QTextEdit(this);
    QTextEdit* text3 = new QTextEdit(this);
    text1->setStyleSheet("background-color: red");
    text2->setStyleSheet("background-color: blue");
    text3->setStyleSheet("background-color: green");

    QTabWidget* tWidget = new QTabWidget(this);
    tWidget->addTab(text1,"test1.txt");
    tWidget->addTab(text2,"test2.txt");
    tWidget->addTab(text3,"test3.txt");

    tWidget->setTabsClosable(true); //设置可以关闭
    connect(tWidget,&QTabWidget::tabCloseRequested,this,[=](int index){
        tWidget->removeTab(index);//点击关闭后关闭此Tab
    });

    QHBoxLayout* container=new QHBoxLayout;
    container->addWidget(tWidget);
    centralWidget()->setLayout(container);

    this->setMinimumSize(600, 400);
}

 Splitter分割器

splitter允许用户通过拖动子部件之间的边界来控制它们的大小。任何数量的小部件都可以由单个拆分器控制。QSplitter的典型用法是创建几个小部件并使用 insertWidget()或addWidget()添加它们

#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGroupBox>
#include <QRadioButton>
#include <QStringList>
#include <QLineEdit>
#include <QGridLayout>
#include <QFormLayout>
#include <QTextCodec>
#include <QListWidget>
#include <QLabel>
#include <QStackedLayout>
#include <QTextEdit>
#include <QSplitter>

#define chineseToQString(pChineseText)  QTextCodec::codecForName("GB2312")->toUnicode(pChineseText)

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setWindowTitle(chineseToQString("QSplitter"));
    QWidget* w=new QWidget;
    setCentralWidget(w);

    auto text1 = new QTextEdit(this);
    auto text2 = new QTextEdit(this);

    QSplitter* splitter = new QSplitter(this);
    splitter->addWidget(text1);
    splitter->addWidget(text2);
    splitter->setOpaqueResize(true);//设置为预览模式:false

    QVBoxLayout* container=new QVBoxLayout;
    container->addWidget(splitter);
    centralWidget()->setLayout(container);

    this->setMinimumSize(600, 400);
}

 鼠标放在中间的间隔上我们便可以左右拖动他们的距离

  Splitter分割器技巧

使用QSplitter实现分割窗口功能,整个对话框由四个窗口组成,各个窗口之间的大小可以任意拖拽来改变。
#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGroupBox>
#include <QRadioButton>
#include <QStringList>
#include <QLineEdit>
#include <QGridLayout>
#include <QFormLayout>
#include <QTextCodec>
#include <QListWidget>
#include <QLabel>
#include <QStackedLayout>
#include <QTextEdit>
#include <QSplitter>

#define chineseToQString(pChineseText)  QTextCodec::codecForName("GB2312")->toUnicode(pChineseText)

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setWindowTitle(chineseToQString("分割窗口"));
    QWidget* w=new QWidget;
    setCentralWidget(w);

    QSplitter *splitterMain = new QSplitter(Qt::Horizontal, 0); //新建主分割窗口,水平分割

    QTextEdit *textLeft = new QTextEdit(chineseToQString("左部件"));
    textLeft->setAlignment(Qt::AlignCenter);//设置TextEdit对象中文本的对齐方式

    QSplitter *splitterRight = new QSplitter(Qt::Vertical);   //右分割窗口,并以主分割窗口作为父窗口
    splitterRight->setOpaqueResize(false);//若为true,则实时更新;否则在拖拽时显示一条虚线。

    QTextEdit *textUp = new QTextEdit(chineseToQString("上部件"));
    textUp->setAlignment(Qt::AlignCenter);

    QTextEdit *textMiddle = new QTextEdit(chineseToQString("中间部件"));
    textMiddle->setAlignment(Qt::AlignCenter);

    QTextEdit *textBottom = new QTextEdit(chineseToQString("底部部件"));
    textBottom->setAlignment(Qt::AlignCenter);

    splitterRight->addWidget(textUp);
    splitterRight->addWidget(textMiddle);
    splitterRight->addWidget(textBottom);

    textLeft->setParent(splitterMain);//左分割插入主分割窗口。
    splitterRight->setParent(splitterMain);//右边分割插入主分割窗口。
    splitterMain->setStretchFactor(1,1);//此函数用于设定:控件是否可伸缩。
    //第一个参数用于指定控件的序号。第二个函数大于0时,表示控件可伸缩,小于0时,表示控件不可伸缩。
    //splitterMain->setStretchFactor(1,0);//左右分割都可以伸缩

    QVBoxLayout* container=new QVBoxLayout;
    container->addWidget(splitterMain);
    centralWidget()->setLayout(container);

    this->setMinimumSize(400, 320);
}

其它相关技巧

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

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

相关文章

软件测试|使用selenium进行多窗口操作

简介 在我们进行自动化测试的工作中&#xff0c;经常会点击某个元素或者链接就会自动打开一个新页面&#xff0c;需要我们转到新打开的页面去进行操作&#xff0c;这个时候我们就需要能够自动切换到新页面进行后续的操作&#xff0c;selenium同样支持这个功能&#xff0c;本文…

CSS设置移动端页面底部安全距离

env(safe-area-inset-bottom)是一个CSS属性值&#xff0c;用于设置底部安全距离。它表示使用环境变量来获取底部安全距离的值。当使用环境变量时&#xff0c;需要使用env()函数来引用具体的环境变量。例如&#xff1a; <style> .box{padding-bottom: env(safe-area-inse…

Java 算法和数据结构 答案整理,最新面试题

Java中如何使用动态规划求解背包问题&#xff1f; 1、定义子问题&#xff1a; 首先确定动态规划状态&#xff0c;通常以物品数量和背包容量为变量定义子问题&#xff0c;例如dp[i][j]表示前i件物品放入容量为j的背包所能获得的最大价值。 2、确定状态转移方程&#xff1a; 基…

​ 翻译 《The Old New Thing》

今天开始&#xff0c;为大家翻译微软优秀的技术专栏 The Old New Thing。 由微软高级工程师 Raymond Chen 撰写。该专栏起初是一个博客&#xff0c;后来也出版了同名书籍。专栏主要围绕 Windows 操作系统的开发和设计展开&#xff0c;涵盖了 Windows 平台的历史、技术细节、编程…

maven的依赖继承

先说一下创建子maven工程的步骤 继承 继承的作用&#xff1a;在父工程中&#xff0c;统一管理项目中的依赖信息&#xff0c;进行统一的版本控制 继承的背景是&#xff1a;对一个大型的项目进行了模块拆分&#xff0c;一个project下&#xff0c;创建了很多的module&#xff0c…

机器学习——随机森林

机器学习——随机森林 随机森林是一种强大的集成学习算法&#xff0c;能够用于分类和回归任务。它基于决策树构建&#xff0c;在集成学习框架下&#xff0c;通过Bagging算法和随机特征选择的方式&#xff0c;将多棵决策树组合成一个更强大的模型。本篇博客将介绍随机森林的原理…

计算机专业大学生应该在大学四年踏实学哪些东西?

在这个信息爆炸的时代&#xff0c;对于我们计算机专业的大学生来说&#xff0c;真正难的不是学习新技术&#xff0c;而是决定学什么、放弃什么。时间毕竟有限&#xff0c;每一个选择都像是在做一笔投资&#xff0c;希望能够收获最大的回报。我在这里分享一下我的一些经验&#…

服务器被攻击有什么表现?

引言 在现今高度互联的网络环境中&#xff0c;服务器安全已成为每个企业和个人站长不容忽视的重要议题。服务器作为承载关键业务和数据的核心设施&#xff0c;一旦遭受攻击&#xff0c;不仅可能导致服务中断、数据泄露&#xff0c;还可能带来严重的经济损失和声誉损害。本文旨…

【网络建设与运维】2024年河北省职业院校技能大赛中职组“网络建设与运维”赛项规程

培训、环境、资料、考证 公众号&#xff1a;Geek极安云科 网络安全群&#xff1a;775454947 网络系统管理群&#xff1a;223627079 网络建设与运维群&#xff1a;870959784 极安云科专注于技能提升&#xff0c;赋能 2024年广东省高校的技能提升&#xff0c;在培训中我们的应急…

unity 多屏幕操作

想了解基础操作请移步&#xff1a;&#xff08;重点是大佬写的好&#xff0c;这里就不再赘述&#xff09; Unity 基础 之 使用 Display 简单的实现 多屏幕显示的效果_unity display-CSDN博客 在panel上也可以通过获取 Canvas&#xff0c;来达到切换多屏幕的操作&#xff0c; …

详解多模态 AI

2022 年 11 月&#xff0c;OpenAI 推出了 ChatGPT。它只用了几天时间就以其前所未有的能力席卷了世界。生成式人工智能革命已经开始&#xff0c;每个人都在问同一个问题&#xff1a;下一步是什么&#xff1f; 当时&#xff0c;ChatGPT 和许多其他由大型语言模型 &#xff08;L…

【RK android7.1 开机进入主界面前短暂黑屏或者白屏问题】

RK android7.1 开机进入主界面前短暂黑屏或者白屏问题 问题描述解决方法郑重声明:本人原创博文,都是实战,均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: Rockchip OS:Android 7.1.2 Kernel: 3.10 问题描述 开机进入主界面得一瞬间,launcher短暂黑屏或者白屏…

这回轮到鸿蒙禁用安卓了!!!

1月18日&#xff0c;鸿蒙生态千帆仪式上&#xff0c;华为正式宣布了HarmonyOS NEXT&#xff08;下简称鸿蒙星河版或纯血鸿蒙&#xff09;开发者预览已向开发者开放申请&#xff0c;纯血鸿蒙开始走向普及阶段。伴随着不再兼容安卓的纯血鸿蒙铺开&#xff0c;鸿蒙走进了运营属于自…

【活动预告】本周四(3月28日)AI算法大模型备案线上活动

Al算法备案中心特邀十年合规专家「乐歌」&#xff0c;于本周四进行线上算法备案活动 支持AI创业者&#xff0c;免费咨询算法备案 3.28日20&#xff1a;00腾讯会议欢迎参与&#xff01; 扫码添加活动助理报名参加&#xff01;

【Vue3之computed属性(四)】

文章目录 前言一、computed属性有缓存二、使用方法三、修改全名 前言 理解computed属性&#xff0c;实现输入姓和名得出全名并双向绑定&#xff0c;区分单向绑定和双向绑定。测试computed属性和方法的区别 一、computed属性有缓存 先引入computed&#xff0c;写箭头函数定义并…

程序汪若依微服务华为云Linux部署保姆教程

若依官方有3个版本&#xff0c;程序汪以前已经出了对应的安装部署视频教程 单应用版本 前后分离版本 微服务版本 本视频是若依微服务版本&#xff0c;如果基础的环境软件都不会安装建议看下程序汪的单应用和前后端分离版本教程&#xff0c; 欢迎点击进入 &#xff08;单应…

【论文阅读】Probabilistic Imputation for Time-series Classification with Missing Data

Probabilistic Imputation for Time-series Classification with Missing Data 论文链接&#xff1a;https://icml.cc/virtual/2023/poster/23522 作者&#xff1a;SeungHyun Kim Hyunsu Kim EungGu Yun Hwangrae Lee Jaehun Lee Juho Lee 机构&#xff1a;韩国科学技术…

C++关于类和对象的基础语法

前言&#xff1a; 介绍c中类和对象的基础语法和注意事项&#xff0c;这里是c入门的第一道坎&#xff0c;细节很多&#xff0c;在后面的更深的学习中还会反复提到。 目录 前言&#xff1a; 1.OO语言 2.类的定义 3.类的访问限定符与封装的引入 4.类的实例化 5.关键字this指…

网络七层模型之应用层:理解网络通信的架构(七)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

算法——模拟专题(一篇搞定)

在本专栏已经更新双指针算法,滑动窗口算法,二分查找算法,前缀和算法以及位运算算法,欢迎大家跳转至相关专题阅读 此篇文章为大家带来算法专栏的模拟专题 模拟算法本质就是比葫芦画瓢&#xff0c;思路比较简单&#xff0c;就是将演算流程转化为代码 目录 1.替换所有的问号 1.1…