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

Qlabel 每五个一换行 并、号分割

学习点

Qlabel 每五个一换行 并、号分割

QString MainWindow::formatHobbies(const std::set<QString>& hobbies) {QString formattedHobbies;int count = 0;for (const QString& hobby : hobbies) {if (count > 0 && count % 5 == 0)formattedHobbies += "\n"; // 每 5 个换行formattedHobbies += hobby + "、";++count;}// 去掉最后一个 "、"if (!formattedHobbies.isEmpty())formattedHobbies.chop(1);return formattedHobbies;
}

效果图展示
在这里插入图片描述

Qlabel 每五个一换行 对齐排列

使用 QGridLayout 来排列爱好标签。
每行最多显示 5 个爱好,如果超过 5 个则换行。
使用 QLabel 来显示每个爱好,确保这些标签有一致的大小,并进行对齐

 QGridLayout* hobbiesLayout;
//添加到对应布局QWidget* rightPanel = new QWidget();QVBoxLayout* rightLayout = new QVBoxLayout(rightPanel);studentInfoLabel = new QLabel();rightLayout->addWidget(studentInfoLabel);// Create a layout for hobbieshobbiesLayout = new QGridLayout();hobbiesWidget = new QWidget();hobbiesWidget->setLayout(hobbiesLayout);rightLayout->addWidget(hobbiesWidget);//具体实现void MainWindow::updateHobbiesLayout(const std::set<QString>& hobbies)
{// Clear the previous hobbiesQLayoutItem* item;while ((item = hobbiesLayout->takeAt(0)) != nullptr) {delete item->widget();delete item;}// Add the new hobbiesint row = 0, col = 0;for (const QString& hobby : hobbies) {QLabel* hobbyLabel = new QLabel(hobby);hobbyLabel->setAlignment(Qt::AlignCenter);hobbyLabel->setFixedSize(100, 30);  // Fix label sizehobbiesLayout->addWidget(hobbyLabel, row, col);++col;if (col == 5) {col = 0;++row;}}
}

在这里插入图片描述

添加滑动条

// Right: Scroll area for hobbies and other widgetshobbiesWidget->setLayout(new QGridLayout());hobbiesScrollArea->setWidget(hobbiesWidget);hobbiesScrollArea->setWidgetResizable(true);hobbiesScrollArea->setMaximumHeight(40);  // Minimum heighthobbiesScrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);hobbiesScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);rightLayout->addWidget(hobbiesScrollArea);
void MainWindow::updateHobbiesLayout(const std::set<QString>& hobbies) {QGridLayout* layout = qobject_cast<QGridLayout*>(hobbiesWidget->layout());if (!layout)return;// Clear existing layout itemswhile (QLayoutItem* item = layout->takeAt(0)) {delete item->widget();delete item;}// Add hobbies to grid layoutint row = 0, col = 0;for (const auto& hobby : hobbies) {QLabel* hobbyLabel = new QLabel(hobby);layout->addWidget(hobbyLabel, row, col);if (++col >= 5) {col = 0;++row;}}hobbiesWidget->adjustSize();
}

在这里插入图片描述

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QTreeWidget>
#include <QStackedWidget>
#include <QTableWidget>
#include <QLabel>
#include <QTabWidget>
#include <vector>
#include <set>struct Student {QString id;QString name;QString className;int chinese;int math;int english;std::set<QString> hobbies;std::set<QString> honors;
};struct Teacher {QString id;QString name;std::set<QString> subjects;  // 任课科目std::set<QString> classes;   // 所教班级
};class MainWindow : public QMainWindow {Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);private:void setupUI();void loadStudentData();void loadTeacherData();void displayStudentDetails(const Student &student);void displayTeacherDetails(const Teacher &teacher);QStringList setToQStringList(const std::set<QString> &set);// 左侧控件QTabWidget *tabWidget;QTreeWidget *studentTree;QTreeWidget *teacherTree;// 右侧控件QStackedWidget *stackedWidget;QWidget *studentPage;QWidget *teacherPage;// 学生界面QLabel *studentInfoLabel;QTableWidget *studentTable;// 教师界面QLabel *teacherInfoLabel;QTableWidget *teacherTable;// 数据std::vector<Student> students;std::vector<Teacher> teachers;private slots:void onTabChanged(int index);void onTreeItemClicked(QTreeWidgetItem *item, int column);
};#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QHeaderView>
#include <QStringList>
#include <cstdlib>
#include <ctime>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {setupUI();loadStudentData();loadTeacherData();
}void MainWindow::setupUI() {// 左侧 Tab 页tabWidget = new QTabWidget(this);studentTree = new QTreeWidget(tabWidget);teacherTree = new QTreeWidget(tabWidget);studentTree->setHeaderLabel("学生 ID");teacherTree->setHeaderLabel("教师 ID");tabWidget->addTab(studentTree, "学生信息");tabWidget->addTab(teacherTree, "教师信息");connect(tabWidget, &QTabWidget::currentChanged, this, &MainWindow::onTabChanged);connect(studentTree, &QTreeWidget::itemClicked, this, &MainWindow::onTreeItemClicked);connect(teacherTree, &QTreeWidget::itemClicked, this, &MainWindow::onTreeItemClicked);// 右侧 StackedWidgetstackedWidget = new QStackedWidget(this);studentPage = new QWidget(stackedWidget);teacherPage = new QWidget(stackedWidget);stackedWidget->addWidget(studentPage);stackedWidget->addWidget(teacherPage);// 学生界面布局QVBoxLayout *studentLayout = new QVBoxLayout(studentPage);studentInfoLabel = new QLabel("学生详细信息", studentPage);studentTable = new QTableWidget(studentPage);studentTable->setColumnCount(3);studentTable->setHorizontalHeaderLabels({"语文", "数学", "英语"});studentTable->horizontalHeader()->setStretchLastSection(true);studentTable->verticalHeader()->setVisible(false);studentLayout->addWidget(studentInfoLabel);studentLayout->addWidget(studentTable);// 教师界面布局QVBoxLayout *teacherLayout = new QVBoxLayout(teacherPage);teacherInfoLabel = new QLabel("教师详细信息", teacherPage);teacherTable = new QTableWidget(teacherPage);teacherTable->setColumnCount(2);teacherTable->setHorizontalHeaderLabels({"班级", "学生数量"});teacherTable->horizontalHeader()->setStretchLastSection(true);teacherTable->verticalHeader()->setVisible(false);teacherLayout->addWidget(teacherInfoLabel);teacherLayout->addWidget(teacherTable);// 主布局QHBoxLayout *mainLayout = new QHBoxLayout();mainLayout->addWidget(tabWidget, 1);mainLayout->addWidget(stackedWidget, 3);QWidget *central = new QWidget(this);central->setLayout(mainLayout);setCentralWidget(central);
}void MainWindow::loadStudentData() {srand(static_cast<unsigned>(time(nullptr)));for (int i = 1; i <= 30; ++i) {Student student;student.id = QString("ID%1").arg(i, 2, 10, QChar('0'));student.name = QString("学生%1").arg(i);student.className = QString("高三%1班").arg(i % 5 + 1);student.chinese = rand() % 40 + 60;student.math = rand() % 40 + 60;student.english = rand() % 40 + 60;student.hobbies = {"篮球", "足球", "画画", "写作", "音乐"};student.honors = {"优秀学生", "三好学生", "数学竞赛一等奖", "文艺活动积极分子"};students.push_back(student);QTreeWidgetItem *item = new QTreeWidgetItem(studentTree);item->setText(0, student.id);}
}void MainWindow::loadTeacherData() {for (int i = 1; i <= 10; ++i) {Teacher teacher;teacher.id = QString("T%1").arg(i, 2, 10, QChar('0'));teacher.name = QString("教师%1").arg(i);teacher.subjects = {"语文", "数学", "英语"};teacher.classes = {"高一1班", "高二2班", "高三3班"};teachers.push_back(teacher);QTreeWidgetItem *item = new QTreeWidgetItem(teacherTree);item->setText(0, teacher.id);}
}void MainWindow::onTabChanged(int index) {if (index == 0) {stackedWidget->setCurrentWidget(studentPage);} else if (index == 1) {stackedWidget->setCurrentWidget(teacherPage);}
}void MainWindow::onTreeItemClicked(QTreeWidgetItem *item, int column) {QString id = item->text(column);if (tabWidget->currentIndex() == 0) {for (const auto &student : students) {if (student.id == id) {displayStudentDetails(student);break;}}} else if (tabWidget->currentIndex() == 1) {for (const auto &teacher : teachers) {if (teacher.id == id) {displayTeacherDetails(teacher);break;}}}
}void MainWindow::displayStudentDetails(const Student &student) {//QString hobbies = QStringList(student.hobbies.begin(), student.hobbies.end()).join("、");QString hobbies = setToQStringList(student.hobbies).join("、");studentInfoLabel->setText(QString("学号: %1\n姓名: %2\n班级: %3\n爱好: %4").arg(student.id).arg(student.name).arg(student.className).arg(hobbies));studentTable->setRowCount(1);studentTable->setItem(0, 0, new QTableWidgetItem(QString::number(student.chinese)));studentTable->setItem(0, 1, new QTableWidgetItem(QString::number(student.math)));studentTable->setItem(0, 2, new QTableWidgetItem(QString::number(student.english)));
}void MainWindow::displayTeacherDetails(const Teacher &teacher) {QString subjects = setToQStringList(teacher.subjects).join("、");teacherInfoLabel->setText(QString("工号: %1\n姓名: %2\n任课科目: %3").arg(teacher.id).arg(teacher.name).arg(subjects));teacherTable->setRowCount(teacher.classes.size());int row = 0;for (const auto &cls : teacher.classes) {teacherTable->setItem(row, 0, new QTableWidgetItem(cls));teacherTable->setItem(row, 1, new QTableWidgetItem(QString::number(rand() % 50 + 10)));++row;}
}QStringList MainWindow::setToQStringList(const std::set<QString> &set)
{QStringList list;for (const auto &item : set) {list.append(item);}return list;
}
void MainWindow::displayStudentDetails(const Student &student) {// 上半部分Label显示信息QStringList hobbiesList;for (const auto &hobby : student.hobbies) {hobbiesList.append(hobby);}QString hobbies = hobbiesList.join("、");studentInfoLabel->setText(QString("学号: %1\n姓名: %2\n班级: %3\n爱好: %4").arg(student.id).arg(student.name).arg(student.className).arg(hobbies));// 下半部分Table显示成绩studentTable->setRowCount(student.scores.size()); // 根据成绩数量设置行数for (int i = 0; i < student.scores.size(); ++i) {studentTable->setItem(i, 0, new QTableWidgetItem(QString::number(student.scores[i])));}
}

添加阴影效果
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton>
#include <QLineEdit>
#include "loadingwidget.h"class MainWindow : public QMainWindow
{Q_OBJECT
public:MainWindow(QWidget *parent = nullptr);~MainWindow();protected:void resizeEvent(QResizeEvent *event) override;private slots:void onStartLoading();void onStopLoading();private:QPushButton *startButton;QPushButton *stopButton;QLineEdit * myLine;LoadingWidget *loadingWidget;
};#endif // MAINWINDOW_H

mainwindow.cpp

#include "MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), startButton(nullptr), stopButton(nullptr), loadingWidget(nullptr)
{resize(400, 300);// 创建加载遮罩loadingWidget = new LoadingWidget(this);loadingWidget->setGeometry(rect()); // 遮罩覆盖整个主窗口// 创建按钮startButton = new QPushButton("加载", this);startButton->setGeometry(50, 50, 100, 50);stopButton = new QPushButton("取消", this);stopButton->setGeometry(250, 50, 100, 50);myLine = new QLineEdit(this);myLine->setGeometry(250, 150, 100, 50);// 绑定信号与槽connect(startButton, &QPushButton::clicked, this, &MainWindow::onStartLoading);connect(stopButton, &QPushButton::clicked, this, &MainWindow::onStopLoading);
}MainWindow::~MainWindow()
{delete loadingWidget;
}void MainWindow::resizeEvent(QResizeEvent *event)
{QMainWindow::resizeEvent(event);if (loadingWidget) {loadingWidget->setGeometry(rect()); // 调整遮罩大小}
}void MainWindow::onStartLoading()
{if (loadingWidget) {loadingWidget->start();}
}void MainWindow::onStopLoading()
{if (loadingWidget) {loadingWidget->stop();}
}

loadingwidget.h

#ifndef LOADINGWIDGET_H
#define LOADINGWIDGET_H#include <QWidget>
#include <QTimer>class LoadingWidget : public QWidget
{Q_OBJECT
public:explicit LoadingWidget(QWidget *parent = nullptr);protected:void paintEvent(QPaintEvent *event) override;void timerEvent(QTimerEvent *event) override;public slots:void start();void stop();private:int m_angle = 0;               // 当前旋转角度int m_timerID = -1;            // 定时器IDconst int UPDATE_INTERVAL = 60; // 定时器间隔(毫秒)
};#endif // LOADINGWIDGET_H···
loadingwidget.
```cpp
#include "LoadingWidget.h"
#include <QPainter>LoadingWidget::LoadingWidget(QWidget *parent): QWidget(parent)
{setAttribute(Qt::WA_StyledBackground, true);setWindowFlags(Qt::FramelessWindowHint);  // 无边框窗口setAttribute(Qt::WA_TransparentForMouseEvents, true); // 鼠标事件穿透setStyleSheet("background-color: rgba(0, 0, 0, 127);"); // 半透明背景
}void LoadingWidget::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);int size = qMin(width(), height()) / 4;painter.translate(width() / 2, height() / 2);painter.rotate(m_angle);QPen pen;pen.setWidth(3);pen.setColor(Qt::white);painter.setPen(pen);painter.drawArc(-size, -size, size * 2, size * 2, 0, 120 * 16);
}void LoadingWidget::timerEvent(QTimerEvent *event)
{m_angle = (m_angle + 10) % 360;update();
}void LoadingWidget::start()
{if (m_timerID == -1) {m_timerID = startTimer(UPDATE_INTERVAL);show();}
}void LoadingWidget::stop()
{if (m_timerID != -1) {killTimer(m_timerID);m_timerID = -1;hide();}
}···

相关文章:

Qlabel 每五个一换行 并、号分割

学习点 Qlabel 每五个一换行 并、号分割 QString MainWindow::formatHobbies(const std::set<QString>& hobbies) {QString formattedHobbies;int count 0;for (const QString& hobby : hobbies) {if (count > 0 && count % 5 0)formattedHobbies…...

加速PyTorch模型训练:自动混合精度(AMP)

在深度学习领域&#xff0c;模型训练的速度和效率尤为重要。为了提升训练速度并减少显存占用&#xff08;较复杂的模型中&#xff09;&#xff0c;PyTorch自1.6版本起引入了自动混合精度&#xff08;Automatic Mixed Precision, AMP&#xff09;功能。 AMP简单介绍 是一种训练…...

【py】python安装教程(Windows系统,python3.13.2版本为例)

1.下载地址 官网&#xff1a;https://www.python.org/ 官网下载地址&#xff1a;https://www.python.org/downloads/ 2.64版本或者32位选择 【Stable Releases】&#xff1a;稳定发布版本&#xff0c;指的是已经测试过的版本&#xff0c;相对稳定。 【Pre-releases】&#…...

Django REST Framework:如何获取序列化后的ID

Django REST Framework&#xff1a;如何获取序列化后的ID &#x1f604; 嗨&#xff0c;小伙伴们&#xff01;今天我们来聊一聊Django REST Framework&#xff08;简称DRF&#xff09;中一个非常常见的操作&#xff1a;如何获取序列化后的ID。对于那些刚入门的朋友们&#xff…...

QT修仙笔记 事件大圆满 闹钟大成

学习笔记 牛客刷题 闹钟 时钟显示 通过 QTimer 每秒更新一次 QLCDNumber 显示的当前时间&#xff0c;格式为 hh:mm:ss&#xff0c;实现实时时钟显示。 闹钟设置 使用 QDateTimeEdit 让用户设置闹钟时间&#xff0c;可通过日历选择日期&#xff0c;设置范围为当前时间到未来 …...

Leetcode - 149双周赛

目录 一、3438. 找到字符串中合法的相邻数字二、3439. 重新安排会议得到最多空余时间 I三、3440. 重新安排会议得到最多空余时间 II四、3441. 变成好标题的最少代价 一、3438. 找到字符串中合法的相邻数字 题目链接 本题有两个条件&#xff1a; 相邻数字互不相同两个数字的的…...

解决 ComfyUI-Impact-Pack 中缺少 UltralyticsDetectorProvider 节点的问题

解决 ComfyUI-Impact-Pack 中缺少 UltralyticsDetectorProvider 节点的问题 1. 安装ComfyUI-Impact-Pack 首先确保ComfyUI-Impact-Pack 已经下载 地址: https://github.com/ltdrdata/ComfyUI-Impact-Pack 2. 安装ComfyUI-Impact-Subpack 由于新版本的Impact Pack 不再提供这…...

使用Kickstart配置文件封装操作系统实现Linux的自动化安装

使用Kickstart配置文件封装操作系统实现Linux的自动化安装 创建ks.cfg配置文件 可以使用已经安装完成的Linux操作系统中的/root目录下的anaconda.cfg配置文件 注意&#xff0c;配置文件会因为kickstart的版本兼容性的问题导致无法安装报错需要在实际使用过程中删除某些参数 …...

Android笔记【snippet】

一、 6、Card及ConstraintLayout线性布局 //定义单独的机器人单独一行的卡片 Composable fun RobotCard(robot: Robot,navController:NavController){Card(modifier Modifier.fillMaxWidth().wrapContentHeight().padding(5.dp),colors CardDefaults.elevatedCardColors(co…...

zsh: command not found: conda

场景描述 在 Linux 服务器上使用 zsh 时&#xff0c;如果出现 zsh: command not found: conda 错误&#xff0c;说明你的系统未正确配置 conda 命令&#xff0c;或者你尚未安装 Anaconda/Miniconda。 解决方案 确保已安装 Anaconda 或 Miniconda conda 是 Anaconda 或 Minico…...

【知识科普】CPU,GPN,NPU知识普及

CPU,GPU,NPU CPU、GPU、NPU 详解1. CPU&#xff08;中央处理器&#xff09;2. GPU&#xff08;图形处理器&#xff09;3. NPU&#xff08;神经网络处理器&#xff09; **三者的核心区别****协同工作示例****总结** CPU、GPU、NPU 详解 1. CPU&#xff08;中央处理器&#xff0…...

【C++八股】struct和Class的区别

1. 默认访问控制 struct&#xff1a;结构体中的成员默认是 public&#xff0c;即外部代码可以直接访问结构体的成员。class&#xff1a;类中的成员默认是 private&#xff0c;即外部代码不能直接访问类的成员&#xff0c;必须通过公有接口&#xff08;通常是成员函数&#xff…...

鹧鸪云光伏仓储、物料管理软件详细功能

采购中心 &#xff1a;作为核心枢纽&#xff0c;能集中管理多品牌设备&#xff0c;企业可灵活按需采购。采购与退货流程高效便捷&#xff0c;审核通过后物资快速补充、问题货物及时退回&#xff0c;保障资金与物资顺畅周转&#xff0c;避免积压浪费。付款与退款环节 &#xff1…...

bazel 小白理解

Bazel命令是用于构建和测试软件项目的一个强大工具&#xff0c;尤其适用于大规模和多语言的软件项目。对于小白来说&#xff0c;可以这样理解Bazel及其命令&#xff1a; Bazel的基本概念 构建系统&#xff1a;Bazel是一个构建系统&#xff0c;它的主要任务是自动化地编译和链…...

MVC(Model-View-Controller)framework using Python ,Tkinter and SQLite

1.项目结构 sql: CREATE TABLE IF NOT EXISTS School (SchoolId TEXT not null, SchoolName TEXT NOT NULL,SchoolTelNo TEXT NOT NULL) 整体思路 Model&#xff1a;负责与 SQLite 数据库进行交互&#xff0c;包括创建表、插入、删除、更新和查询数据等操作。View&#xff1…...

WPF 设置宽度为 父容器 宽度的一半

方法1&#xff1a;使用 绑定和转换器 实现 创建类文件 HalfWidthConverter public class HalfWidthConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value is double width){return width / 4…...

java项目之在线心理评测与咨询管理系统(源码+文档)

项目简介 在线心理评测与咨询管理系统实现了以下功能&#xff1a; 在线心理评测与咨询管理系统的主要使用者分为&#xff1a; &#xff08;1&#xff09;在个人中心&#xff0c;管理员可以修改自己的用户名和登录密码。 &#xff08;2&#xff09;在系统前台可以查看首页&…...

【STM32系列】利用MATLAB配合ARM-DSP库设计FIR数字滤波器(保姆级教程)

ps.源码放在最后面 设计IIR数字滤波器可以看这里&#xff1a;利用MATLAB配合ARM-DSP库设计IIR数字滤波器&#xff08;保姆级教程&#xff09; 前言 本篇文章将介绍如何利用MATLAB与STM32的ARM-DSP库相结合&#xff0c;简明易懂地实现FIR低通滤波器的设计与应用。文章重点不在…...

Springboot框架扩展功能的使用

Spring Boot 提供了许多扩展点&#xff0c;允许开发者在应用程序的生命周期中插入自定义逻辑。这些扩展点可以帮助你更好地控制应用程序的行为&#xff0c;例如在启动时初始化数据、在关闭时释放资源、或者自定义配置加载逻辑。以下是 Spring Boot 中常见的扩展点&#xff1a; …...

yum报错 Could not resolve host: mirrorlist.centos.org

检查dns 使用ping www.baidu.com &#xff0c;如果ping不通&#xff0c;检查/etc/resolv.conf文件中是否有&#xff1a; nameserver 8.8.8.8 nameserver 8.8.4.4 替换yum源 1.备份原始的 YUM 源配置文件&#xff1a; sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.r…...

docker使用dockerfile打包镜像(docker如何打包)

文章目录 1. 编写 Dockerfile2. 构建 Docker 镜像3. 运行 Docker 容器4. 导出与导入镜像&#xff08;可选&#xff09; 1. 编写 Dockerfile Dockerfile 是一个文本文件&#xff0c;其中包含了一系列指令&#xff0c;这些指令定义了如何构建你的 Docker 镜像。下面以一个简单的…...

去中心化AGI网络架构:下一代人工智能的范式革命

文章目录 引言:当AGI遇到去中心化一、中心化AI架构的四大困境1.1 算力垄断与资源错配1.2 数据孤岛与隐私悖论1.3 模型暴政与单点故障1.4 创新抑制与价值捕获二、去中心化AGI网络的架构设计2.1 分层架构总览2.2 网络层:混合拓扑结构2.3 计算层:动态算力编排2.4 数据层:零知识…...

gitlab无法登录问题

在我第一次安装gitlab的时候发现登录页面是 正常的页面应该是 这种情况的主要原因是不是第一次登录&#xff0c;所以我们要找到原先的密码 解决方式&#xff1a; [rootgitlab ~]# vim /etc/gitlab/initial_root_password# WARNING: This value is valid only in the followin…...

单向链表在实际项目中的应用

前言 在实际项目中&#xff0c;单向链表经常被用来解决排队问题&#xff0c;因为链表允许动态地添加和移除元素&#xff0c;非常适合模拟队列&#xff08;FIFO&#xff0c;先进先出&#xff09;的行为。 这里的链表包含头节点&#xff0c;头结点的数据用来记录链表长度&#x…...

【系统架构设计师】操作系统 ③ ( 存储管理 | 页式存储弊端 - 段式存储引入 | 段式存储 | 段表 | 段表结构 | 逻辑地址 的 合法段地址判断 )

文章目录 一、页式存储弊端 - 段式存储引入1、页式存储弊端 - 内存碎片2、页式存储弊端 - 逻辑结构不匹配3、段式存储引入 二、段式存储 简介1、段式存储2、段表3、段表 结构4、段内地址 / 段内偏移5、段式存储 优缺点6、段式存储 与 页式存储 对比 三、逻辑地址 的 合法段地址…...

PDF另存为图片的一个方法

说明 有时需要把PDF的每一页另存为图片。用Devexpress可以很方便的完成这个功能。 窗体上放置一个PdfViewer。 然后循环每一页 for (int i 1; i < pdfViewer1.PageCount; i) 调用 chg_pdf_to_bmp函数获得图片并保存 chg_pdf_to_bmp中调用了PdfViewer的CreateBitmap函数…...

HTML之JavaScript运算符

HTML之JavaScript运算符 1.算术运算符 - * / %除以0&#xff0c;结果为Infinity取余数&#xff0c;如果除数为0&#xff0c;结果为NaN NAN:Not A Number2.复合赋值运算符 - * / %/ 除以0&#xff0c;结果为Infinity% 如果除数为0&#xff0c;结果为NaN NaN:No…...

借助 ListWise 提升推荐系统精排效能:技术、案例与优化策略

目录 一、引言二、ListWise 方法概述三、ListWise 用于精排的优势四、ListWise 样本具体的构建过程4.1 确定样本的上下文4.2 收集候选物品及相关特征4.3 确定物品的真实排序标签4.4 构建样本列表4.5 划分训练集、验证集和测试集 五、ListWise 方法案例分析六、ListWise 方法在精…...

C++中什么时候用. 什么时候用->

学了一年C今天出了一个大岔子&#xff0c;因为太久没有做链表类型题目了&#xff0c;并且STL用惯了今天遇到一题&#xff0c;写的时候发现完全不对劲&#xff0c;搞慌了&#xff0c;首先我们看题目 2. 两数相加 再看我第一次的解答&#xff0c;先不论结果对不对 错的行为有很多…...

从云原生到 AI 原生,谈谈我经历的网关发展历程和趋势

作者&#xff1a;谢吉宝&#xff08;唐三&#xff09; 编者按&#xff1a; 云原生 API 网关系列教程即将推出&#xff0c;欢迎文末查看教程内容。本文整理自阿里云智能集团资深技术专家&#xff0c;云原生产品线中间件负责人谢吉宝&#xff08;唐三&#xff09; 在云栖大会的精…...