用Qt自己写一个上位机,将串口发过来的温度信息,显示出来,并且绘画出温度曲线 上图:
采用QT绘画曲线,首先当然是采用,qwt控件,而Qt没有自带的qwt控件,所以需要按住移植qwt控件方法具体步骤如下: 1. Download and install QT 5.0.1 (MinGw) to: “C:\Qt\Qt5.0.1” 2. Download and extract Qwt 6.1 RC3 to: “C:\qwt-6.1-rc3” 3. Add “C:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin” to your systems path variable (qmake.exe is located here) 4. Add “C:\Qt\Qt5.0.1\Tools\MinGW\bin” to your systems path variable (mingw32-make.exe is located here) 5. Open a command line (cmd) and navigate to: “C:\qwt-6.1-rc3” 6. Type: “qmake” (This command won’t prompt any msg so don’t worry) 7. Type: “mingw32-make” (Compiles the whole project with examples; this will take a while so be patient) 8. Type: “mingw32-make install” (This installs qwt to the directory set in “C:\qwt-6.1-rc3\qwtconfig.pri”; the default location is “C:/Qwt-QWT_VERSION-rc3” -> “C:\Qwt-6.1.0-rc3\”) 9. Add “C:\Qwt-6.1.0-rc3\lib” to your systems path variable 10. Add a User variable named “QT_PLUGIN_PATH” with the following path “C:\Qwt-6.1.0-rc3\plugins” 11. Add a User variable named “QMAKEFEATURES” with the following path “C:\Qwt-6.1.0-rc3\features” 12. Start Qt Creator 13. Create a new project: File -> New File or Project … -> Applications -> Qt Gui Application -> Choose 14. Name it “Test” 15. Create the project in the following directory: “C:\workspace” 16. Open file “Test.pro” 17. Add “Config += qwt” at the bottom 18. Open the main.c of the project and delete all its content. 19. Paste the following in the main.c (This is the qwt example “simpleplot”): 既如下步骤,当然,中国网站上大多数都是采用直接添加一些LIB到.pro文件中去,个人感觉这种方法不是很好,所以就看了看: 1.下载并安装QT 5.0.1(MinGW的)到“C:\ Qt的\ Qt5.0.1” 2.下载并解压缩QWT 6.1 RC3到:“C:\ QWT-6.1-RC3” 3.添加“C:\ Qt的\ Qt5.0.1 \ 5.0.1 \ mingw47_32 \ BIN”到你的系统路径变量(qmake.exe就设在这里) 4.添加“C:\ Qt的\ Qt5.0.1 \ TOOLS \ MinGW的\ BIN”到你的系统路径变量(的mingw32-的make.exe就设在这里) 5.打开命令行(CMD)并导航到:“C:\ QWT-6.1-RC3” 6.键入:“qmake”(该命令将不会提示任何MSG所以不用担心) 7.键入“mingw32-make”(编译举例整个项目,这将需要一段时间,所以要耐心等待) 8.键入:“mingw32-make install”(这将安装QWT在“C:\ QWT-6.1-RC3 \ qwtconfig.pri”设置的目录;默认位置是“C:/ QWT - $$ QWT_VERSION-RC3” - >“C:\ QWT-6.1.0-RC3 \”) 9.添加“C:\ QWT-6.1.0-RC3 \ LIB”你的系统路径变量 10.添加一个名为“QT_PLUGIN_PATH”用户变量具有以下路径:“C:\Qwt-6.1.0-rc3\plugins” 11.添加一个名为“QMAKEFEATURES”用户变量具有以下路径:“C:\Qwt-6.1.0-rc3\features” 12.启动Qt Creator的 13.创建一个新的项目:文件 - >新建文件或项目… - >应用程序 - > Qt的GUI应用程序 - >选择 14.将它命名为“测试” 15.在以下目录中创建项目:“C:\workspace” 16.打开文件“Test.pro” 17.添加“CONFIG += qwt”在底部 18.打开项目的main.c中并删除其所有内容。 19.粘贴在main.c中以下(这是QWT榜样“simpleplot”):
这样就能够在ui界面编辑中找到QwtWidgets包含的控件类了。当然打开ui是要选择以QT designed 才能够找到这些控件,如下图: 接着就是设计好ui界面了,如上图所示的界面, 添加源代码: .pro文件
QT += core gui CONFIG += qwt QT +=serialport greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = temperature TEMPLATE = app
SOURCES += main.cpp\ mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 .h文件
#ifndef MAINWINDOW_H #define MAINWINDOW_H
#include #include #include
#include #include #include
#include #include #include #include #include #include #include #include #include #include
namespace Ui { class MainWindow; }
class MainWindow : public QMainWindow { Q_OBJECT
public: explicit MainWindow(QWidget *parent = 0); // void timerEvent(QTimerEvent *); ~MainWindow(); private slots: void legendChecked(const QVariant &itemInfo,bool on); void OpenButtonClicked(); void closeButtonClicked(); void Read_Data(); void clearButtonClicked(); void timeoutslot(); private: Ui::MainWindow *ui; QSerialPort *serial; // QVector xs; // QVector ys; };
#endif // MAINWINDOW_H 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 .cpp文件
#include "mainwindow.h" #include "ui_mainwindow.h"
QwtPlotCurve *curve = new QwtPlotCurve("temperature"); //定义一个QWtPlotCurve类的对象,curve 用来绘画曲线 //右边图例初始化,名字为“temperature”
//X轴 double time[20] = {}; //Y轴 double val[20] ={}; int time_count;
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // ui->temperplot->resize(640,400); setWindowFlags(Qt::WindowCloseButtonHint);//只显示一个关闭按钮 //固定界面大小不可改变 setMaximumSize(this->width(),this->height()); setMinimumSize(this->width(),this->height()); //设置图像显示标题 ui->temperplot->setTitle("温度实时波形"); //设置坐标轴名称 ui->temperplot->setAxisTitle(QwtPlot::xBottom,"time s"); ui->temperplot->setAxisTitle(QwtPlot::yLeft,"temperature ℃");
// //设置坐标轴的范围 // ui->temperplot->setAxisScale(QwtPlot::yLeft,0,50); // ui->temperplot->setAxisScale(QwtPlot::xBottom,0,5); //改变绘图区域的背景,canvas 表示画布 ui->temperplot->canvas()->setPalette(QPalette(QColor(Qt::white))); // //使用滚轮放大缩小 // (void) new QwtPlotMagnifier(ui->temperplot->canvas()); // (void) new QwtPlotPanner(ui->temperplot->canvas());
(new QwtPlotPanner(ui->temperplot->canvas()))->setMouseButton(Qt::RightButton); (new QwtPlotMagnifier(ui->temperplot->canvas()))->setAxisEnabled(QwtPlot::yLeft,false); //y轴在放大的时候,坐标不变化
QwtPlotZoomer* zoomer = new QwtPlotZoomer(ui->temperplot->canvas()); zoomer->setRubberBandPen(QColor(Qt::black)); zoomer->setTrackerPen(QColor(Qt::black)); zoomer->setMousePattern(QwtEventPattern::MouseSelect2,Qt::RightButton,Qt::ControlModifier); zoomer->setMousePattern(QwtEventPattern::MouseSelect3,Qt::RightButton); //实现鼠标左键选择区域放大:(右键还原)功能。
//定义一个选择器,(十字架),以xBottom 和yLeft为坐标显示 QwtPlotPicker *picker; picker = new QwtPlotPicker(QwtPlot::xBottom,QwtPlot::yLeft,QwtPlotPicker::CrossRubberBand,QwtPicker::AlwaysOn,ui->temperplot->canvas()); picker->setStateMachine(new QwtPickerDragPointMachine());//拖拽点起作用 picker->setRubberBandPen(QPen(QColor(Qt::white)));//拖拽点颜色 picker->setTrackerPen(QColor(Qt::blue));//跟踪器 显示对应坐标的颜色
QwtLegend *legend = new QwtLegend;//legend(图例) legend->setDefaultItemMode(QwtLegendData::Checkable);//图例可选择 ui->temperplot->insertLegend(legend,QwtPlot::RightLegend);//图例插入到plot绘画中。
QwtPlotGrid *grid = new QwtPlotGrid;//grid 格子,网格 grid->enableXMin(true); grid->setMajorPen(QPen(Qt::red, 0, Qt::DotLine));//大格子 grid->setMinorPen(QPen(Qt::red, 0 , Qt::DotLine));//大格子里的小格子 grid->attach(ui->temperplot);//加载到plot中
setAutoFillBackground(true);//自动填充背景颜色 curve->setPen(QPen(Qt::red)); curve->setSamples(time,val,20);//加载数据,也可以使用setData // curve->setSamples(xs,ys); curve->setCurveAttribute(QwtPlotCurve::Fitted,true);//是曲线更圆滑 curve->attach(ui->temperplot);//加载到plot绘画上
//连接槽,处理对应事件 connect(legend,SIGNAL(checked(const QVariant &,bool,int)),this,SLOT(legendChecked(const QVariant &,bool)));
/*串口部分*/ /*查找可用串口,调用foreach 串口信息保存在info 中*/ foreach (const QSerialPortInfo &info,QSerialPortInfo::availablePorts()) { qDebug() <<"Name :" < qDebug() <<"Description" < qDebug() <<"Manufacturer"<
QSerialPort serial; serial.setPort(info);//设置串口端口 if(serial.open(QIODevice::ReadWrite))//可读可写方式打开串口 { ui->portBox->addItem(serial.portName());//将检测到的串口信息放到Box中显示 serial.close(); } } ui->closeButton->setEnabled(false);//关闭按钮不可用 ui->clearButtom->setEnabled(false);//清空数据按钮不可以 qDebug() <
connect(ui->openButton,SIGNAL(clicked()),this,SLOT(OpenButtonClicked())); connect(ui->closeButton,SIGNAL(clicked()),this,SLOT(closeButtonClicked())); connect(ui->clearButtom,SIGNAL(clicked()),this,SLOT(clearButtonClicked())); }
MainWindow::~MainWindow() { delete ui; } void MainWindow::legendChecked(const QVariant &itemInfo,bool on) { //获得曲线 QwtPlotItem *plotItem = ui->temperplot->infoToItem(itemInfo); if(plotItem) { plotItem->setVisible(on); } ui->temperplot->replot();//重新加载曲线 }
//打开串口槽函数 void MainWindow::OpenButtonClicked() {
if(ui->portBox->currentText() == NULL) { QMessageBox::information(this,"Error Message","Open port Error"); } else { ui->openButton->setEnabled(false); ui->clearButtom->setEnabled(true); ui->closeButton->setEnabled(true);//使能关闭串口 //设置各个组合框不可用 ui->portBox->setEnabled(false); ui->dataBox->setEnabled(false); ui->checkBox->setEnabled(false); ui->stopBox->setEnabled(false); ui->baudrateBox->setEnabled(false);
serial = new QSerialPort;
//设置端口名com x; 这两句的顺序不能够变,否则会出错。 serial->setPortName(ui->portBox->currentText()); //打开串口 serial->open(QIODevice::ReadWrite); //设置波特率 // serial->setBaudRate(ui->baudrateBox->currentText().toInt()); if(ui->baudrateBox->currentText()==tr("9600")) //根据组合框内容对串口进行设置 serial->setBaudRate(QSerialPort::Baud9600); else if(ui->baudrateBox->currentText()==tr("115200")) serial->setBaudRate(QSerialPort::Baud115200); //设置数据位 switch(ui->dataBox->currentIndex()) { case 8:serial->setDataBits(QSerialPort::Data8); break; case 7:serial->setDataBits(QSerialPort::Data7); break; default : break; } //设置校验位 switch (ui->checkBox->currentIndex()) { case 0:serial->setParity(QSerialPort::NoParity); break; default: break; } //设置停止位 switch (ui->stopBox->currentIndex()) { case 1:serial->setStopBits(QSerialPort::OneStop); break; default: break; } //设置流控制 serial->setFlowControl(QSerialPort::NoFlowControl); //连接槽函数,当串口有数据到来时,回调函数。 connect(serial,SIGNAL(readyRead()),this,SLOT(Read_Data()));
QTimer *timer_clock = new QTimer(this); connect(timer_clock,SIGNAL(timeout()),this,SLOT(timeoutslot())); timer_clock->start(100);//200ms
} }
void MainWindow::closeButtonClicked() { ui->openButton->setEnabled(true); ui->closeButton->setEnabled(false); ui->clearButtom->setEnabled(false);
//设置各个组合框可以 ui->portBox->setEnabled(true); ui->dataBox->setEnabled(true); ui->checkBox->setEnabled(true); ui->stopBox->setEnabled(true); ui->baudrateBox->setEnabled(true);
serial->clear(); serial->close(); serial->deleteLater();
}
void MainWindow::Read_Data()//进去这个函数是,只要串口中有数据,就会进入这个函数。 { QByteArray buf;//QByteArray 类是定义一个字节数组(char *), buf = serial->readAll();//读取串口所有的数据给变量buf if(buf != NULL) { QString str = ui->receiveEdit->toPlainText();//获取TextEdit的内容
for (int i = 0; i < 19; i++) { val[i] = val[i+1]; } //最后一位为新数据 val[19] =buf.toDouble(); curve->setSamples(time, val, 20);//重新加载数据 // ys.append(buf.toDouble()); // curve->setSamples(xs,ys); ui->temperplot->replot(); //QwtPlot重绘,重要,没有这句不起作用
str = tr(buf);//将接收区之前的数据+串口缓冲区的数据 QString str1,str2; str1 = str+tr("℃ "); str2 = QString::number(time_count*100);//int --> Qstring str1 += str2+tr("ms"); // ui->receiveEdit->clear(); ui->receiveEdit->append(str1);//把文本str添加到文本编辑的结尾 } buf.clear(); }
void MainWindow::clearButtonClicked() { ui->receiveEdit->clear(); memset(time,0,20); memset(val,0,20); time_count = 0; }
//定时100ms一到,回调这个函数 void MainWindow::timeoutslot() { time_count++; for(int i = 0;i < 19;i++) { time[i]=time[i+1]; } time[19] = time_count; }
你可能感兴趣的:(基于QT:温度串口图像显示)
GenAI 平台,3 分钟即可构建基于 Claude、DeepSeek 的 AI Agent
DO_Community
人工智能
DigitalOcean云服务在前不久发布了GenAI平台——一个让任何团队都能在几分钟内构建和部署AI代理的平台。DigitalOcean的GenAI平台持续扩展,让人工智能驱动的开发变得更加易用、灵活且强大。近日,Digitalocean宣布将Anthropic的Claude模型和DeepSeekR1引入Digitalocean的生态系统,为你提供更多构建和部署AI应用的选择。通过Anthro
2025年三个月自学手册 网络安全(黑客技术)
网安kk
web安全 安全 网络 网络安全 人工智能
基于入门网络安全/黑客打造的:黑客&网络安全入门&进阶学习资源包什么是网络安全网络安全可以基于攻击和防御视角来分类,我们经常听到的“红队”、“渗透测试”等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。如何成为一名黑客很多朋友在学习安全方面都会半路转行,因为不知如何去学,在这里,我将这个整份答案分为黑客(网络安全)入门必备、黑客(网络安全)职业指南、黑客(网络安全)学习导航
入门网络安全工程师要学习哪些内容【2025年寒假最新学习计划】
白帽黑客2659
学习 web安全 安全 网络安全 密码学
基于入门网络安全/黑客打造的:黑客&网络安全入门&进阶学习资源包大家都知道网络安全行业很火,这个行业因为国家政策趋势正在大力发展,大有可为!但很多人对网络安全工程师还是不了解,不知道网络安全工程师需要学什么?知了堂小编总结出以下要点。网络安全工程师是一个概称,学习的东西很多,具体学什么看自己以后的职业定位。如果你以后想成为安全产品工程师,学的内容侧重点就和渗透测试工程师不一样,如果你想成为安全开发
基于python深度学习遥感影像地物分类与目标识别、分割实践技术应用
xiao5kou4chang6kai4
深度学习 遥感 勘测 python 深度学习 分类
专题一:深度学习发展与机器学习深度学习的历史发展过程机器学习,深度学习等任务的基本处理流程梯度下降算法讲解不同初始化,学习率对梯度下降算法的实例分析从机器学习到深度学习算法专题二深度卷积网络、卷积神经网络、卷积运算的基本原理池化操作,全连接层,以及分类器的作用BP反向传播算法的理解一个简单CNN模型代码理解特征图,卷积核可视化分析专题三TensorFlow与keras介绍与入门TensorFlow
Android Gradle使用总结
Wei_Leng
Android studio android gradle 脚本
其他Groovy入门学习http://blog.csdn.net/zhaoyanjun6/article/details/70313790AndroidGradleAndroid项目使用Gradle作为构建框架,Gradle又是以Groovy为脚本语言。所以学习Gradle之前需要先熟悉Groovy脚本语言。Groovy是基于Java语言的脚本语言,所以它的语法和Java非常相似,但是具有比jav
《Java高级-Xml:利用DOM4j解析XML》
大大大钢琴
# Java:经验总结 java xml 开发语言
利用DOM4j解析XMLdom4j是一个简单的开源库,用于处理XML、XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP。dom4j是目前在xml解析方面是最优秀的(Hibernate、Sun的JAXM也都使用dom4j来解析XML),它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XMLSchema支持以及用于大文档或流化文档
小程序类毕业设计选题题目推荐 (29)
初尘屿风
毕业设计 后端 小程序 课程设计 spring boot 微信 后端 学习
基于微信小程序的设备故障报修管理系统设计与实现,SpringBoot+Vue+毕业论文基于微信小程序的设备故障报修管理系统设计与实现,SSM+Vue+毕业论文基于微信小程序的电影院购票小程序系统,SpringBoot+Vue+毕业论文+指导搭建视频基于微信小程序的宿舍报修管理系统设计与实现,SpringBoot(15500字)+Vue+毕业论文+指导搭建视频基于微信小程序的电影院订票选座系统的设计
jQuery UI CSS 框架 API
lly202406
开发语言
jQueryUICSS框架API概述jQueryUI是一个基于jQuery的用户界面和交互库,它提供了一套丰富的交互组件和视觉效果,旨在帮助开发者快速构建具有吸引力和互动性的网页应用。jQueryUICSS框架API是jQueryUI的一部分,它允许开发者通过简单的CSS类来控制UI组件的样式和外观。本文将详细介绍jQueryUICSS框架API的使用方法、常用类和功能,帮助开发者更好地利用这一工
Linux搭建FTP服务器
见字如晤X.
服务器 linux 运维
FTP概述FTP服务(FileTransferProtocol服务,文件传输协议服务)是一种用于在网络上传输文件的协议。FTP服务允许用户将文件从一个计算机(本地主机)传输到另一个计算机(远程主机),或者从远程主机接收文件到本地主机。这种传输是基于客户端-服务器模式的,其中用户使用的本地计算机作为客户端,而提供文件存储和访问的远程计算机作为服务器传输连接与传输模式FTP客户端和服务器之间的连接,主
【2025年】全国CTF夺旗赛-从零基础入门到竞赛,看这一篇就稳了!
网安詹姆斯
web安全 CTF 网络安全大赛 python linux
【2025年】全国CTF夺旗赛-从零基础入门到竞赛,看这一篇就稳了!基于入门网络安全/黑客打造的:黑客&网络安全入门&进阶学习资源包目录一、CTF简介二、CTF竞赛模式三、CTF各大题型简介四、CTF学习路线4.1、初期1、html+css+js(2-3天)2、apache+php(4-5天)3、mysql(2-3天)4、python(2-3天)5、burpsuite(1-2天)4.2、中期1、S
机器学习·文本数据读写处理
AAA顶置摸鱼
python 深度学习 机器学习 人工智能 数据处理
前言在自然语言处理的第一步,需要面对的是各种各样以不同形式表现的文本数据,比如,txt、Excel中的表格数据,还有无法直接打开的pkl文件等。针对这些不同类型的数据,可以基于Python中的基本功能函数或者调用某些库进行读写以及作一些基本的处理。一、文本数据读写方法1.读写TXT文件读取方法:read():读取整个文件,返回字符串。readline():逐行读取,返回字符串。readlines(
Python中LLM的知识图谱构建:动态更新与推理
二进制独立开发
GenAI与Python 非纯粹GenAI python 知识图谱 开发语言 自然语言处理 人工智能 分布式 机器学习
文章目录引言1.知识图谱的基本概念1.1知识图谱的定义1.2知识图谱的构建流程2.利用LLM进行知识抽取2.1实体识别2.2关系抽取2.3属性抽取3.知识融合3.1实体对齐3.2冲突消解4.知识存储5.知识推理5.1规则推理5.2基于LLM的推理6.动态更新6.1增量更新6.2实时更新7.结论引言随着人工智能技术的飞速发展,知识图谱(KnowledgeGraph,KG)作为一种结构化的知识表示方法
基于Kitti数据集实现MMDetection3D点云物体检测训练
Xian-HHappy
技术知识点 kitti三维点云 无人驾驶 MMDetection3D 人工智能 计算机视觉 目标检测
DataBall助力快速掌握数据集的信息和使用方式,会员享有百种数据集,持续增加中。需要更多数据资源和技术解决方案,知识星球:“DataBall-X数据球(free)”贵在坚持!-----------------------------------------------------------------------------------------------MMDetection3D环境安
QT C++ new QTableWidgetItem 不需要删除指针
测控系统集成
c++语言 测控 QT 数据库 qt
在Qt中,使用QTableWidgetItem时,通常不需要手动删除指针,除非你是在使用原始指针而非智能指针(如std::unique_ptr或std::shared_ptr)。这是因为QTableWidgetItem本身是Qt框架的一部分,它负责管理自己的内存。1.使用QTableWidgetItem当你向QTableWidget添加项时,可以直接创建并添加QTableWidgetItem对象,
AI编剧系统深度解析:从算法架构到影视工业化应用实战
Coderabo
DeepSeek R1模型企业级应用 人工智能 算法
媒体娱乐行业革命:AI编剧创意辅助系统架构解析与实战应用一、行业背景与技术架构在流媒体内容需求激增的当下,传统编剧模式面临产能瓶颈。AI编剧创意辅助系统通过自然语言处理(NLP)、生成对抗网络(GAN)和知识图谱技术,构建了包含剧本生成、情节优化、角色塑造等模块的智能创作平台。核心架构分为:知识图谱层:整合影视剧本数据库(IMSDb)、维基百科等结构化数据NLP处理层:基于Transformer的
基于STM32的智能图书馆管理系统
STM32发烧友
stm32 嵌入式硬件 单片机
1.引言传统图书馆管理存在借还效率低、书籍定位困难等问题。本文设计了一款基于STM32的智能图书馆管理系统,通过RFID技术、智能导航与自助服务终端,实现图书精准管理,提升读者服务体验。2.系统设计2.1硬件设计主控芯片:STM32F429ZI,集成LCD控制器与硬件JPEG解码感知模块:RFID读写器(MFRC522):识别图书标签红外传感器(E18-D80NK):检测书籍存取状态重量传感器(H
QTextEdit达到指定行数自动清理+光标移动到末端(QT/C++)
ibuki_fuko
Qt与C++ qt 开发语言
标题2:QTextEdit/QPlainTextEdit/QLineEdit/QTextBrowser达到指定行数自动清理标题3:设置QTextEdit/QPlainTextEdit/QLineEdit/QTextBrowser的光标移动到文本末端标题4:设置QT文本框显示内容过多自动清理且光标移动到文本框末端1、使用场景:有大量数据实时刷新显示在QT的文本框相关组件时,需要清理部分之前的数据,并
MXTU MAX 苹果cmsv10模板 仿毒舌自适应主题/短视X体验版完全开源
希希分享
软希网58soho_cn 源码资源 仿毒舌自适应主题/
基于MxonePro二开的主题,全开源未加密。MXTUMAX仿毒舌苹果CMS影视自适应主题主题说明:1、将mxtheme目录放置根目录|将mxpro目录放置template文件夹中2、苹果cms后台-系统-网站参数配置-网站模板-选择mxpro模板目录填写html3、网站模板选择好之后一定要先访问前台,然后再进入后台设置4、主题后台地址:MXTUMAX图图主题,/admin.php/admin/m
【python】懒人福利,通过Python的JIRA库操作JIRA,自动批量提交关闭bug,提高效率
bulabula2022
# CI持续集成 Python jira
简介:Jira是目前比较流行的基于Java架构的管理系统(Atlassian公司支持),有开源代码,方便做二次开发(可扩展性)。Jira是一款功能非常强大的管理工具,广泛的用来缺陷跟踪、用例管理、需求收集、任务跟踪、工时管理、项目计划管理等工作领域。python有支持操作Jira的第三方包,方便自定义一些自动化操作。需要安装jira库:pipinstalljiraJira认证fromjiraimp
蓝桥杯 Java B 组之设计 LRU 缓存
计算机小白一个
java 蓝桥杯 算法
Day7:综合练习-设计LRU缓存一、什么是LRU(LeastRecentlyUsed)缓存?LRU(LeastRecentlyUsed)缓存是一种基于最近最少使用策略的缓存机制,用于管理固定大小的缓存,当缓存满时,会淘汰最久未被使用的元素。LRU设计核心缓存的最大容量capacity支持get(key)操作(O(1)时间复杂度)支持put(key,value)操作(O(1)时间复杂度)当缓存满时
【FastAPI 】FastAPI 模板:提供静态文件
iFakeCoder
Flask fastapi python 开发语言
FastAPI是一个现代、快速(高性能)的Web框架,用于基于标准Python类型提示使用Python3.7+构建API。虽然它的主要用例是构建API,但FastAPI还可以轻松提供静态文件和HTML模板,从而让您可以构建全栈Web应用程序。在此博客中,我们将探讨如何使用FastAPI提供静态文件。我们将介绍基础知识并提供演示以帮助您入门。为什么要提供静态文件?静态文件是不经常更改的资产,并按原样
深度学习在医疗影像分析中的革命性应用
Echo_Wish
人工智能 前沿技术 深度学习 人工智能
深度学习在医疗影像分析中的革命性应用引言医疗影像分析是现代医学中不可或缺的一部分,特别是在疾病诊断和治疗过程中发挥了至关重要的作用。随着深度学习技术的发展,医疗影像分析的效率和准确性得到了显著提升。本文将探讨如何利用深度学习技术,特别是Python编程语言,来优化医疗影像分析,展示具体的代码实例,并举例说明其实际应用效果。深度学习与医疗影像分析深度学习(DeepLearning)是一种基于人工神经
无人机避障——配置新NX
Perishell
无人机
TerminalUbuntu安装Terminator及设置为默认终端_ubuntu安装terminator-CSDN博客谷歌拼音基于ubuntu20.4安装谷歌拼音中文输入法_ubuntu安装google输入法-CSDN博客JetsonOrin和Xaviernx的风扇调节Orinnx的默认风扇速度太慢,nx发烫的厉害,需要调节风速https://zhuanlan.zhihu.com/p/66558
【CVPR 2021】Knowledge Review:知识蒸馏新解法
BIT可达鸭
深度学习 人工智能 计算机视觉 模型压缩 知识蒸馏
【CVPR2021】KnowledgeReview:知识蒸馏新解法论文地址:主要问题:主要思路:符号假设:具体实现:实验结果:关注我的公众号:联系作者:论文地址:https://jiaya.me/papers/kdreview_cvpr21.pdf主要问题:目前大部分关于KD的方法都是基于相同层或者相同Block之间的知识迁移。但是Teacher往往深层表示抽象的语义信息,底层表示简单的知识的信息
yolov8人脸识别与脸部关键点检测(代码+原理)
QQ_1309399183
计算机视觉实战项目集锦 YOLO 人工智能 人脸识别 yolo人脸检测
YOLOv8脸部识别是一个基于YOLOv8算法的人脸检测项目,旨在实现快速、准确地检测图像和视频中的人脸。该项目是对YOLOv8算法的扩展和优化,专门用于人脸检测任务。YOLOv8是一种基于深度学习的目标检测算法,通过将目标检测问题转化为一个回归问题,可以实现实时的目标检测。YOLOv8Face项目在YOLOv8的基础上进行了改进,使其更加适用于人脸检测。以下是YOLOv8Face项目的一些特点和
【机器学习】基于3D CNN通过CT图像分类预测肺炎
MUKAMO
AI Python应用 机器学习 深度学习 人工智能 神经网络 3D CNN
1.引言1.1.研究背景在医学诊断中,医生通过分析CT影像来预测疾病时,面临一些挑战和局限性:图像信息的广度与复杂性:CT扫描生成的大量图像对医生来说既是信息的宝库也是处理上的负担。每组CT数据可能包含数百张切片,医生必须迅速审阅这些图像,以便捕捉到病变的微小细节。这种庞大的信息量要求医生在有限的时间内做出精准诊断,但同时也增加了漏诊或误诊的风险。部分容积效应也可能模糊小病变的边界,使得准确诊断变
Selenium使用指南
程序员杰哥
selenium 测试工具 python 测试用例 职场和发展 程序人生 功能测试
概述selenium是网页应用中最流行的自动化测试工具,可以用来做自动化测试或者浏览器爬虫等。官网地址为:相对于另外一款web自动化测试工具QTP来说有如下优点:免费开源轻量级,不同语言只需要一个体积很小的依赖包支持多种系统,包括Windows,Mac,Linux支持多种浏览器,包括Chrome,FireFox,IE,safari,opera等支持多语言,包括Java,C,python,c#等主流
基于Python的搜索引擎的设计与实现
AI大模型应用之禅
DeepSeek R1 & AI大模型与大数据 java python javascript kotlin golang 架构 人工智能
搜索引擎,Python,爬虫,自然语言处理,信息检索,索引,算法,数据库1.背景介绍在信息爆炸的时代,海量数据无处不在,高效地获取所需信息变得至关重要。搜索引擎作为信息获取的桥梁,扮演着不可或缺的角色。传统的搜索引擎往往依赖于庞大的服务器集群和复杂的算法,对资源消耗较大,且难以满足个性化搜索需求。基于Python的搜索引擎设计,则凭借Python语言的易学易用、丰富的第三方库和强大的社区支持,为开
Python Web开发新选择:FastAPI框架详细教程
车载testing
python python 前端 fastapi
PythonWeb开发新选择:FastAPI框架详细教程简介FastAPI是一个用于构建API的现代、快速(高性能)的Web框架,它基于Python3.6+的类型提示。本文将通过具体的示例,详细介绍如何使用FastAPI进行Web开发。一、FastAPI简介1.FastAPI能做什么?FastAPI适用于构建:Web站点WebAPI测试平台持续集成工具自动生成API文档2.为什么要学习FastAP
Stm32中SysTick 定时器的使用
weixin_58038206
stm32 单片机 嵌入式硬件
ysTick_Config(SystemCoreClock/100);这行代码通常出现在基于ARMCortex-M内核微控制器的程序中,用于配置SysTick定时器,下面结合代码进行详细解释:1.SysTick定时器SysTick定时器是ARMCortex-M内核中一个简单的24位递减定时器,也被称为系统滴答定时器。它常用于产生精确的时间延迟、实现周期性的任务调度等功能。2.SystemCoreC
java解析APK
3213213333332132
java apk linux 解析APK
解析apk有两种方法
1、结合安卓提供apktool工具,用java执行cmd解析命令获取apk信息
2、利用相关jar包里的集成方法解析apk
这里只给出第二种方法,因为第一种方法在linux服务器下会出现不在控制范围之内的结果。
public class ApkUtil
{
/**
* 日志对象
*/
private static Logger
nginx自定义ip访问N种方法
ronin47
nginx 禁止ip访问
因业务需要,禁止一部分内网访问接口, 由于前端架了F5,直接用deny或allow是不行的,这是因为直接获取的前端F5的地址。
所以开始思考有哪些主案可以实现这样的需求,目前可实施的是三种:
一:把ip段放在redis里,写一段lua
二:利用geo传递变量,写一段
mysql timestamp类型字段的CURRENT_TIMESTAMP与ON UPDATE CURRENT_TIMESTAMP属性
dcj3sjt126com
mysql
timestamp有两个属性,分别是CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP两种,使用情况分别如下:
1.
CURRENT_TIMESTAMP
当要向数据库执行insert操作时,如果有个timestamp字段属性设为
CURRENT_TIMESTAMP,则无论这
struts2+spring+hibernate分页显示
171815164
Hibernate
分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作的代码,那样做分页可能简单一点,但当把网站分层开发后,分页就比较困难了,下面是我做Spring+Hibernate+Struts2项目时设计的分页代码,与大家分享交流。
1、DAO层接口的设计,在MemberDao接口中定义了如下两个方法:
public in
构建自己的Wrapper应用
g21121
rap
我们已经了解Wrapper的目录结构,下面可是正式利用Wrapper来包装我们自己的应用,这里假设Wrapper的安装目录为:/usr/local/wrapper。
首先,创建项目应用
&nb
[简单]工作记录_多线程相关
53873039oycg
多线程
最近遇到多线程的问题,原来使用异步请求多个接口(n*3次请求) 方案一 使用多线程一次返回数据,最开始是使用5个线程,一个线程顺序请求3个接口,超时终止返回 缺点 测试发现必须3个接
调试jdk中的源码,查看jdk局部变量
程序员是怎么炼成的
jdk 源码
转自:http://www.douban.com/note/211369821/
学习jdk源码时使用--
学习java最好的办法就是看jdk源代码,面对浩瀚的jdk(光源码就有40M多,比一个大型网站的源码都多)从何入手呢,要是能单步调试跟进到jdk源码里并且能查看其中的局部变量最好了。
可惜的是sun提供的jdk并不能查看运行中的局部变量
Oracle RAC Failover 详解
aijuans
oracle
Oracle RAC 同时具备HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基础就是Failover(故障转移). 它指集群中任何一个节点的故障都不会影响用户的使用,连接到故障节点的用户会被自动转移到健康节点,从用户感受而言, 是感觉不到这种切换。
Oracle 10g RAC 的Failover 可以分为3种:
1. Client-Si
form表单提交数据编码方式及tomcat的接受编码方式
antonyup_2006
JavaScript tomcat 浏览器 互联网 servlet
原帖地址:http://www.iteye.com/topic/266705
form有2中方法把数据提交给服务器,get和post,分别说下吧。
(一)get提交
1.首先说下客户端(浏览器)的form表单用get方法是如何将数据编码后提交给服务器端的吧。
对于get方法来说,都是把数据串联在请求的url后面作为参数,如:http://localhost:
JS初学者必知的基础
百合不是茶
js函数 js入门基础
JavaScript是网页的交互语言,实现网页的各种效果,
JavaScript 是世界上最流行的脚本语言。
JavaScript 是属于 web 的语言,它适用于 PC、笔记本电脑、平板电脑和移动电话。
JavaScript 被设计为向 HTML 页面增加交互性。
许多 HTML 开发者都不是程序员,但是 JavaScript 却拥有非常简单的语法。几乎每个人都有能力将小的
iBatis的分页分析与详解
bijian1013
java ibatis
分页是操作数据库型系统常遇到的问题。分页实现方法很多,但效率的差异就很大了。iBatis是通过什么方式来实现这个分页的了。查看它的实现部分,发现返回的PaginatedList实际上是个接口,实现这个接口的是PaginatedDataList类的对象,查看PaginatedDataList类发现,每次翻页的时候最
精通Oracle10编程SQL(15)使用对象类型
bijian1013
oracle 数据库 plsql
/*
*使用对象类型
*/
--建立和使用简单对象类型
--对象类型包括对象类型规范和对象类型体两部分。
--建立和使用不包含任何方法的对象类型
CREATE OR REPLACE TYPE person_typ1 as OBJECT(
name varchar2(10),gender varchar2(4),birthdate date
);
drop type p
【Linux命令二】文本处理命令awk
bit1129
linux命令
awk是Linux用来进行文本处理的命令,在日常工作中,广泛应用于日志分析。awk是一门解释型编程语言,包含变量,数组,循环控制结构,条件控制结构等。它的语法采用类C语言的语法。
awk命令用来做什么?
1.awk适用于具有一定结构的文本行,对其中的列进行提取信息
2.awk可以把当前正在处理的文本行提交给Linux的其它命令处理,然后把直接结构返回给awk
3.awk实际工
JAVA(ssh2框架)+Flex实现权限控制方案分析
白糖_
java
目前项目使用的是Struts2+Hibernate+Spring的架构模式,目前已经有一套针对SSH2的权限系统,运行良好。但是项目有了新需求:在目前系统的基础上使用Flex逐步取代JSP,在取代JSP过程中可能存在Flex与JSP并存的情况,所以权限系统需要进行修改。
【SSH2权限系统的实现机制】
权限控制分为页面和后台两块:不同类型用户的帐号分配的访问权限是不同的,用户使
angular.forEach
boyitech
AngularJS AngularJS API angular.forEach
angular.forEach 描述: 循环对obj对象的每个元素调用iterator, obj对象可以是一个Object或一个Array. Iterator函数调用方法: iterator(value, key, obj), 其中obj是被迭代对象,key是obj的property key或者是数组的index,value就是相应的值啦. (此函数不能够迭代继承的属性.)
java-谷歌面试题-给定一个排序数组,如何构造一个二叉排序树
bylijinnan
二叉排序树
import java.util.LinkedList;
public class CreateBSTfromSortedArray {
/**
* 题目:给定一个排序数组,如何构造一个二叉排序树
* 递归
*/
public static void main(String[] args) {
int[] data = { 1, 2, 3, 4,
action执行2次
Chen.H
JavaScript jsp XHTML css Webwork
xwork 写道 <action name="userTypeAction"
class="com.ekangcount.website.system.view.action.UserTypeAction">
<result name="ssss" type="dispatcher">
[时空与能量]逆转时空需要消耗大量能源
comsci
能源
无论如何,人类始终都想摆脱时间和空间的限制....但是受到质量与能量关系的限制,我们人类在目前和今后很长一段时间内,都无法获得大量廉价的能源来进行时空跨越.....
在进行时空穿梭的实验中,消耗超大规模的能源是必然
oracle的正则表达式(regular expression)详细介绍
daizj
oracle 正则表达式
正则表达式是很多编程语言中都有的。可惜oracle8i、oracle9i中一直迟迟不肯加入,好在oracle10g中终于增加了期盼已久的正则表达式功能。你可以在oracle10g中使用正则表达式肆意地匹配你想匹配的任何字符串了。
正则表达式中常用到的元数据(metacharacter)如下:
^ 匹配字符串的开头位置。
$ 匹配支付传的结尾位置。
*
报表工具与报表性能的关系
datamachine
报表工具 birt 报表性能 润乾报表
在选择报表工具时,性能一直是用户关心的指标,但是,报表工具的性能和整个报表系统的性能有多大关系呢?
要回答这个问题,首先要分析一下报表的处理过程包含哪些环节,哪些环节容易出现性能瓶颈,如何优化这些环节。
一、报表处理的一般过程分析
1、用户选择报表输入参数后,报表引擎会根据报表模板和输入参数来解析报表,并将数据计算和读取请求以SQL的方式发送给数据库。
2、
初一上学期难记忆单词背诵第一课
dcj3sjt126com
word english
what 什么
your 你
name 名字
my 我的
am 是
one 一
two 二
three 三
four 四
five 五
class 班级,课
six 六
seven 七
eight 八
nince 九
ten 十
zero 零
how 怎样
old 老的
eleven 十一
twelve 十二
thirteen
我学过和准备学的各种技术
dcj3sjt126com
技术
语言VB https://msdn.microsoft.com/zh-cn/library/2x7h1hfk.aspxJava http://docs.oracle.com/javase/8/C# https://msdn.microsoft.com/library/vstudioPHP http://php.net/manual/en/Html
struts2中token防止重复提交表单
蕃薯耀
重复提交表单 struts2中token
struts2中token防止重复提交表单
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年7月12日 11:52:32 星期日
ht
线性查找二维数组
hao3100590
二维数组
1.算法描述
有序(行有序,列有序,且每行从左至右递增,列从上至下递增)二维数组查找,要求复杂度O(n)
2.使用到的相关知识:
结构体定义和使用,二维数组传递(http://blog.csdn.net/yzhhmhm/article/details/2045816)
3.使用数组名传递
这个的不便之处很明显,一旦确定就是不能设置列值
//使
spring security 3中推荐使用BCrypt算法加密密码
jackyrong
Spring Security
spring security 3中推荐使用BCrypt算法加密密码了,以前使用的是md5,
Md5PasswordEncoder 和 ShaPasswordEncoder,现在不推荐了,推荐用bcrpt
Bcrpt中的salt可以是随机的,比如:
int i = 0;
while (i < 10) {
String password = "1234
学习编程并不难,做到以下几点即可!
lampcy
java html 编程语言
不论你是想自己设计游戏,还是开发iPhone或安卓手机上的应用,还是仅仅为了娱乐,学习编程语言都是一条必经之路。编程语言种类繁多,用途各 异,然而一旦掌握其中之一,其他的也就迎刃而解。作为初学者,你可能要先从Java或HTML开始学,一旦掌握了一门编程语言,你就发挥无穷的想象,开发 各种神奇的软件啦。
1、确定目标
学习编程语言既充满乐趣,又充满挑战。有些花费多年时间学习一门编程语言的大学生到
架构师之mysql----------------用group+inner join,left join ,right join 查重复数据(替代in)
nannan408
right join
1.前言。
如题。
2.代码
(1)单表查重复数据,根据a分组
SELECT m.a,m.b, INNER JOIN (select a,b,COUNT(*) AS rank FROM test.`A` A GROUP BY a HAVING rank>1 )k ON m.a=k.a
(2)多表查询 ,
使用改为le
jQuery选择器小结 VS 节点查找(附css的一些东西)
Everyday都不同
jquery css name选择器 追加元素 查找节点
最近做前端页面,频繁用到一些jQuery的选择器,所以特意来总结一下:
测试页面:
<html>
<head>
<script src="jquery-1.7.2.min.js"></script>
<script>
/*$(function() {
$(documen
关于EXT
tntxia
ext
ExtJS是一个很不错的Ajax框架,可以用来开发带有华丽外观的富客户端应用,使得我们的b/s应用更加具有活力及生命力。ExtJS是一个用 javascript编写,与后台技术无关的前端ajax框架。因此,可以把ExtJS用在.Net、Java、Php等各种开发语言开发的应用中。
ExtJs最开始基于YUI技术,由开发人员Jack
一个MIT计算机博士对数学的思考
xjnine
Math
在过去的一年中,我一直在数学的海洋中游荡,research进展不多,对于数学世界的阅历算是有了一些长进。为什么要深入数学的世界?作为计算机的学生,我没有任何企图要成为一个数学家。我学习数学的目的,是要想爬上巨人的肩膀,希望站在更高的高度,能把我自己研究的东西看得更深广一些。说起来,我在刚来这个学校的时候,并没有预料到我将会有一个深入数学的旅程。我的导师最初希望我去做的题目,是对appe