(二)QT——按钮小程序

目录

前言

按钮小程序

1、步骤

2、代码示例

3、多个按钮

①信号与槽的一对一

②多对一(多个信号连接到同一个槽)

③一对多(一个信号连接到多个槽)

结论


前言


按钮小程序

Qt 按钮程序通常包含 三个核心文件

  • mainwindow.h:主窗口类的声明(定义按钮和槽函数)。
  • mainwindow.cpp:主窗口类的实现(创建按钮并连接信号与槽)。
  • main.cpp:程序入口(运行主窗口)。

在 Qt 中,创建一个简单的按钮小程序(GUI 程序)通常涉及使用 Qt Widgets 库来创建窗口和按钮,并处理按钮的点击事件。以下是一个基础的 Qt 小程序示例,展示如何创建一个带按钮的窗口:

1、步骤

  1. 创建项目:使用 Qt Creator 创建一个 Qt Widgets Application 项目。
  2. 设计界面:在 MainWindow 窗口中添加一个按钮。
  3. 处理事件:连接按钮的点击信号到槽函数,显示消息或者执行其他操作。

2、代码示例

1. mainwindow.ui(界面设计)

  • 打开 Qt Creator 中的 mainwindow.ui 文件,拖拽一个按钮(QPushButton)到窗口中。
2. mainwindow.cpp(功能实现)
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);// 设置按钮文本ui->pushButton->setText("点击我");// 连接按钮点击信号到槽函数connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::onButtonClicked);
}MainWindow::~MainWindow()
{delete ui;
}// 按钮点击槽函数
void MainWindow::onButtonClicked()
{// 弹出一个消息框QMessageBox::information(this, "提示", "苦瓜汤补钙!");
}
3. mainwindow.ui(界面设计)

在 Qt Creator 中使用拖放工具添加一个按钮,并确保按钮的 objectNamepushButton,然后连接信号和槽。

4. mainwindow.h(头文件)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onButtonClicked(); // 按钮点击的槽函数private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H

解释:

  • UI 文件:通过 Qt Creator 的设计器,我们可以直观地设计界面。按钮被命名为 pushButton,并通过信号与槽机制连接点击事件。
  • 槽函数:当按钮被点击时,onButtonClicked 槽函数会被触发,弹出一个消息框 (QMessageBox::information) 来显示提示信息。

构建与运行:

  1. 在 Qt Creator 中点击 编译 (Ctrl + B),然后点击 运行 (Ctrl + R)。
  2. 当窗口显示时,点击按钮会弹出消息框。

这就是一个简单的 Qt 按钮小程序。你可以根据需要修改按钮的行为和界面元素,Qt 提供了丰富的控件和功能,可以帮助你开发各种应用。


3、多个按钮

如果你的 Qt 小程序包含 多个按钮,你可以使用 多个槽函数 或者 使用 QObject::sender() 识别信号发送者 来动态处理多个按钮的点击事件。

注意:Qt的信号与槽机制,可以实现信号与槽的一对一、多对一和一对多。

①信号与槽的一对一

方法 1:为每个按钮创建独立的槽函数

如果每个按钮有不同的功能,你可以分别为它们创建槽函数。

修改 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onButton1Clicked();void onButton2Clicked();void onButton3Clicked();private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H

修改 mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);// 设置按钮文本ui->pushButton->setText("按钮 1");ui->pushButton_2->setText("按钮 2");ui->pushButton_3->setText("按钮 3");// 连接信号与槽connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::onButton1Clicked);connect(ui->pushButton_2, &QPushButton::clicked, this, &MainWindow::onButton2Clicked);connect(ui->pushButton_3, &QPushButton::clicked, this, &MainWindow::onButton3Clicked);
}MainWindow::~MainWindow()
{delete ui;
}// 定义槽函数
void MainWindow::onButton1Clicked()
{QMessageBox::information(this, "提示", "按钮 1 被点击!");
}void MainWindow::onButton2Clicked()
{QMessageBox::information(this, "提示", "按钮 2 被点击!");
}void MainWindow::onButton3Clicked()
{QMessageBox::information(this, "提示", "按钮 3 被点击!");
}

优点: 代码清晰,每个按钮的逻辑独立。
缺点: 如果按钮很多,代码会变得冗余。

方法 2:手动创建按钮

修改 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onButton1Clicked();  // 按钮1的槽函数void onButton2Clicked();  // 按钮2的槽函数private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

修改 mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPushButton>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 创建按钮 1QPushButton *pushButton1 = new QPushButton("按钮 1", this);pushButton1->setGeometry(50, 50, 100, 30);// 创建按钮 2QPushButton *pushButton2 = new QPushButton("按钮 2", this);pushButton2->setGeometry(50, 100, 100, 30);// 连接信号与槽connect(pushButton1, &QPushButton::clicked, this, &MainWindow::onButton1Clicked);connect(pushButton2, &QPushButton::clicked, this, &MainWindow::onButton2Clicked);
}MainWindow::~MainWindow()
{delete ui;
}// 按钮 1 处理函数
void MainWindow::onButton1Clicked()
{qDebug() << "按钮 1 被点击";
}// 按钮 2 处理函数
void MainWindow::onButton2Clicked()
{qDebug() << "按钮 2 被点击";
}
运行步骤
  1. 在 Qt Creator 中创建 Qt Widgets 应用程序
  2. 替换 mainwindow.hmainwindow.cppmain.cpp
  3. 点击 Ctrl + R 运行
  4. 点击按钮,观察 Application Output 窗口:

修改 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QMessageBox>  // 添加 QMessageBox 头文件
#include <QPushButton>  // 添加 QPushButton 头文件QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onButton1Clicked();  // 按钮 1 槽函数void onButton2Clicked();  // 按钮 2 槽函数void onButton3Clicked();  // 按钮 3 槽函数private:Ui::MainWindow *ui;QPushButton *pushButton1;QPushButton *pushButton2;QPushButton *pushButton3;
};
#endif // MAINWINDOW_H

修改 mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 创建按钮 1pushButton1 = new QPushButton("按钮 1", this);pushButton1->setGeometry(50, 50, 150, 40);// 创建按钮 2pushButton2 = new QPushButton("按钮 2", this);pushButton2->setGeometry(50, 120, 150, 40);// 创建按钮 3pushButton3 = new QPushButton("按钮 3", this);pushButton3->setGeometry(50, 190, 150, 40);// 连接按钮信号到槽函数connect(pushButton1, &QPushButton::clicked, this, &MainWindow::onButton1Clicked);connect(pushButton2, &QPushButton::clicked, this, &MainWindow::onButton2Clicked);connect(pushButton3, &QPushButton::clicked, this, &MainWindow::onButton3Clicked);
}MainWindow::~MainWindow()
{delete ui;
}// 按钮 1 槽函数
void MainWindow::onButton1Clicked()
{QMessageBox::information(this, "提示", "按钮 1 被点击!");
}// 按钮 2 槽函数
void MainWindow::onButton2Clicked()
{QMessageBox::information(this, "提示", "按钮 2 被点击!");
}// 按钮 3 槽函数
void MainWindow::onButton3Clicked()
{QMessageBox::information(this, "提示", "按钮 3 被点击!");
}

②多对一(多个信号连接到同一个槽)

场景:多个按钮触发同一个槽函数
多个 QPushButton 连接到同一个 clicked() 槽函数,槽函数可以区分是哪个按钮触发的。

QtButtonApp/
│── main.cpp
│── mainwindow.h
│── mainwindow.cpp
│── mainwindow.ui  (如果使用 UI 设计)
│── QtButtonApp.pro

  1. 使用 QSignalMapper(Qt5 可用)或 lambda 表达式(推荐 Qt6)
    • 让多个按钮的 clicked() 信号映射到同一个槽函数,并传递不同的参数
  2. sender() 自动识别哪个按钮触发
    • 通过 QObject::sender() 获取信号来源(触发的按钮)。
    • 获取按钮 text() 或者 objectName() 来区分。

修改 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton>
#include <QMap>  // 用于存储按钮QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onAnyButtonClicked();  // ✅ 多对一的槽函数private:Ui::MainWindow *ui;QMap<QPushButton*, QString> buttonMap;  // 按钮映射(用于存储按钮和它们的名称)
};
#endif // MAINWINDOW_H

修改 mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// ✅ 统一创建多个按钮,并存入 QMap 进行管理QStringList buttonNames = {"按钮 1", "按钮 2", "按钮 3"};int y = 50;for (const QString &name : buttonNames) {QPushButton *button = new QPushButton(name, this);button->setGeometry(50, y, 100, 40);  // 设置按钮位置y += 50;buttonMap[button] = name;  // 记录按钮和它的名称// ✅ 连接所有按钮到**同一个槽函数**(多对一)connect(button, &QPushButton::clicked, this, &MainWindow::onAnyButtonClicked);}
}MainWindow::~MainWindow()
{delete ui;
}// ✅ **多对一的槽函数**
void MainWindow::onAnyButtonClicked()
{QPushButton *button = qobject_cast<QPushButton*>(sender());  // 获取触发的按钮if (button && buttonMap.contains(button)){QMessageBox::information(this, "按钮点击", buttonMap[button] + " kgtbg!");}
}

③一对多(一个信号连接到多个槽)

"一对多" 是指 一个信号 连接到多个 槽函数,而不是多个信号连接到一个槽函数。在 Qt 中可以轻松实现这种一对多的机制

  1. 创建一个信号,并连接到多个槽函数
  2. 每个槽函数根据需要处理这个信号。

修改 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton>
#include <QMessageBox>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onSlot1();void onSlot2();void onSlot3();private:Ui::MainWindow *ui;QPushButton *button;
};
#endif // MAINWINDOW_H

修改 mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 创建按钮button = new QPushButton("点击按钮", this);button->setGeometry(50, 50, 120, 40);// 直接连接按钮的 clicked 信号到多个槽函数connect(button, &QPushButton::clicked, this, &MainWindow::onSlot1);connect(button, &QPushButton::clicked, this, &MainWindow::onSlot2);connect(button, &QPushButton::clicked, this, &MainWindow::onSlot3);
}MainWindow::~MainWindow()
{delete ui;
}// 槽1
void MainWindow::onSlot1()
{QMessageBox::information(this, "槽1", "槽1 被触发!");
}// 槽2
void MainWindow::onSlot2()
{QMessageBox::information(this, "槽2", "槽2 被触发!");
}// 槽3
void MainWindow::onSlot3()
{QMessageBox::information(this, "槽3", "槽3 被触发!");
}

如果你想 点击按钮后一次性显示多个信息框,可以用 QMessageBox::information() 直接串联多个调用,也可以用 QMessageBoxexec() 方法让多个消息框同时显示。

方式 1:使用 QMessageBox::information() 串联

一次性弹出多个消息框(但用户需要手动关闭每个消息框)

void MainWindow::onButtonClicked()
{QMessageBox::information(this, "提示", "槽1 被触发!");QMessageBox::information(this, "提示", "槽2 被触发!");QMessageBox::information(this, "提示", "槽3 被触发!");
}

这种方式需要逐个点击“确定”关闭消息框,才能显示下一个。

方式 2:使用 QMessageBox 并行显示多个对话框

一次性显示多个信息框,不用逐个关闭

void MainWindow::onButtonClicked()
{QMessageBox *msgBox1 = new QMessageBox(QMessageBox::Information, "提示", "槽1 被触发!", QMessageBox::Ok, this);QMessageBox *msgBox2 = new QMessageBox(QMessageBox::Information, "提示", "槽2 被触发!", QMessageBox::Ok, this);QMessageBox *msgBox3 = new QMessageBox(QMessageBox::Information, "提示", "槽3 被触发!", QMessageBox::Ok, this);msgBox1->show();msgBox2->show();msgBox3->show();
}

这样可以同时显示多个消息框,用户可以自由关闭,不需要等待一个一个弹出。

方式 3:在一个窗口显示所有信息

如果你不想弹出多个窗口,而是在一个窗口内显示所有信息

void MainWindow::onButtonClicked()
{QString message = "槽1 被触发!\n槽2 被触发!\n槽3 被触发!";QMessageBox::information(this, "提示", message);
}

下面是一个 完整的 Qt 按钮小程序,包含 一个按钮,点击后会 一次性显示多个信息(方式 3)。

  • 创建 Qt 项目(Qt Widgets Application)。
  • 复制粘贴 mainwindow.hmainwindow.cppmain.cpp 代码。
  • 编译运行,点击按钮即可看到 一个弹窗 显示多个信息。

修改 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QPushButton>
#include <QMessageBox>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void onButtonClicked(); // 按钮点击槽函数private:Ui::MainWindow *ui;QPushButton *button; // 按钮指针
};
#endif // MAINWINDOW_H

修改 mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 创建按钮button = new QPushButton("点击我", this);button->setGeometry(100, 100, 100, 50); // 设定按钮位置// 连接信号和槽connect(button, &QPushButton::clicked, this, &MainWindow::onButtonClicked);
}MainWindow::~MainWindow()
{delete ui;
}// 按钮点击事件
void MainWindow::onButtonClicked()
{// 方式 3:一次性显示多个信息QString message = "槽1 被触发!\n槽2 被触发!\n槽3 被触发!";QMessageBox::information(this, "提示", message);
}

这样不会弹出多个窗口,体验更好!


结论

Qt 按钮程序主要使用 QPushButton 和信号槽机制
支持一对一、多对一和一对多的信号槽连接
可以创建多个按钮,并让它们共享同一个槽
可以让一个按钮触发多个槽,执行多个操作

🚀 Qt 的按钮程序灵活且强大,适用于多种 GUI 应用场景!

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

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

相关文章

win11本地部署 DeepSeek-R1 大模型!免费开源,媲美OpenAI-o1能力,断网也能用

一、下载ollama 二、安装ollama 三、部署DeepSeek-R1 在cmd窗口中先输入ollama -v查看ollama是否安装成功&#xff0c;然后直接运行部署deepseek-r1的命令 ollama run deepseek-r1&#xff0c;出现下面界面即为安装成功。 C:\Users\admin>ollama -v ollama version is 0.5…

蓝桥杯例题六

奋斗是一种态度&#xff0c;也是一种生活方式。无论我们面对什么样的困难和挑战&#xff0c;只要心怀梦想&#xff0c;坚持不懈地努力&#xff0c;就一定能够迈向成功的道路。每一次失败都是一次宝贵的经验&#xff0c;每一次挫折都是一次锻炼的机会。在困难面前&#xff0c;我…

【工欲善其事】利用 DeepSeek 实现复杂 Git 操作:从原项目剥离出子版本树并同步到新的代码库中

文章目录 利用 DeepSeek 实现复杂 Git 操作1 背景介绍2 需求描述3 思路分析4 实现过程4.1 第一次需求确认4.2 第二次需求确认4.3 第三次需求确认4.4 V3 模型&#xff1a;中间结果的处理4.5 方案验证&#xff0c;首战告捷 5 总结复盘 利用 DeepSeek 实现复杂 Git 操作 1 背景介绍…

B+ 树的实现原理与应用场景

B 树是如何实现的全面分析 在进行数据库和文件系统的设计中&#xff0c;B 树是一种常用的数据结构。它不仅是 B 树的延伸&#xff0c;而且团结了性能优化和实现上的优势。本文将从学术理论和实现程序的角度&#xff0c;分析 B 树是如何实现的&#xff0c;以及它依赖于哪些具体…

TensorFlow 示例摄氏度到华氏度的转换(一)

TensorFlow 实现神经网络模型来进行摄氏度到华氏度的转换&#xff0c;可以将其作为一个回归问题来处理。我们可以通过神经网络来拟合这个简单的转换公式。 1. 数据准备与预处理 2. 构建模型 3. 编译模型 4. 训练模型 5. 评估模型 6. 模型应用与预测 7. 保存与加载模型 …

gitea - fatal: Authentication failed

文章目录 gitea - fatal: Authentication failed概述run_gitea_on_my_pkm.bat 笔记删除windows凭证管理器中对应的url认证凭证启动gitea服务端的命令行正常用 TortoiseGit 提交代码备注END gitea - fatal: Authentication failed 概述 本地的git归档服务端使用gitea. 原来的用…

【深度解析】DeepSeek-R1的五大隐藏提示词

LangChain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

基于RAG的知识库问答系统

基于RAG的知识库问答系统 结合语义检索与大语言模型技术&#xff0c;实现基于私有知识库的智能问答解决方案。采用两阶段处理架构&#xff0c;可快速定位相关文档并生成精准回答。 核心功能 知识向量化引擎 支持多语言文本嵌入&#xff08;all-MiniLM-L6-v2模型&#xff09;自…

Windsurf cursor vscode+cline 与Python快速开发指南

Windsurf简介 Windsurf是由Codeium推出的全球首个基于AI Flow范式的智能IDE&#xff0c;它通过强大的AI助手功能&#xff0c;显著提升开发效率。Windsurf集成了先进的代码补全、智能重构、代码生成等功能&#xff0c;特别适合Python开发者使用。 Python环境配置 1. Conda安装…

MySql运维篇---008:日志:错误日志、二进制日志、查询日志、慢查询日志,主从复制:概述 虚拟机更改ip注意事项

#先登录mysql mysql -uroot -p1234#通过此系统变量&#xff0c;查看当前mysql的版本中默认的日志格式是哪个 show variables like %binlog\_format%;1.2.3 查看 由于日志是以二进制方式存储的&#xff0c;不能直接读取&#xff0c;需要通过二进制日志查询工具 mysqlbinlog 来查…

踏入编程世界的第一个博客

我&#xff0c;一个双非一本大一新生&#xff0c;普通的不能再普通了&#xff0c;面对宏伟庞大的计算机世界仍显得举手无措&#xff0c;我自以为自身仍有些许骨气&#xff0c;不想普普通通&#xff0c;甚是浑浑噩噩的度过四年大学&#xff0c;经历了高考的打击&#xff0c;双非…

【背包问题】二维费用的背包问题

目录 二维费用的背包问题详解 总结&#xff1a; 空间优化&#xff1a; 1. 状态定义 2. 状态转移方程 3. 初始化 4. 遍历顺序 5. 时间复杂度 例题 1&#xff0c;一和零 2&#xff0c;盈利计划 二维费用的背包问题详解 前面讲到的01背包中&#xff0c;对物品的限定条件…

使用 DeepSeek-R1 等推理模型将 RAG 转换为 RAT,以实现更智能的 AI

使用 DeepSeek-R1 等推理模型将 RAG 转换为 RAT&#xff0c;以实现更智能的 AI 传统的检索增强生成&#xff08;RAG&#xff09;系统在生成具备上下文感知的答案方面表现出色。然而&#xff0c;它们往往存在以下不足&#xff1a; 精确性不足&#xff1a;单次推理可能会忽略复杂…

自然语言处理-词嵌入 (Word Embeddings)

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 词嵌入&#xff08;Word Embedding&#xff09;是一种将单词或短语映射到高维向量空间的技术&#xff0c;使其能够以数学方式表示单词之间的关系。词嵌入能够捕捉语义信息&#xff0c;使得相似的词在向量空间中具有…

小红的合数寻找

A-小红的合数寻找_牛客周赛 Round 79 题目描述 小红拿到了一个正整数 x&#xff0c;她希望你在 [x,2x] 区间内找到一个合数&#xff0c;你能帮帮她吗&#xff1f; 一个数为合数&#xff0c;当且仅当这个数是大于1的整数&#xff0c;并且不是质数。 输入描述 在一行上输入一…

笔灵ai写作技术浅析(三):深度学习

笔灵AI写作的深度学习技术主要基于Transformer架构,尤其是GPT(Generative Pre-trained Transformer)系列模型。 1. Transformer架构 Transformer架构由Vaswani等人在2017年提出,是GPT系列模型的基础。它摒弃了传统的循环神经网络(RNN)和卷积神经网络(CNN),完全依赖自…

IM 即时通讯系统-50-[特殊字符]cim(cross IM) 适用于开发者的分布式即时通讯系统

IM 开源系列 IM 即时通讯系统-41-开源 野火IM 专注于即时通讯实时音视频技术&#xff0c;提供优质可控的IMRTC能力 IM 即时通讯系统-42-基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统 IM 即时通讯系统-43-简单的仿QQ聊天安卓APP IM 即时通讯系统-44-仿QQ即…

Zemax 中带有体素探测器的激光谐振腔

激光谐振腔是激光系统的基本组成部分&#xff0c;在光的放大和相干激光辐射的产生中起着至关重要的作用。 激光腔由两个放置在光学谐振器两端的镜子组成。一个镜子反射率高&#xff08;后镜&#xff09;&#xff0c;而另一个镜子部分透明&#xff08;输出耦合器&#xff09;。…

mac连接linux服务器

1、mac连接linux服务器 # ssh -p 22 root192.168.1.152、mac指定密码连接linux服务器 (1) 先安装sshpass,下载后解压执行 ./configure && make && makeinstall https://sourceforge.net/projects/sshpass/ (2) 连接linux # sshpass -p \/\\\[\!\\wen12\$ s…

17.2 图形绘制4

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 17.2.5 线条样式 C#为画笔绘制线段提供了多种样式&#xff1a;一是线帽&#xff08;包括起点和终点处&#xff09;样式&#xff1b…