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

qt实践教学(编写一个代码生成工具)持续更新至完成———

前言:

我的想法是搭建一个和STM32cubemux类似的图形化代码生成工具,可以把我平时用到的代码整合一下全部放入这个软件中,做一个我自己专门的代码生成工具,我初步的想法是在下拉选框中拉取需要配置的功能,然后就弹出对应的脚位图,只需要点击芯片上的脚位就可以配置对应的端口的功能,大家有好的建议欢迎指正。本工具实时更新到完成为止,我会实时更新进度和制作中遇到的问题和想法。

1.界面编写

界面大概框架布局,

界面的搭建可以参考下面链接的教程

第一部分 学习Qt必备知识 · Qt 快速入门系列教程

  • 搭建好后,首先实现新建文件,保存文件,打开文件对应的功能。

选择新建动作,右击点击转到槽

选择triggered()//触发时机:当用户通过点击、快捷键等方式显式触发动作时(例如点击菜单项或工具栏按钮)

会在mainwindow.cpp自动生成一个槽函数

我们在该该函数里写上新建的代码

void MainWindow::on_action_N_triggered()
{// 弹出文件对话框,让用户选择保存路径和文件名QString fileName = QFileDialog::getSaveFileName(this,"保存文件",QDir::homePath(),  // 默认保存到用户主目录"文本文件 (*.c);;所有文件 (*)");if (fileName.isEmpty()) {QMessageBox::warning(this, "警告", "未选择文件名!");return;}// 使用 QFile 创建文件QFile file(fileName);if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {QTextStream stream(&file);stream << "这是一个新创建的文件\n";  // 写入初始内容file.close();QMessageBox::information(this, "成功", "文件已创建:" + fileName);} else {QMessageBox::critical(this, "错误", "无法创建文件:" + fileName);}}

就实现了新建的功能

然后实现保存功能

点击保存动作右击转到槽

选择triggered()

在槽函数里写上保存的代码,现在保存的是TextEdit控件中的文本,之后再进行调整

void MainWindow::on_saveButton_clicked()
{// 弹出文件保存对话框QString fileName = QFileDialog::getSaveFileName(this,"保存文件",QDir::homePath(),"文本文件 (*.txt);;所有文件 (*)");if (fileName.isEmpty()) {QMessageBox::warning(this, "警告", "未选择保存路径!");return;}// 打开文件并写入 QTextEdit 的内容QFile file(fileName);if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {QTextStream stream(&file);stream << ui->textEdit->toPlainText();  // 获取 QTextEdit 的文本内容file.close();QMessageBox::information(this, "成功", "文件已保存!");} else {QMessageBox::critical(this, "错误", "无法保存文件!");}
}

我们先来设置主要的功能,就是点击配置选项的多选框,自动弹出芯片,并标出可选配置的脚位

下拉选项条转到槽填上以下代码

弹出窗口,和窗口自动跟随主窗口

void MainWindow::on_comboBox_activated(int index)//芯片选择
{// 获取当前选项的图片路径标识QString imageName = ui->comboBox->itemData(index).toString();// 假设图片存放在可执行文件同级目录的 images 文件夹下QString imagePath = ":/myimages/MCU/" + imageName;// 加载图片QPixmap pixmap(imagePath);if (pixmap.isNull()) {qDebug() << "无法加载图片:" << imagePath;ui-> picture->setText("图片加载失败");return;}// 显示图片(自动缩放适应 QLabel)ui->picture->setPixmap(pixmap.scaled(ui->picture->size(), Qt::KeepAspectRatio));
}

然后初始化下拉框的值

 ui->comboBox->addItem("SC8P052", "SC8P052.png");ui->comboBox->addItem("SC8P054", "SC8P054.png");ui->comboBox->addItem("SC8P054_16A", "SC8P054_16A.png");ui->comboBox->addItem("SC8P062BD", "SC8P062BD.png");ui->comboBox->addItem("SC8P062BD_14A", "SC8P062BD_14A.png");ui->comboBox->addItem("SC8P8022D", "SC8P8022D.png");ui->comboBox->addItem("SC8P8122", "SC8P8122.png");ui->comboBox->addItem("MC30P6250", "MC30P6250.png");ui->comboBox->addItem("MC30P6280", "MC30P6280.png");ui->comboBox->addItem("P02", "P02.png");ui->comboBox->addItem("P04", "P04.png");ui->comboBox->addItem("SC8F073", "SC8F073.png");ui->comboBox->addItem("SC8F073_16A", "SC8F073_16A.png");

这是导入的图片文件

如何导入看这篇文章

Qt--导入整个目录的资源_现成的qt项目文件怎么导入进去-CSDN博客

我的设置完后,选择哪个芯片就会弹出对应的芯片脚位图

但是出来的图片有些模糊,可能是拉伸的比列不对,直接显示在界面上也有点占空间,我们把它变为浮窗的模式,下面是没有修改前的模式

 创建一个新的界面,用来显示浮窗

FloatImageDialog.h.h文件

#ifndef FLOATIMAGEDIALOG_H
#define FLOATIMAGEDIALOG_H#include <QDialog>
#include <QLabel>
#include <QPixmap>class FloatImageDialog : public QDialog
{Q_OBJECTpublic:explicit FloatImageDialog(const QString &imagePath, QWidget *parent = nullptr);~FloatImageDialog();
private:QLabel *imageLabel;  // 用于显示图片的标签
};#endif // FLOATIMAGEDIALOG_H
FloatImageDialog.cpp文件
#include "FloatImageDialog.h"
#include <QVBoxLayout>
#include <QPushButton>
#include <QMouseEvent>  //
FloatImageDialog::FloatImageDialog(const QString &imagePath, QWidget *parent): QDialog(parent)
{// 设置窗口属性:无边框、置顶、透明背景(可选)setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);setAttribute(Qt::WA_TranslucentBackground);  // 如果需要透明背景// 加载图片QPixmap pixmap(imagePath);if (pixmap.isNull()) {qDebug() << "无法加载图片:" << imagePath;return;}// 创建控件imageLabel = new QLabel(this);imageLabel->setPixmap(pixmap.scaled(400, 400, Qt::KeepAspectRatio, Qt::SmoothTransformation));// 可选:添加关闭按钮QPushButton *closeButton = new QPushButton("关闭", this);connect(closeButton, &QPushButton::clicked, this, &FloatImageDialog::close);// 布局QVBoxLayout *layout = new QVBoxLayout(this);layout->addWidget(imageLabel);layout->addWidget(closeButton);
}FloatImageDialog::~FloatImageDialog() {}void FloatImageDialog::mousePressEvent(QMouseEvent *event)
{if (event->button() == Qt::LeftButton) {dragPosition = event->globalPos() - frameGeometry().topLeft();event->accept();}
}void FloatImageDialog::mouseMoveEvent(QMouseEvent *event)
{if (event->buttons() & Qt::LeftButton) {move(event->globalPos() - dragPosition);event->accept();}
}

主函数MainWindow.h中加入头文件

#include "FloatImageDialog.h"  // 包含自定义对话框头文件

转到用来隐藏显示MCU的槽函数

写入以下代码

   if (!floatDialog) {// 创建浮动窗口(传入图片资源路径)floatDialog = new FloatImageDialog(":/images/SC8P052.png", this);floatDialog->show();} else {// 关闭并释放浮动窗口floatDialog->close();delete floatDialog;floatDialog = nullptr;}

实现了芯片图片在另一个窗口显示并可以拖动

给它初始化固定在右侧,用以下代码时不要忘记头文件#include <QScreen>

void MainWindow::onToggleFloatWindow()
{if (!floatDialog) {// 创建浮动窗口floatDialog = new FloatImageDialog(":/images/SC8P052.png", this);// 获取主窗口的屏幕位置和尺寸QRect mainGeometry = this->geometry();// 计算浮动窗口的初始位置(主窗口右侧 + 10 像素)int x = mainGeometry.right() + 10;int y = mainGeometry.top();// 获取屏幕的可用区域(避免窗口超出屏幕)QScreen *screen = QGuiApplication::primaryScreen();QRect screenGeometry = screen->availableGeometry();// 如果浮动窗口超出屏幕右侧,调整到屏幕边缘int maxX = screenGeometry.right() - floatDialog->width();if (x > maxX) {x = maxX;}// 设置浮动窗口位置floatDialog->move(x, y);floatDialog->show();} else {// 关闭并释放浮动窗口floatDialog->close();delete floatDialog;floatDialog = nullptr;}
}

窗口跟随移动

// MainWindow.h
protected:void moveEvent(QMoveEvent *event) override;// MainWindow.cpp
void MainWindow::moveEvent(QMoveEvent *event)
{QMainWindow::moveEvent(event);if (floatDialog) {// 主窗口移动时更新浮动窗口位置QRect mainGeometry = geometry();int x = mainGeometry.right() + 10;int y = mainGeometry.top();floatDialog->move(x, y);}
}

加更:

对界面进行了修改

原本想的是MCU选型完之后,根据不同的芯片,引脚的不同,跳转出相应的芯片,然后发现有点麻烦,我现在是直接把最大引脚的芯片放上来,如果是八脚的芯片就只用看上半部分,之后如果有时间再进行优化,现在的首要任务是把程序的功能先给实现。

我们新建一个专门用来填写,可以选择引脚功能的一个类。为了实现方便扩展,我们还要建一个读取文件的类,负责把各种芯片的引脚信息放在里面,程序来读取不同芯片引脚的功能。

文件读取类

cpp文件:

#include "FileHandler.h"
#include <QFile>
#include <QTextStream>
#include <QCoreApplication>FileHandler::FileHandler(QObject *parent) : QObject(parent)
{// 构造函数初始化(可留空)<button class="citation-flag" data-index="7">
}QString FileHandler::readTextFile(const QString &filePath)
{QFile file(filePath);if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {qWarning() << "读取失败:" << file.errorString();  // 错误处理 <button class="citation-flag" data-index="6">return QString();}QTextStream in(&file);QString content = in.readAll();  // 读取全部内容 <button class="citation-flag" data-index="5">file.close();return content;
}bool FileHandler::writeTextFile(const QString &filePath, const QString &content)
{QFile file(filePath);if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {emit writeCompleted(false);  // 触发信号 <button class="citation-flag" data-index="6">return false;}QTextStream out(&file);out << content;  // 写入内容 <button class="citation-flag" data-index="5">file.close();emit writeCompleted(true);return true;
}

.h文件

#ifndef FILEHANDLER_H
#define FILEHANDLER_H#include <QObject>
#include <QString>
#include <QByteArray>class FileHandler : public QObject
{Q_OBJECTpublic:explicit FileHandler(QObject *parent = nullptr);// 同步读取文本文件static QString readTextFile(const QString &filePath);  // 声明静态方法 <button class="citation-flag" data-index="4">// 异步写入文件(带信号)bool writeTextFile(const QString &filePath, const QString &content);signals:void writeCompleted(bool success);  // 自定义信号 <button class="citation-flag" data-index="6">private:// 可添加私有辅助方法
};#endif // FILEHANDLER_H

使用

 QString data = FileHandler::readTextFile(":/MCU/DATA/MCU_IO/SC8P052.txt");qDebug() << "文件内容:" << data;

文件格式定义:

我们把芯片每个引脚的功能按以下格式写入txt文件。

PIN 16
P01 VDD
P02 RB0 CMP2- OSCIN AN8 PWMD0 
P03 RB1 CMP1- OSCOUT AN9 PWMB4 PWMD1
P04 RB2 AN10 PWMB3 PWMD4
P05 RB3 AN11 PWMD2
P06 RB4 AN12 PWMC4 PWMD3
P07 RB5 PWMC3 AN13 
P08 RB6 PWMC2 AN14
P09 RB7 AN15 PWMC1
P10 RA5 AN5 PWMC0
P11 RA4 AN4 PWMA4
P12 RA3 AN3 PWMA3
P13 RA2 AN2 PWMA2 PWMB2 CMP0-
P14 RA1 AN1 PWMA1 PWMB1 CMP+ CMP3
P15 RA0 AN0 PWMA0 PWMB0 CMPO INT
P16 GND
 QString data = FileHandler::readTextFile(":/MCU/DATA/MCU_IO/"+imagePath+".txt");qDebug() << "文件内容:" << data;

把这串代码放入槽函数中

在调试窗口可以看到文件正常的读出

现在我们要做的是把读到的文件,放入到数组当中,然后把数组里的每个引脚的可以设置的功能写到相应的combobox当中。

在调试的工程中,发现在别的类当中无法直接操作combobox,所以转来转去最后还是把操作combobox的代码写在了mainwindow当中,原本想直接在另外一个类中实现的,现在是通过信号和槽函数进行链接。

代码编写

主函数里加入的代码

mainwindow.cpp

// MainWindow.cpp
void MainWindow::parsePinData(const QString &data) {clearAllComboboxes();QStringList lines = data.split('\n', Qt::SkipEmptyParts);int pin = 0;QMap<QString, QString> pinMap;foreach (const QString &line, lines) {if (line.startsWith("PIN")) {QRegularExpression rx("PIN (\\d+)");QRegularExpressionMatch match = rx.match(line);if (match.hasMatch()) {pin = match.captured(1).toInt();pinMap = getPinMap(pin);}} else {QStringList parts = line.split(' ', Qt::SkipEmptyParts);if (parts.size() < 2) continue;QString srcPin = parts[0];QStringList items = parts.mid(1);QString targetPin = pinMap.value(srcPin, "");if (targetPin.isEmpty()) continue;// 直接访问 MainWindow 的控件QComboBox *combo = findChild<QComboBox*>(targetPin);if (combo) {combo->clear();combo->addItems(items);}}}
}void MainWindow::clearAllComboboxes() {QList<QComboBox*> combos = findChildren<QComboBox*>();foreach (QComboBox *combo, combos) {if (combo->objectName().startsWith("P")) {combo->clear();}}
}QMap<QString, QString> MainWindow::getPinMap(int pin) {QMap<QString, QString> map;if (pin == 8) {map = {{"P01", "P01"}, {"P02", "P02"}, {"P03", "P03"}, {"P04", "P04"},{"P05", "P13"}, {"P06", "P14"}, {"P07", "P15"}, {"P08", "P06"}};} else if (pin == 14) {map = { /* ... */ };} else if (pin == 16) {for (int i = 1; i <= 16; ++i) {QString key = QString("P%1").arg(i, 2, 10, QLatin1Char('0'));map[key] = key;}}return map;
}
// MainWindow.h
public: // 或 public slots:void parsePinData(const QString &data);

 ConfigComboBox.cpp

void ConfigComboBox::setcombobox(QString &imageName)
{// if(imagePath=="SC8P052")// {// 同步读取QString data = FileHandler::readTextFile(":/MCU/DATA/MCU_IO/"+imageName+".txt");emit requestParsePinData(data);//信号// ConfigComboBox::parsePinData(data);qDebug() << "文件内容:" << data;// emit updateP01(data); // 触发信号//ui->P01->addItem("New Item");// ui->P01->addItem("New Item");// ui->P01->addItem("New Item");// }}

 ConfigComboBox.h

#ifndef CONFIGCOMBOBOX_H
#define CONFIGCOMBOBOX_H
#include <QComboBox>
#include "ui_mainwindow.h"
#include <QMap>class ConfigComboBox : public QComboBox
{Q_OBJECTpublic:explicit ConfigComboBox(QWidget *parent = nullptr, Ui::MainWindow *mainUI = nullptr);  void setcombobox(QString &imagePath);/
signals:void requestParsePinData(const QString &data);//信号声明private slots:private:};
#endif // CONFIGCOMBOBOX_H

其实 可以不用ConfigComboBox这个类了,原本我是想脚位的设置放在该类中实现的,但是发现别的类调用ui界面的控件很麻烦,所以把代码又放到mainwindow里面去了,ConfigComboBox里面就处理了以下文件,然后触发信号回到mainwindow,可以不加这个类,我这里先不删除了。

弄完这些后我们实现了选择芯片后,对应的脚位上显示出该脚位可以配置的功能,下面是示例

点击选择芯片,选择完后会出先每个脚位可选功能

效果:

接下来实现的功能是点击对应的功能,弹出配置界面,进行配置。

持续更新中————————

相关文章:

qt实践教学(编写一个代码生成工具)持续更新至完成———

前言&#xff1a; 我的想法是搭建一个和STM32cubemux类似的图形化代码生成工具&#xff0c;可以把我平时用到的代码整合一下全部放入这个软件中&#xff0c;做一个我自己专门的代码生成工具&#xff0c;我初步的想法是在下拉选框中拉取需要配置的功能&#xff0c;然后就弹出对…...

【数据结构】什么是栈||栈的经典应用||分治递归||斐波那契问题和归并算法||递归实现||顺序栈和链栈的区分

文章目录 &#x1f967;栈的初步理解&#xff1a;&#x1f967;易错&#xff1a;如何判断栈满&#x1f967;栈满理解&#x1f967;栈的基本运算&#x1f4da;栈操作的伪代码逻辑&#xff08;顺序和链栈&#xff09;&#x1f4d5;顺序栈运算实现&#xff1a;顺序栈的表示&#x…...

vue3(笔记)4.0 vueRouter.导航守卫.ElementPuls知识点

---vueRouter 创建路由: 完整写法(懒加载): 默认写法与vue2一致: 导入 然后 写成component: LoginPage import { createRouter, createWebHistory } from vue-routerconst router createRouter({history: createWebHistory(import.meta.env.BASE_URL), routes: [{path:/lo…...

[数字图像处理]实验三:直方图增强

目录 一、实验目的 二、实验原理 三、实验内容&#xff08;附代码&#xff09; 四、实验结果及分析 五、实验小结 一、实验目的 1.了解图像增强的意义和目的 2.掌握各种图像增强的基本原理和方法 3.使用MATLAB实现图像增强 二、实验原理 图像增强方法从增强的作用域…...

图像分类项目1:基于卷积神经网络的动物图像分类

1、选题背景及动机 在现代社会中&#xff0c;图像分类是计算机视觉领域的一个重要任务。动物图像分类具有广泛的应用&#xff0c;例如生态学研究、动物保护、农业监测等。通过对动物图像进行自动分类&#xff0c;可以帮助人们更好地了解动物种类、数量和分布情况&#xff0c;从…...

并发编程(线程池)面试题及原理

1. 执行原理/核心参数 1.1 核心参数 核心参数 corePoolSize 核心线程数目maximumPooISize 最大线程数目 &#xff08;核心线程&#xff0b;救急线程的最大数目&#xff09;keepAliveTime 生存时间- 救急线程的生存时间&#xff0c;生存时间内没有新任务&#xff0c;此线程资…...

初次使用 IDE 搭配 Lombok 注解的配置

前言 在 Java 开发的漫漫征程中&#xff0c;我们总会遇到各种提升效率的工具。Lombok 便是其中一款能让代码编写变得更加简洁高效的神奇库。它通过注解的方式&#xff0c;巧妙地在编译阶段为我们生成那些繁琐的样板代码&#xff0c;比如 getter、setter、构造函数等。然而&…...

云原生时代的技术桥梁

在数字化转型的大潮中&#xff0c;企业面临着数据孤岛、应用间集成复杂、高成本与低效率等问题。这些问题不仅阻碍了企业内部信息的流通和资源的共享&#xff0c;也影响了企业对外部市场变化的响应速度。当前&#xff0c;这一转型过程从IT角度来看&#xff0c;已然迈入云原生时…...

2024四川大学计算机考研复试上机真题

2024四川大学计算机考研复试上机真题 2024四川大学计算机考研复试机试真题 历年四川大学计算机考研复试机试真题 在线评测&#xff1a;https://app2098.acapp.acwing.com.cn/ 分数求和 题目描述 有一分数序列&#xff1a; 2/1 3/2 5/3 8/5 13/8 21/13… 求出这个数列的前 …...

【GPU使用】如何在物理机和Docker中指定GPU进行推理和训练

我的机器上有4张H100卡&#xff0c;我现在只想用某一张卡跑程序&#xff0c;该如何设置。 代码里面设置 import os # 记住要写在impot torch前 os.environ[CUDA_VISIBLE_DEVICES] "0, 1"命令行设置 export CUDA_VISIBLE_DEVICES0,2 # Linux 环境 python test.py …...

汽车免拆诊断案例 | 2023款丰田雷凌汽油版车行驶中偶尔出现通信故障

故障现象  一辆2023款丰田雷凌汽油版车&#xff0c;搭载1.5 L发动机&#xff0c;累计行驶里程约为4700 km。车主反映&#xff0c;行驶中偶尔组合仪表上的发动机转速信号丢失&#xff0c;转向变重&#xff0c;且有“闯车”感&#xff0c;同时车辆故障警报蜂鸣器鸣响。 故障诊断…...

千里科技亮相吉利AI智能科技发布会,共启“AI+车”新纪元

今天&#xff0c;在三亚举行的吉利AI智能科技发布会上&#xff0c;千里科技董事长印奇发表了主题为《从“车AI”到“AI车”》的演讲。印奇重点分享了对于“AI车”未来趋势的判断&#xff0c;并重点介绍了在吉利AI科技生态体系下&#xff0c;围绕智驾、智舱等领域的创新合作。基…...

汽车零部件厂如何选择最适合的安灯系统解决方案

在现代制造业中&#xff0c;安灯系统作为一种重要的生产管理工具&#xff0c;能够有效提升生产线的异常处理效率&#xff0c;确保生产过程的顺畅进行。对于汽车零部件厂来说&#xff0c;选择一套适合自身生产需求的安灯系统解决方案尤为重要。 一、安灯系统的核心功能 安灯系统…...

spring boot + vue 搭建环境

参考文档&#xff1a;https://blog.csdn.net/weixin_44215249/article/details/117376417?fromshareblogdetail&sharetypeblogdetail&sharerId117376417&sharereferPC&sharesourceqxpapt&sharefromfrom_link. spring boot vue 搭建环境 一、浏览器二、jd…...

spaCy 入门:自然语言处理的高效工具

spaCy 入门&#xff1a;自然语言处理的高效工具 引言 spaCy 是一个功能强大的开源 Python 库&#xff0c;专注于工业级的自然语言处理&#xff08;NLP&#xff09;。它以其高效的性能、简洁的 API 和对多种语言的支持而闻名。无论是进行文本分析、信息提取还是构建智能聊天机…...

Stable Diffusion模型高清算法模型类详解

Stable Diffusion模型高清算法模型类详细对比表 模型名称核心原理适用场景参数建议显存消耗细节增强度优缺点4x-UltraSharp残差密集块(RDB)结构优化纹理生成真实人像/建筑摄影重绘幅度0.3-0.4&#xff0c;分块尺寸768px★★★★★☆皮肤纹理细腻&#xff0c;但高对比场景易出现…...

数据结构:八大排序(冒泡,堆,插入,选择,希尔,快排,归并,计数)详解

目录 一.冒泡排序 二.堆排序 三.插入排序 四.选择排序 五.希尔排序 六.快速排序 1.Lomuto版本&#xff08;前后指针法&#xff09; 2.Lomuto版本的非递归算法 3.hoare版本&#xff08;左右指针法&#xff09; 4.挖坑法找分界值&#xff1a; 七.归并排序 八.计数排序…...

QT-对象树

思维导图 写1个Widget窗口&#xff0c;窗口里面放1个按钮&#xff0c;按钮随便叫什么 创建2个Widget对象 Widget w1,w2 w1.show() w2不管 要求&#xff1a;点击 w1.btn ,w1隐藏&#xff0c;w2显示 点击 w2.btn ,w2隐藏&#xff0c;w1 显示 #include <QApplication> #inc…...

随机播放音乐 伪随机

import java.util.*;/*** https://cloud.tencent.com.cn/developer/news/1045747* 伪随机播放音乐*/ public class MusicPlayer {private List<String> allSongs; // 所有歌曲列表private List<String> playedSongs; // 已经播放过的歌曲列表private Map<String…...

spring boot打包插件的问题

在spring boot项目中声明了 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build> 执行mvn clean package&…...

海康摄像头接入流媒体服务器实现https域名代理播放

环境 操作系统&#xff1a;Ubuntu 22.04流媒体服务器&#xff1a;srs 官网安装教程srs开启GB28181协议 官网开启教程进行海康摄像头的配置 官网配置教程srs使用systemctl实现开机自启 官网配置教程 nginx配置说明 server {listen 80;server_name a.com;return 301 https://$…...

Stable Diffusion模型Pony系列模型深度解析

Stable Diffusion模型Pony系列模型深度解析 一、技术架构与核心特性 基于SDXL的深度优化 Pony系列模型以SDXL为基础框架&#xff0c;通过针对二次元/动漫风格的微调&#xff0c;强化了在该领域的生成能力&#xff0c;同时保留了对写实场景的兼容性‌。其训练数据特别侧重于人…...

性能巅峰对决:Rust vs C++ —— 速度、安全与权衡的艺术

??关注&#xff0c;带你探索Java的奥秘&#xff01;?? ??超萌技术攻略&#xff0c;轻松晋级编程高手&#xff01;?? ??技术宝库已备好&#xff0c;就等你来挖掘&#xff01;?? ??订阅&#xff0c;智趣学习不孤单&#xff01;?? ??即刻启航&#xff0c;编…...

【Kubernets】K8S内部nginx访问Service资源原理说明

文章目录 原理概述**一、核心概念****二、Nginx 访问 Service 的流程****1. Service 的作用****2. Endpoint 的作用****3. Nginx Pod 发起请求****(1) DNS 解析****(2) 流量到达 kube-proxy****(3) 后端 Pod 处理请求** **三、不同代理模式的工作原理****1. iptables 模式****2…...

Markdown HTML 图像语法

插入图片 Markdown ![图片描述](图片链接)一般来说&#xff0c;直接复制粘贴过来就行了&#xff0c;部分网页/应用可以拖拽&#xff0c;没人会真敲图片的链接吧…… 示例图片&#xff1a; ![Creeper?](https://i-blog.csdnimg.cn/direct/f5031c8c4f15421c9882d7eb23540b8…...

2503,D比C更易重构

我发现C程序很少超越其初始设计.问题是,很难重构C程序.如 struct S { int a; }; struct S s; s.a 3; struct S *p; p->a 3;即.用来直接访问,->用来间接访问.假设想把按值传递S改为按指针传递S.现在你必须更新每个使用,而不仅是声明. 这是它在D中的工作方式: struct …...

Scala 中 val 和对象内部状态的关系

在 Scala 中&#xff0c;val 用于声明不可变的变量&#xff0c;这意味着一旦 val 被赋值&#xff0c;它的引用&#xff08;即指向的内存地址&#xff09;就不能再改变。然而&#xff0c;这并不影响对象内部的状态&#xff08;即对象的属性&#xff09;是否可以改变。具体来说&a…...

疫情管理系统设计与实现(代码+数据库+LW)

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本疫情管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&a…...

记Android12上一个原生bug引起的system_server crash

一. 现象描述 近日测试上报一个几乎必现的crash&#xff0c;描述如下: 现象: launcher编辑状态与锁屏解锁交互时系统概率性重启 操作步骤: 进入launcher组件编辑状态按电源键灭屏后亮屏&#xff0c;锁屏界面上滑解锁launcher编辑状态向右或向左滑动重复1&#xff0c;2&#x…...

代码随想录算法训练营第六天|Leetcode454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和

15. 三数之和 建议&#xff1a;本题虽然和 两数之和 很像&#xff0c;也能用哈希法&#xff0c;但用哈希法会很麻烦&#xff0c;双指针法才是正解&#xff0c;可以先看视频理解一下 双指针法的思路&#xff0c;文章中讲解的&#xff0c;没问题 哈希法很麻烦。 题目链接/文章讲…...

大数据环境(单机版) Flume传输数据到Kafka

文章目录 前言一、准备二、安装三、配置环境变量四、修改配置4.1、kafka配置4.2、Flume配置 五、启动程序5.1、启动zk5.2、启动kafka5.3、启动flume 六、测试6.1、启动一个kafka终端&#xff0c;用来消费消息6.2、写入日志 其他 前言 flume监控指定目录&#xff0c;传输数据到…...

计算机毕业设计SpringBoot+Vue.js高校教师科研管理系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

C++课程设计【宿舍管理查询软件】

宿舍管理查询软件 一、题目描述二、源码以及说明宿舍管理查询软件设计与实现1. 系统设计思路1.1 功能需求1.2 数据结构2. 系统实现3. 代码说明3.1 数据结构3.2 功能实现3.3 文件存储4. 示例运行输入输出5. 总结其他QT文章推荐一、题目描述 (一)问题描述 为宿舍管理人员编写一…...

数据挖掘校招面经一

写在前面&#xff1a;其实数据挖掘、风控、机器学习算法与搜广推的八股还是有重合的部分&#xff0c;毕竟都是面对结构化数据。特别是我自己是做竞赛的&#xff0c;平时LGBM、CatBoost用的挺多的&#xff0c;所以感觉这些八股还是有必要看看&#xff0c;建议大家也可以看一下。…...

迷你世界脚本对象库接口:ObjectLib

对象库接口&#xff1a;ObjectLib 迷你世界 更新时间: 2023-04-26 20:21:09 具体函数名及描述如下: 序号 函数名 函数描述 1 getAreaData(...) 获取区域数据 2 getPositionData(...) 获取位置数据 3 getLivingData(...) 获取生物数据 4 getItemDat…...

VSCode知名主题带毒 安装量900万次

目前微软已经从 Visual Studio Marketplace 中删除非常流行的主题扩展 Material Theme Free 和 Material Theme Icons&#xff0c;微软称这些主题扩展包含恶意代码。 统计显示这些扩展程序的安装总次数近 900 万次&#xff0c;在微软实施删除后现在已安装这些扩展的开发者也会…...

C#—csv文件格式操作实例【在winform表格中操作csv】

C#—csv文件格式操作实例【在winform表格中操作csv】 实例一 实例效果 当在winform界面中点击读取按钮时 将csv中的所有数据读取出来放置在datagridview控件&#xff0c;可以在datagridview控件中编辑数据&#xff0c;当点击保存按钮时 将datagridview控件中的所有数据存储在…...

Redis设计与实现-数据结构

Redis数据结构 1、RedisObject对象2、简单动态字符串2.1 SDS定义2.2 SDS与C语言的区别2.3 SDS的空间分配策略2.3.1 空间预分配2.3.2 惰性空间释放 2.4 SDS的API 3、链表3.1 链表的定义3.2 链表的API 4、字典4.1 字典的定义4.2 哈希算法4.3 哈希表的扩缩4.3.1 哈希表扩缩的判断依…...

Ubuntu20.04双系统安装及软件安装(四):国内版火狐浏览器

Ubuntu20.04双系统安装及软件安装&#xff08;四&#xff09;&#xff1a;国内版火狐浏览器 Ubuntu系统会自带火狐浏览器&#xff0c;但该浏览器不是国内版的&#xff0c;如果平常有记录书签、浏览记录、并且经常使用浏览器插件的习惯&#xff0c;建议重装火狐浏览器为国内版的…...

C语言100天练习题【记录本】

C语言经典100题&#xff08;手把手 编程&#xff09; 可以在哔哩哔哩找到 已解决的天数&#xff1a;一&#xff0c;二&#xff0c;五&#xff0c;六 下面的都是模模糊糊的 可以学学这些算法&#xff0c;我是算法白痴&#xff0c;但是我不是白痴&#xff0c;可以学&#xff…...

基于CURL命令封装的JAVA通用HTTP工具

文章目录 一、简要概述二、封装过程1. 引入依赖2. 定义脚本执行类 三、单元测试四、其他资源 一、简要概述 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具&#xff0c;可以说是一款很强大的http命令行工具。它支持文件的上传和下载&#xff0c;是综合传输工具&…...

SQL刷题:自连接(Self-Join)--通过将 同一张表连接两次,比较不同行之间的数据关系

例题&#xff1a; 表&#xff1a;Employee ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | | salary | int | | managerId | int | ---------------------- id 是该表的主键…...

避坑!用Docker搞定PHP开发环境搭建(Mac、Docker、Nginx、PHP-FPM、XDebug、PHPStorm、VSCode)

本次更新主要是对环境版本进行了更新&#xff0c;例如php 7.3.7升级到了7.3.8&#xff0c;另外之前的版本有同学踩了坑&#xff0c;主要是官方docker镜像php:7.3.7-fpm和php:7.3.8-fpm使用了不同版本的debian&#xff0c;后面会提到&#xff0c;请各位同学留意。 因为最近换电脑…...

第七节:基于Winform框架的串口助手小项目---协议解析《C#编程》

介绍 文章上所说的串口助手&#xff0c;工程文件资源-CSDN文库 目标 代码实现 private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e){if (isRxShow false) return;// 1,需要读取有效的数据 BytesToReadbyte[] dataTemp new byte[serialPor…...

pt-archiver删除数据库的数据表/各种报错类型

这篇帖子是前面文的一部分延申 mysqlimport导入一亿数据的csv文件/一行命令删除表-CSDN博客 如需转载&#xff0c;标记出处 目录 pt-archiver命令格式 如果执行后出现下面报错 1&#xff09;Cannot find an ascendable index in table at /usr/bin/pt-archiver line 3233. …...

STM32Cubemx配置E22-xxxT22D lora模块实现定点传输

文章目录 一、STM32Cubemx配置二、定点传输**什么是定点传输&#xff1f;****定点传输的特点****定点传输的工作方式****E22 模块定点传输配置****如何启用定点传输&#xff1f;****示例** **应用场景****总结** **配置 1&#xff1a;C0 00 07 00 02 04 62 00 17 40****解析** …...

模块和端口

1、模块 模块内部的5个组成是&#xff1a;变量声明 数据流语句 低层模块实例 函数和任务 行为语句 SR锁存器 timescale 1ns / 1psmodule SR_latch(input wire Sbar ,input wire Rbar ,output wire Q ,output wire Qbar);nand…...

Android+SpringBoot的老年人健康饮食小程序平台

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 我将从经济、生活节奏、技术融合等方面入手&#xff0c;详细阐述居家养老管理模式兴起的…...

[machine learning] MACS、MACs、FLOPS、FLOPs

本文介绍机器学习中衡量一个模型计算复杂度的四个指标&#xff1a;MACS、MACs、FLOPS、FLOPs。 首先从含义上讲&#xff0c;可以分类两类&#xff1a;MACS/FLOPS和MACs/FLOPs。MACs/FLOPs表示总的操作数(后缀s可以看成是表示复数)&#xff0c;MACS/FLOPS表示每秒可以执行的操作…...

PostgreSQL10 物理流复制实战:构建高可用数据库架构!

背景 PostgreSQL 10 在高可用架构中提供了物理复制&#xff0c;也称为流复制&#xff08;Streaming Replication&#xff09;&#xff0c;用于实现实例级别的数据同步。PostgreSQL 复制机制主要包括物理复制和逻辑复制&#xff1a;物理复制依赖 WAL 日志进行物理块级别的同步&…...