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

qt项目总结

绘制圆弧 文字组合仪表盘void paintEvent(QPaintEvent* event){ Q_UNUSED(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); // 1. 绘制背景圆弧 painter.save(); painter.setPen(QPen(QColor(255, 255, 255), 4)); painter.drawArc(rect(), 30 * 16, 120 * 16); // 参数矩形, 起始角度(×16), 跨度(×16) painter.restore(); // 2. 绘制前景圆弧进度 painter.save(); painter.setPen(QPen(QColor(209, 107, 93), 4)); int spanAngle (int)(m_ratio * 120 * 16); // 根据比例计算跨度 painter.drawArc(rect(), 30 * 16, spanAngle); painter.restore(); // 3. 绘制文字 painter.save(); QFont font; font.setFamily(PingFang TC); font.setPixelSize(35); painter.setFont(font); painter.setPen(QColor(255, 255, 255)); painter.drawText(rect(), Qt::AlignCenter, 文字内容); painter.restore(); }子控件管理组合// .h 文件 private: RulerHead *m_pRUlerHead; QPoint m_originalPosition; // 记录初始位置 // .cpp 构造函数 CCRuler::CCRuler(QWidget *parent) : QWidget{parent}{ // 设置自身位置和大小 setGeometry(RULLERWIDGET_STARTX, RULLERWIDGET_STARTY, RULLERWIDGET_WIDTH, RULLERWIDGET_HIGHET); setAutoFillBackground(true); setStyleSheet(background-color:rgba(0,0,0,0)); // 创建子控件 m_pRUlerHead new RulerHead(this); // 记录子控件初始位置 m_originalPosition m_pRUlerHead-pos(); // 连接信号 connect(m_pRUlerHead, RulerHead::rulerHeadMoveSignal, this, CCRuler::OnRulerHeadMove); connect(m_pRUlerHead, RulerHead::rulerHeadMoveDoneSignal, this, CCRuler::OnrulerHeadMoveDone); } // 析构函数 CCRuler::~CCRuler(){ if(m_pRUlerHead ! NULL){ delete m_pRUlerHead; m_pRUlerHead nullptr; } } // 限制子控件移动范围 void CCRuler::OnRulerHeadMove(int aValue){ int realPosY aValue; if(realPosY RULLER_MAX_HEIGHET realPosY 0){ m_pRUlerHead-move(m_originalPosition.rx(), realPosY); } }多层绘制组合save/restorevoid paintEvent(QPaintEvent* event){ Q_UNUSED(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); // 第一层绘制背景 painter.save(); painter.drawPixmap(rect(), QPixmap(:/images/background.png)); painter.restore(); // 第二层绘制进度条 painter.save(); painter.setPen(QPen(QColor(127, 159, 124), 1)); painter.setBrush(QColor(127, 159, 124)); painter.drawRect(15, 3, 52, currentHeight); painter.restore(); // 第三层绘制刻度 painter.save(); painter.setPen(QPen(QColor(255, 255, 255), 1)); // 绘制刻度线... painter.restore(); // 第四层绘制文字 painter.save(); painter.setFont(font); painter.setPen(QColor(255, 255, 255)); painter.drawText(rect(), Qt::AlignCenter, text); painter.restore(); }图片旋转绘制指针/仪表盘void paintEvent(QPaintEvent* event){ // 绘制底图 painter.save(); painter.drawPixmap(rect(), QPixmap(:/images/dial.png)); painter.restore(); // 绘制旋转的指针 painter.save(); painter.translate(width()/2, height()/2); // 移动到中心点 painter.rotate(m_rotateValue); // 旋转 // 绘制图片注意坐标是相对于中心点的 painter.drawPixmap(-13, -78, 26, 90, QPixmap(:/images/needle.png)); painter.restore(); }自定义绘制背景图片// .h 文件 protected: void paintEvent(QPaintEvent* event); // .cpp 文件 void MainWindow::paintEvent(QPaintEvent* event){ Q_UNUSED(event); // 避免编译器警告 QPainter painter(this); painter.save(); // 保存状态 painter.drawPixmap(rect(), QPixmap(:/images/path/to/background.png)); painter.restore(); // 恢复状态 }窗口居中固定大小// 在构造函数中使用 #define WINDOW_WIDTH 436 #define WINDOW_HEIGHT 775 // 获取主屏幕并居中 QScreen *screen QGuiApplication::primaryScreen(); QRect screenGeometry screen-geometry(); int startX (screenGeometry.width() - WINDOW_WIDTH) / 2; int startY (screenGeometry.height() - WINDOW_HEIGHT) / 2; setGeometry(startX, startY, WINDOW_WIDTH, WINDOW_HEIGHT); // 固定窗口大小 setMinimumSize(WINDOW_WIDTH, WINDOW_HEIGHT); setMaximumSize(WINDOW_WIDTH, WINDOW_HEIGHT); // 禁用最大化最小化按钮 setWindowFlags(windowFlags() ~Qt::WindowMinMaxButtonsHint); ## 长按检测 **功能** 检测用户长按操作常用于手机端交互 cpp // 头文件 class LongPressButton : public QPushButton { Q_OBJECT public: explicit LongPressButton(QWidget* parent nullptr) : QPushButton(parent) { m_pTimer new QTimer(this); m_pTimer-setSingleShot(true); m_pTimer-setInterval(500); // 长按阈值 500ms connect(m_pTimer, QTimer::timeout, this, LongPressButton::OnLongPress); } protected: void mousePressEvent(QMouseEvent* event) override { if(event-button() Qt::LeftButton) { m_pTimer-start(); } QPushButton::mousePressEvent(event); } void mouseReleaseEvent(QMouseEvent* event) override { m_pTimer-stop(); QPushButton::mouseReleaseEvent(event); } void mouseMoveEvent(QMouseEvent* event) override { if(!rect().contains(event-pos())) { m_pTimer-stop(); } QPushButton::mouseMoveEvent(event); } private slots: void OnLongPress() { emit longPressSignal(); } signals: void longPressSignal(); private: QTimer* m_pTimer; };震动/摇摆动画功能让控件产生左右摇摆的动画效果// 头文件 class ShakeWidget : public QWidget { Q_OBJECT public: void StartShake(QWidget* targetWidget) { if(m_pAnimation nullptr) { m_pAnimation new QPropertyAnimation(targetWidget, pos); m_pAnimation-setDuration(100); m_pAnimation-setLoopCount(-1); // 无限循环 } QPoint startPos targetWidget-pos(); m_pAnimation-setKeyValueAt(0, startPos); m_pAnimation-setKeyValueAt(0.25, startPos QPoint(3, 0)); m_pAnimation-setKeyValueAt(0.5, startPos); m_pAnimation-setKeyValueAt(0.75, startPos QPoint(-3, 0)); m_pAnimation-setKeyValueAt(1.0, startPos); m_pAnimation-start(); } void StopShake() { if(m_pAnimation) m_pAnimation-stop(); } private: QPropertyAnimation* m_pAnimation nullptr; };页面滑动切换跟手效果功能实现类似手机浏览器的页面滑动切换// 核心思路手动计算位置 双缓冲显示 void StackedWidget::UpdateSlide(float distance) { QWidget* current m_list[currentIndex]; QWidget* next m_list[nextIndex]; next-setHidden(false); if(distance 0) { // 左滑 current-move(distance, 0); next-move(width() - qAbs(distance), 0); } else { // 右滑 current-move(distance, 0); next-move(-width() distance, 0); } } void StackedWidget::FinishSlide() { currentIndex nextIndex; // 隐藏其他显示当前 for(int i 0; i list.count(); i) { list[i]-setHidden(i ! currentIndex); list[i]-move(0, 0); // 复位 } }批量操作多个同类控件功能统一控制列表中的所有控件void MyWidget::showAll() { for(int i 0; i m_widgetList.count(); i) { if(m_widgetList[i]) { m_widgetList[i]-setVisible(true); } } } void MyWidget::hideAll() { for(int i 0; i m_widgetList.count(); i) { if(m_widgetList[i]) { m_widgetList[i]-setVisible(false); } } } void MyWidget::operateAll(std::functionvoid(QWidget*) operation) { for(int i 0; i m_widgetList.count(); i) { if(m_widgetList[i]) { operation(m_widgetList[i]); } } }拖放文件到窗口功能支持拖拽文件到窗口获取文件路径// 1. 启用拖放 setAcceptDrops(true); // 2. 拖入事件 void MyWidget::dragEnterEvent(QDragEnterEvent* event) { if(event-mimeData()-hasUrls()) { event-acceptProposedAction(); } } // 3. 放下事件 void MyWidget::dropEvent(QDropEvent* event) { const QMimeData* mimeData event-mimeData(); if(mimeData-hasUrls()) { QListQUrl urlList mimeData-urls(); for(const QUrl url : urlList) { QString filePath url.toLocalFile(); // 处理文件... } } }点击空白区域检测功能检测鼠标点击是否在控件外部void MyWidget::mousePressEvent(QMouseEvent* event) { if(event-button() Qt::LeftButton) { // 检测是否点击在子控件上 bool clickedOnChild false; for(QWidget* child : findChildrenQWidget*()) { if(child-rect().contains(child-mapFromParent(event-pos()))) { clickedOnChild true; break; } } if(!clickedOnChild) { // 点击空白区域的处理 onBlankAreaClicked(); } } QWidget::mousePressEvent(event); }网格布局计算功能将控件排列成网格如 4列 x 多行void GridContainer::refreshLayout(int columns) { for(int i 0; i itemList.count(); i) { int col i % columns; int row i / columns; int x marginLeft col * (itemWidth spacing); int y marginTop row * (itemHeight spacing); itemList[i]-setGeometry(x, y, itemWidth, itemHeight); } }父子控件层级管理功能组合控件父控件包含多个子控件// 组合模式Container 包含多个子控件 class CardWidget : public QWidget { public: CardWidget(QWidget* parent) : QWidget(parent) { // 创建子控件 m_pIcon new QLabel(this); m_pTitle new QLabel(this); m_pButton new QPushButton(this); // 设置父控件属性 setFixedSize(80, 100); setStyleSheet(background: transparent;); } void setContent(const QString iconPath, const QString title) { m_pIcon-setPixmap(QPixmap(iconPath)); m_pTitle-setText(title); } private: QLabel* m_pIcon; QLabel* m_pTitle; QPushButton* m_pButton; };状态切换模式功能根据状态执行不同操作如正常模式 vs 编辑模式class ModeManager { public: enum Mode { ViewMode, EditMode }; void setMode(Mode mode) { m_currentMode mode; switch(mode) { case ViewMode: showAllDeleteButtons(false); break; case EditMode: showAllDeleteButtons(true); startAllAnimations(); break; } } bool isEditMode() const { return m_currentMode EditMode; } private: Mode m_currentMode ViewMode; };多层信号传递功能子控件 → 父控件 → 顶层控件的信号传递// Level 1: 底层控件发出信号 connect(childWidget, ChildWidget::someSignal, this, ParentWidget::onChildSignal); // Level 2: 父控件转发信号 connect(this, ParentWidget::onChildSignal, topWidget, TopWidget::onChildSignalFromParent);最基础的 Qt 编程套路总结使用icon画控件1. 基本用法最常用// 创建 QIcon QIcon icon(:/need/Resources/pauseButton.png); // 设置到按钮 QPushButton *button new QPushButton(); button-setIcon(icon); // 设置图标大小重要 button-setIconSize(QSize(60, 60)); // 设置按钮大小要匹配图标大小 button-setFixedSize(60, 60);2. QIcon 的核心优势特性说明保持原始比例图片不会被压缩变形自动适配支持不同尺寸的图片状态管理可以设置 normal、hover、pressed 等状态的图片透明支持自动处理透明通道3. QIcon 的套路标准流程// 第一步创建 QIcon QIcon icon(:/path/to/image.png); // 第二步设置图标大小关键 button-setIconSize(QSize(width, height)); // 第三步设置按钮大小匹配图标 button-setFixedSize(width, height); // 第四步设置样式表去掉默认样式 button-setStyleSheet( QPushButton { border: none; // 去掉边框 background: transparent; // 透明背景 } );4. 高级用法多状态图标// 创建 QIcon 并设置不同状态的图片 QIcon icon; // 正常状态 icon.addPixmap(QPixmap(:/normal.png), QIcon::Normal); // 悬停状态 icon.addPixmap(QPixmap(:/hover.png), QIcon::Active); // 按下状态 icon.addPixmap(QPixmap(:/pressed.png), QIcon::Selected); // 禁用状态 icon.addPixmap(QPixmap(:/disabled.png), QIcon::Disabled); // 设置到按钮 button-setIcon(icon);5. QIcon 的状态模式状态枚举值说明NormalQIcon::Normal默认状态ActiveQIcon::Active悬停状态SelectedQIcon::Selected选中/按下状态DisabledQIcon::Disabled禁用状态6. 常见问题与解决问题 1图标显示很小// ❌ 错误没有设置图标大小 button-setIcon(icon); // ✅ 正确设置图标大小 button-setIcon(icon); button-setIconSize(QSize(60, 60)); // 关键问题 2图标被压缩变形// ❌ 错误按钮大小和图标大小不匹配 button-setIcon(icon); button-setIconSize(QSize(60, 60)); button-setFixedSize(100, 30); // 不匹配 // ✅ 正确大小一致 button-setIcon(icon); button-setIconSize(QSize(60, 60)); button-setFixedSize(60, 60); // 匹配问题 3图标有默认边框// ❌ 错误没有设置样式表 button-setIcon(icon); // ✅ 正确去掉默认样式 button-setIcon(icon); button-setStyleSheet( QPushButton { border: none; background: transparent; } );7. 完整示例推荐写法// 创建按钮 QPushButton *button new QPushButton(parent); // 创建图标 QIcon icon(:/need/Resources/pauseButton.png); // 设置图标和大小 button-setIcon(icon); button-setIconSize(QSize(60, 60)); button-setFixedSize(60, 60); // 设置位置 button-move(160, 600); // 设置样式表简洁的点击效果 button-setStyleSheet( QPushButton { border: none; background: transparent; } QPushButton:hover { opacity: 0.8; } QPushButton:pressed { opacity: 0.6; } ); // 连接信号 connect(button, QPushButton::clicked, this, MyClass::onButtonClicked);8. QIcon vs background-image 对比特性QIconbackground-image图片比例保持原始按按钮大小缩放状态管理支持多状态需要样式表切换透明度自动处理需要手动设置推荐场景图标按钮背景装饰9. 总结QIcon 的核心套路创建 QIconQIcon icon(:/path/to/image.png);设置图标大小button-setIconSize(QSize(w, h));关键设置按钮大小button-setFixedSize(w, h);匹配图标去掉默认样式button-setStyleSheet(border: none; background: transparent;);添加点击效果使用opacity实现简洁的反馈记住setIconSize是最重要的不设置的话图标会显示得很小添加背景颜色进行调试void ccanstackedwidget::CreatePageWidgetWithCount(int count){ if(count 0){return;} for(int i0;icount; i){ CCFrameWidget* frameWidget new CCFrameWidget(this); frameWidget-setGeometry(0,0,STACKWIDGET_WIDTH,STACKWIDGET_HEIGHT); // frameWidget-setAutoFillBackground(true); // QPalette palette(frameWidget-palette()); // if(i 0) palette.setColor(QPalette::Window,Qt::blue); // if(i 1) palette.setColor(QPalette::Window,Qt::green); // if(i 2) palette.setColor(QPalette::Window,Qt::red); // frameWidget-setPalette(palette); connect(frameWidget, SIGNAL(mouseMoveDistanceOnStackFrame(QPoint)), SLOT(OnmouseMoveDistanceOnStackFrame(QPoint))); connect(frameWidget, SIGNAL(mouseReleaseOnStackFrame()), SLOT(OnmouseReleaseOnStackFrame())); if(i 0){ frameWidget-setHidden(false);} else{ frameWidget-setHidden(true); } m_stackFramelist.append(frameWidget); } }按钮创建与布局// 创建按钮 QPushButton* btn new QPushButton(点击我, this); btn-setGeometry(100, 100, 100, 30); // 或者用布局 QVBoxLayout* layout new QVBoxLayout(this); layout-addWidget(btn);信号槽连接// 方式1Qt5 新语法推荐 connect(btn, QPushButton::clicked, this, MyWidget::onBtnClicked); // 方式2旧语法 connect(btn, SIGNAL(clicked()), SLOT(onBtnClicked())); // 方式3Lambda 表达式适用于简单逻辑 connect(btn, QPushButton::clicked, [](){ qDebug() 按钮被点击; });Label 使用// 创建文本标签 QLabel* label new QLabel(Hello, this); label-setGeometry(10, 10, 100, 30); // 创建图片标签 QLabel* imageLabel new QLabel(this); imageLabel-setPixmap(QPixmap(:/pic/image.png));获取控件并设置属性// 在 UI 类中ui 是 ui_mainwindow.h 生成的 ui-label-setText(新文本); ui-btn-setEnabled(true); ui-label-setStyleSheet(color: red;);添加资源图片// 方式1Qt 资源系统推荐 label-setPixmap(QPixmap(:/pic/folder/image.png)); // 方式2本地文件路径 label-setPixmap(QPixmap(D:/project/images/image.png));定时器使用// 创建定时器 QTimer* timer new QTimer(this); timer-setInterval(1000); // 1秒 // 连接信号 connect(timer, QTimer::timeout, this, MyWidget::onTimer); // 启动/停止 timer-start(); // timer-stop();窗口属性设置// 无边框窗口 setWindowFlags(Qt::FramelessWindowHint); // 置顶窗口 setWindowFlags(Qt::WindowStaysOnTopHint); // 透明背景 setAttribute(Qt::WA_TranslucentBackground); // 固定大小 setFixedSize(400, 300);样式表 QSS// 设置背景色 setStyleSheet(background-color: red;); // 设置按钮样式 btn-setStyleSheet(QPushButton { background-color: #3498db; color: white; border-radius: 5px; padding: 5px; } QPushButton:hover { background-color: #2980b9; });布局管理器// 垂直布局 QVBoxLayout* vLayout new QVBoxLayout(); vLayout-addWidget(widget1); vLayout-addWidget(widget2); setLayout(vLayout); // 水平布局 QHBoxLayout* hLayout new QHBoxLayout(); // 网格布局 QGridLayout* gridLayout new QGridLayout(); gridLayout-addWidget(widget, row, col); // 弹簧 vLayout-addStretch(); // 添加弹簧 vLayout-addSpacing(10); // 添加间距获取父控件// 获取父控件 QWidget* parent this-parentWidget(); // 转换类型 MyWidget* myParent qobject_castMyWidget*(this-parent());套路 设置控件位置widget-setGeometry(x, y, width, height); widget-move(x, y); widget-resize(width, height); widget-setFixedSize(width, height);字符串处理QString str Hello; // 拼接 QString full str World; QString full2 QString(%1 %2).arg(str).arg(World); // 转换 int num str.toInt(); QString numStr QString::number(123); // 判断 if(str.contains(ell)) { } if(str.startsWith(Hel)) { }列表遍历QListQString list; list a b c; // 方式1for 循环 for(int i 0; i list.count(); i) { qDebug() list[i]; } // 方式2foreach foreach(QString item, list) { qDebug() item; } // 方式3迭代器 for(auto it list.begin(); it ! list.end(); it) { qDebug() *it; }窗口标题和图标setWindowTitle(我的窗口); setWindowIcon(QIcon(:/pic/icon.png));鼠标光标设置setCursor(Qt::PointingHandCursor); // 手型 setCursor(Qt::ArrowCursor); // 箭头 setCursor(Qt::WaitCursor); // 等待窗口层级widget-raise(); // 移到最上层 widget-lower(); // 移到最下层

相关文章:

qt项目总结

绘制圆弧 文字组合(仪表盘)void paintEvent(QPaintEvent* event){Q_UNUSED(event);QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);// 1. 绘制背景圆弧painter.save();painter.setPen(QPen(QColor(255, 255, 255), 4));p…...

wan2.1-vae镜像免配置部署:supervisorctl一键管理+日志排查+端口诊断全流程

wan2.1-vae镜像免配置部署:supervisorctl一键管理日志排查端口诊断全流程 1. 平台介绍 muse/wan2.1-vae是基于Qwen-Image-2512模型的AI图像生成平台,它能够将文字描述转化为高质量的视觉图像。这个平台特别适合需要快速生成创意图像的设计师、内容创作…...

嵌入式多核C调度器上线即崩溃?紧急修复方案:3行__DMB指令+2个编译属性+1次TLB flush(已在STM32H753量产验证)

第一章:嵌入式多核C调度器上线即崩溃的典型现象与根因定位嵌入式多核系统中,C语言实现的轻量级调度器在首次启动(boot-up)阶段即发生硬故障(Hard Fault)、非法指令异常(UsageFault)或…...

c# 特性

1.c# 特性在 C# 中,特性 (Attributes) 是一种强大的机制,允许你将元数据(Metadata)声明性地附加到代码元素上(如类、方法、属性、参数、程序集等)。这些元数据可以在运行时通过反射 (Reflection) 读取&…...

威纶通触摸屏模板,直接打开就可以用,可根据自己要求修改, 威纶通触摸屏,全部图库

威纶通触摸屏模板,直接打开就可以用,可根据自己要求修改, 威纶通触摸屏,全部图库。刚拿到威纶通触摸屏项目的时候,最头疼的就是从零开始画界面。直到我发现他们家的官方模板库,简直像打开了新世界——直接解…...

Odoo 19 库存模块之期初库存导入概述

Odoo 19 库存模块期初库存概述 有效的库存管理对任何企业都至关重要,因为它直接影响运营、现金流和客户满意度。 对于正在实施 Odoo 19 或开启新会计期间的企业而言,设置准确的期初库存是库存管理中最基础、最关键的一步。 期初库存是指企业在新期间开始…...

运维人中间危机,我转型网安的逆袭之路,别慌有出路

2023年春节后的第一个工作日,我攥着9K的薪资条站在茶水间,看着新来的95后运维同事,他本科毕业两年,薪资却比我高3K。领导找我谈话时那句"基础运维岗位竞争太激烈",像一记闷棍敲醒了我。 我每天要重复着服务…...

最近在研究基于扰动观测器的直流电机调速系统,发现这玩意儿挺有意思的。先不说那些复杂的理论,直接上点干货,看看怎么用代码和仿真模型来实现这个系统

基于扰动观测器的直流电机调速系统, 有计算公式,仿真模型,仿真结果,ad电路图,程序首先,我们得有个直流电机的模型。假设电机的状态方程是这样的: % 电机状态方程 A [0 1; -k/J -b/J]; B [0; 1…...

Hot100-验证二叉搜索树

错误代码:/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {…...

MCP集成效率提升300%:基于VS Code 1.89+最新Extension API重构的轻量接入方案(仅需12行核心代码)

第一章:MCP集成效率提升300%:基于VS Code 1.89最新Extension API重构的轻量接入方案(仅需12行核心代码)VS Code 1.89 引入了全新的 vscode.mcp 模块与声明式注册机制,彻底替代了传统事件监听手动协议解析的冗余模式。开…...

JavaScript设计模式(一):单例模式实现与应用

先提出一个问题,为什么要学习设计模式? 难道是提出一个代码形容词,是为了让代码看起高大上 or 装逼? 先看下设计模式的定义:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。 我的个人理解就是&#xff…...

5.4.1 通信->WWW万维网内容访问标准(W3C):WWW(World Wide Web)基本信息核心设计目标现实意义

基本信息 全称:World Wide Web,简称 WWW、Web、万维网发明者:Tim Berners-Lee(蒂姆・伯纳斯 - 李)诞生时间:1989 年提出,1991 年正式发布核心机构:W3C(万维网联盟&#x…...

协作机器人厂商华沿启动招股:创始团队深耕行业逾20年,国际化进程提速

雷递网 雷建平 3月20日广东华沿机器人股份有限公司(简称:“华沿机器人”,股票代码为:“1021”)日前通过上市聆讯,准备2025年3月30日在港交所上市。华沿机器人今日开启招股,拟全球发售8078.5万股…...

嵌入式系统多核任务调度失效全解析(从Cache一致性崩溃到优先级反转的底层真相)

第一章:嵌入式系统多核任务调度失效全解析(从Cache一致性崩溃到优先级反转的底层真相)在多核嵌入式系统中,任务调度失效往往并非源于算法逻辑错误,而是根植于硬件行为与软件抽象之间的隐性鸿沟。当多个CPU核心共享L2/L…...

联邦学习后门攻击实战:如何用符号翻转绕过现有防御机制?

联邦学习安全攻防实战:符号翻转攻击的隐蔽渗透与防御策略 联邦学习作为分布式机器学习的前沿范式,正在医疗、金融等领域快速落地。但2023年AAAI会议的最新研究表明,一种名为"符号翻转"的新型后门攻击能有效穿透现有防御体系——当攻…...

嵌入式C语言编程规范:工程化实践与自动化落地

1. 嵌入式C语言编程规范的工程实践解析嵌入式系统开发中,代码质量远不止于功能正确性。在资源受限、可靠性要求严苛、维护周期长达十年以上的工业场景中,编程规范直接决定着项目的可维护性、可测试性与长期演进能力。本文不讨论“哪种风格更美观”&#…...

rosclean的使用:

ROS将节点的日志输出(如控制台消息、错误、警告等)存储在~/.ros/log/目录下。随着时间的推移,这些文件会占用大量磁盘空间。如何使用rosclean修复:ROS提供了一个便捷的命令行工具rosclean来管理这些日志。检查当前磁盘使用情况ros…...

漏洞扫描是怎么进行的?什么是漏洞扫描?

漏洞扫描是怎么进行的?什么是漏洞扫描? 漏洞扫描 一、漏洞扫描的含义 1.漏洞扫描是一种网络安全工具,用于检测计算机系统、网络设备和应用程序中存在的安全漏洞和漏洞。这些漏洞可能会被黑客利用,从而导致系统被入侵、数据泄露或…...

AD域策略实战:构建企业终端安全基线

1. 企业终端安全基线的核心价值 企业终端设备往往是安全防线中最薄弱的环节。根据Verizon《2023年数据泄露调查报告》,超过80%的安全事件始于终端设备。AD域策略作为企业IT管理的"中枢神经系统",能够将零散的安全配置转化为系统化的防御体系。…...

关于MiniMax token plan套餐购买优惠

minimax token plan目前作为性价比最高的大模型套餐,9折优惠邀请码链接:🚀 MiniMax Token Plan 惊喜上线!新增语音、音乐、视频和图片生成权益。邀请好友享双重好礼,助力开发体验! 好友立享 9折 专属优惠 …...

EMC工程师保命 Checklist

这是从经典EMC教材里扒出来的精华知识点,改了点工程师看得懂的人话,帮你在设计阶段就把坑踩完,别等到测试室里熬夜改到脱发。每条都是血的教训,打勾就行,别问为什么,问就是上次有人没做这个,改了三版才过认证。 一、PCB布局与布线篇:别让你的画板变成干扰的温床 1. 功…...

Java代码规范示例:用户管理实战

以下是一段符合Java编码规范的代码示例,实现了简单的用户信息管理功能,包含类定义、方法封装及注释规范:/*** 用户信息实体类,包含基础属性和操作逻辑* 遵循JavaBean规范,使用Lombok简化代码*/ Data AllArgsConstructo…...

漫画脸描述生成惊艳案例:水墨风角色+留白意境+题诗风格生成能力

漫画脸描述生成惊艳案例:水墨风角色留白意境题诗风格生成能力 1. 引言:当二次元遇见水墨风 你有没有想过,如果动漫角色穿上水墨画的衣裳,会是什么样子? 传统的二次元角色设计,我们见惯了日系萌系的明亮色…...

网安密码学是学啥的?黑客应用方向及方法,学了就业怎么样_网络空间安全专业学习密码学

网安密码学,或称网络安全中的密码学,是指在网络安全领域应用密码学的理论和技术来保护信息免受未授权访问和篡改。密码学是网络安全的一个重要组成部分,它涵盖了信息加密、身份验证、数据完整性和数字签名等多个方面。 密码学是什么&#xff…...

打卡信奥刷题(2989)用C++实现信奥题 P6093 [JSOI2015] 套娃

P6093 [JSOI2015] 套娃 题目背景 刚从俄罗斯旅游回来的 JYY 买了很多很多好看的套娃作为纪念品!JYY 由于太过激动,把所有的套娃全部都打开了。而由于很多套娃长得过于相像,JYY 现在不知道该如何把它们装回去了(他实在搞不清&…...

[C语言基础 关键字] const static volatile的作用

嵌入式软件开发高频面试题 文章目录一、关键字const二、关键字static1. 静态局部变量2. 静态全局变量或函数三、关键字volatile一、关键字const 声明一个不可修改的变量,即常量 const将变量声明为“只读”,初始化后不能再通过该变量名修改其值。 int …...

基于springboot3 vue3 设备管理系统 开发实践 文末 有免费的下载地址

博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…...

OpenClaw+GLM-4.7-Flash:低成本搭建个人AI客服原型

OpenClawGLM-4.7-Flash:低成本搭建个人AI客服原型 1. 为什么选择这个组合? 去年夏天,我负责一个小型开源项目的用户支持工作,每天要重复回答几十个相似的技术问题。当我尝试用传统聊天机器人解决这个问题时,发现要么…...

[特殊字符] 海外服最头疼的,其实不是推广

做海外游戏的都知道👇❌ 延迟高 ❌ 攻击频繁 ❌ 节点不稳定尤其是👇 刚跑量就被盯上直接打崩👉 这才是最亏的湘情盾游戏盾的优势👇✔ 海外节点覆盖 ✔ 智能调度线路 ✔ 抗大流量攻击不只是防护 更是“稳定出海”📩 私信…...

智能婴儿床的多模态感知与闭环控制设计

1. 项目概述智能婴儿床作为家庭健康监护系统的重要延伸,其设计目标并非简单叠加传感器与执行器,而是构建一个以婴儿生理节律和环境适应性为逻辑核心的闭环反馈系统。本项目采用双主控架构:STM32F103RCT6作为本地实时控制中枢,负责…...