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

第一个Qt开发实例(一个Push Button按钮和两个Label)【包括如何在QtCreator中创建新工程、代码详解、编译、环境变量配置、测试程序运行等】

目录

  • Qt开发环境QtCreator的安装、配置
  • 在QtCreator中创建新工程
  • 在`Forms→mainwindow.ui`中拖曳出我们要的图形按钮
  • 查看拖曳出按钮后的代码
  • 为`pushButton`这个图形添加回调函数
  • 编译工程
  • 关闭开发板上QT的GUI(选做)
  • 禁止LCD黑屏(选做)
  • 设置Qt运行的环境变量
  • 运行Qt程序
  • 如何让程序在系统启动时运行
  • 附完整源代码
    • mainwindow.ui 中的代码
    • mainwindow.h 中的代码
    • mainwindow.cpp 中的代码
    • main.cpp 中的代码
  • 附编译完成后完整的工程目录

Qt开发环境QtCreator的安装、配置

详情见 https://blog.csdn.net/wenhao_ir/article/details/145367198

在QtCreator中创建新工程

在这里插入图片描述
在这里插入图片描述
然后设置工程的名字和位置:
在这里插入图片描述
上图中点击Next…
我们这里使用qmake进行构建,所以选择qmake:
在这里插入图片描述
上图中继续点击Next…
在这里插入图片描述
这里是设置Qt的C++代码中类的名字和相关文件的名字,这些使用默认的就可以了。

上图中继续点击Next…
在这里插入图片描述
上图是设置语言的转换,不是编译语言的转换哈,就是英语、汉语、法语的那种语言,我们不需要作这个操作,所以继续Next。
在这里插入图片描述
在这里插入图片描述
这里选择在博文 https://blog.csdn.net/wenhao_ir/article/details/145367198 中配置的kit,即 qt_klt_swh_01:
在这里插入图片描述
继续Next…
在这里插入图片描述
然后Finish…
在这里插入图片描述
上面的警告:

Warning: The code model could not parse an included file, which might lead to incorrect code completion and highlighting, for example.

不用管,这个警告是由于下面这句代码出现的:

#include <QApplication>

由于目录:

/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include/c++

不存在,而导致的。

但我们这里不用管,因为我们后面的代码不会使用头文件#include <QApplication>

Forms→mainwindow.ui中拖曳出我们要的图形按钮

双击文件mainwindow.ui
在这里插入图片描述
在这里插入图片描述
Buttons里拖曳出一个Push Button【按住下图中的Push Button不放往中间拖】
在这里插入图片描述
按住下图中的Push Button不放往中间拖:
在这里插入图片描述
不妨重命名为LED
在这里插入图片描述
左侧图形分类栏往下拉,找到Display Widgets,然后拖曳出两个Label
在这里插入图片描述
在这里插入图片描述

查看拖曳出按钮后的代码

点击下图中的Edit
在这里插入图片描述
然后就可以看到刚才拖曳出的三个图形对应的源文件(xml语法写成):
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><property name="geometry"><rect><x>0</x><y>0</y><width>800</width><height>600</height></rect></property><property name="windowTitle"><string>MainWindow</string></property><widget class="QWidget" name="centralwidget"><widget class="QPushButton" name="pushButton"><property name="geometry"><rect><x>90</x><y>130</y><width>89</width><height>25</height></rect></property><property name="text"><string>LED</string></property></widget><widget class="QLabel" name="label"><property name="geometry"><rect><x>260</x><y>80</y><width>71</width><height>41</height></rect></property><property name="text"><string>TextLabel</string></property></widget><widget class="QLabel" name="label_2"><property name="geometry"><rect><x>260</x><y>160</y><width>71</width><height>31</height></rect></property><property name="text"><string>TextLabel</string></property></widget></widget><widget class="QMenuBar" name="menubar"><property name="geometry"><rect><x>0</x><y>0</y><width>800</width><height>22</height></rect></property></widget><widget class="QStatusBar" name="statusbar"/></widget><resources/><connections/>
</ui>

从这个xml文件中,我们可以看到有三个图形,名字分别为:pushButton、label、label_2。

这里不妨先把文件mainwindow.ui保存一下,快捷键CTRL+S。

然后我们要给pushButton这个图形添加回调函数。

pushButton这个图形添加回调函数

打开 Headers→mainwindow.h
在这里插入图片描述
把下面的代码:

private slots:void on_pushButton_clicked();

复制到下面的位置:
在这里插入图片描述
作用是对函数on_pushButton_clicked进行声明,当然是在类MainWindow中进行声明。
其中的关键词slots的作用见我的另一篇博文 https://blog.csdn.net/wenhao_ir/article/details/145421581

上面代码中的Q_OBJECT的解释如下:
Q_OBJECT 是 Qt 中的一个宏,通常出现在声明继承自 QObject 的类中(如 QMainWindow)。它是 Qt 的元对象系统的一部分,用来启用类的信号和槽机制、事件处理等功能。

然后去文件mainwindow.cpp中去实现函数on_pushButton_clicked
在这里插入图片描述
我们在类的外部去定义它,代码如下:

void MainWindow::on_pushButton_clicked()
{qDebug()<<"LED clicked";
}

上面的函数 qDebug()需要引入头文件#include <QDebug>,写完后,文件mainwindow.cpp中的完整代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{qDebug()<<"LED clicked";
}

这段代码就是开头几句不太好理解,那个其实是类的构造函数的初始化列表,详情见 https://blog.csdn.net/wenhao_ir/article/details/145422254
看完上面这篇博文后就可以分析下面的代码了:

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}

首先要知道这个类的原型其实是定义在Headers→mainwindow.h中的,其完整定义如下:

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;
};

上面代码中的Q_OBJECT的解释如下:
Q_OBJECT 是 Qt 中的一个宏,通常出现在声明继承自 QObject 的类中(如 QMainWindow)。它是 Qt 的元对象系统的一部分,用来启用类的信号和槽机制、事件处理等功能。

Ui是一个命名空间,这个在以前使用OpenCV时已经比较熟悉了。

回到对下面代码的分析:

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}

这是在类MainWindow的声明外定义类MainWindow的构造函数,它的作用是初始化 MainWindow 界面。我们来详细解析其中的语法和逻辑:

这段代码是 MainWindow 类的 构造函数,它的作用是初始化 MainWindow 界面。我们来详细解析其中的语法和逻辑:


1. MainWindow::MainWindow(QWidget *parent)

  • MainWindow 是类的构造函数,MainWindow(QWidget *parent) 表示它可以接收一个 QWidget *parent 指针,默认情况下,这个 parent 可能为空(即 nullptr)。
  • parent 参数用于 Qt 的 父子对象机制,确保在销毁 parent 时,其子对象(即 MainWindow 的实例)也会被自动销毁,避免内存泄漏。

2. QMainWindow(parent)

  • 这个是 初始化列表中的一项内容,关于初始化列表的详细介绍见博文 https://blog.csdn.net/wenhao_ir/article/details/145422254
  • :QMainWindow(parent) 调用了 QMainWindow 的构造函数,并将 parent 传递给它。
  • QMainWindowMainWindow 的基类,这样可以正确初始化 QMainWindow 的内部成员,使 MainWindow 继承窗口管理的功能。

3. ui(new Ui::MainWindow)

  • 这个也是 初始化列表中的一项内容,关于初始化列表的详细介绍见博文 https://blog.csdn.net/wenhao_ir/article/details/145422254
  • ui 是一个指向 Ui::MainWindow 的指针【Ui:是一个命名空间】,通过 new Ui::MainWindow 在堆上创建 UI 界面对象(ui 由 Qt Designer 生成)。
  • 这里 Ui::MainWindow 负责界面元素的管理,比如按钮、标签、文本框等。

4. ui->setupUi(this);

  • setupUi(this) 这个函数由 Qt Designer 生成,它的作用是:
    • ui 设计的界面组件添加到 MainWindow 界面上
    • 自动连接 Qt Designer 里设定的信号和槽(如果使用了 Qt 的自动连接机制)。
    • 初始化 UI 控件,比如设置按钮的名称、默认状态等。

小结
该构造函数的作用是:

  1. 调用基类 QMainWindow 的构造函数,确保 MainWindow 作为窗口正确初始化。
  2. 创建 Ui::MainWindow 实例,用于管理 UI 界面。
  3. 调用 setupUi(this);,设置 UI 界面元素,使其在 MainWindow 窗口上可见。

你可以理解成:

  • QMainWindow(parent) 负责窗口管理;
  • ui(new Ui::MainWindow) 负责界面管理;
  • ui->setupUi(this) 负责把界面元素加载到 MainWindow 中。

这样 MainWindow 才能正确显示界面,并响应用户操作。

编译工程

在这里插入图片描述
编译的时候右下角会提示编译进度。
在这里插入图片描述

有两个警告不用管(因为不是语法上的错,只是配置上的一点瑕疵):
在这里插入图片描述
编译出的结果在工程目录中,具体如下:
在这里插入图片描述
在这里插入图片描述
上图中的test_01就是生成的可执行程序。
我们可以按照博文 https://blog.csdn.net/wenhao_ir/article/details/144651612 的方法查看下它是不是运行于ARM架构上的可执行文件,这样可以检查我们的gcc编译器是否配置正确。

file /home/book/Qt_project/Q001_test_01/build-test_01-qt_kit_swh_01-Debug/test_01

运行结果如下:

/test_01: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-, for GNU/Linux 4.9.0, not stripped

从中可以看出,它是ARM架构的,并且需要动态链接库的支持,所以需要检查开发板上有没有配置Qt运行环境,我在博文 https://blog.csdn.net/wenhao_ir/article/details/145367198 【搜索“那么如何判断开发板上有没有配置Qt运行环境呢”】中已经检查过了。

test_01放到NFS文件系统的目录中:
在这里插入图片描述

关闭开发板上QT的GUI(选做)

注意:后来我发现其实这一步并不需要。没有这一步测试程序同样能正常运行并且显示出测试程序绘制GUI界面
注意:后来我发现其实这一步并不需要。没有这一步测试程序同样能正常运行并且显示出测试程序绘制GUI界面
注意:后来我发现其实这一步并不需要。没有这一步测试程序同样能正常运行并且显示出测试程序绘制GUI界面
打开串口终端→打开开发板

参考博文 https://blog.csdn.net/wenhao_ir/article/details/144591685 用一次性有效的方法(即不是永久有效的方法)关掉自带的QT的GUI界面。

这里用一次性的方法,即不是永久有效的方法:
执行下面这条命令:

/etc/init.d/S99myirhmi2 stop

执行完成后再用手去操作屏幕上的UI界面,UI界面就没有任何反应了,说明QT的GUI界面被关掉了。

禁止LCD黑屏(选做)

注意:后来我发现其实这一步并不一定需要,因为很多时候我们的测试时间都是比较短的。
注意:后来我发现其实这一步并不一定需要,因为很多时候我们的测试时间都是比较短的。
注意:后来我发现其实这一步并不一定需要,因为很多时候我们的测试时间都是比较短的。
关闭开发析上QT的GUI后,还需要禁止LCD黑屏,否则过一会儿LCD会黑屏,用下面的命令实现:

echo -e "\033[9;0]" > /dev/tty0

这条命令的详细解释见 https://blog.csdn.net/wenhao_ir/article/details/145431203

设置Qt运行的环境变量

export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_QPA_FONTDIR=/usr/lib/fonts/

上面三条命令的详细解释见 https://blog.csdn.net/wenhao_ir/article/details/145433648 【这篇博文中包含第1条命令生效的必要条件,还包括如果让三条命令一直有效的方法,可以看一下。】

运行Qt程序

挂载网络文件系统

mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt

然后运行我们编译出的Qt测试程序:

注意:运行前请确保Qt运行的环境变量设置好了。
注意:运行前请确保Qt运行的环境变量设置好了。

/mnt/qt_test01/test_01

运行结果如下:
在这里插入图片描述
提示先不用管,这是正常的,教程视频中也有这样的提示。

同时,屏幕上也出现了我们用Qt绘制的界面:
在这里插入图片描述
然后用手点击LED按钮…
在这里插入图片描述
发现每点击一次就打印出一次字符串“LED clicked”,这样测试就成功了。

如何让程序在系统启动时运行

参考:博文 https://blog.csdn.net/wenhao_ir/article/details/144591685 【查看“永久有效的关掉QT的GUI界面最简单的方法”】 和 视频 https://www.bilibili.com/video/BV1HT421k7GW/?spm_id_from=333.1391.0.0&p=7&vd_source=8fb767d1739ea6b35c7177ba909eed36【10分15秒开始看,并且要看把视频看完了再开始做,因为视频中第1次的方法是有问题的。】

附完整源代码

mainwindow.ui 中的代码

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><property name="geometry"><rect><x>0</x><y>0</y><width>800</width><height>600</height></rect></property><property name="windowTitle"><string>MainWindow</string></property><widget class="QWidget" name="centralwidget"><widget class="QPushButton" name="pushButton"><property name="geometry"><rect><x>90</x><y>130</y><width>89</width><height>25</height></rect></property><property name="text"><string>LED</string></property></widget><widget class="QLabel" name="label"><property name="geometry"><rect><x>260</x><y>80</y><width>71</width><height>41</height></rect></property><property name="text"><string>TextLabel</string></property></widget><widget class="QLabel" name="label_2"><property name="geometry"><rect><x>260</x><y>160</y><width>71</width><height>31</height></rect></property><property name="text"><string>TextLabel</string></property></widget></widget><widget class="QMenuBar" name="menubar"><property name="geometry"><rect><x>0</x><y>0</y><width>800</width><height>22</height></rect></property></widget><widget class="QStatusBar" name="statusbar"/></widget><resources/><connections/>
</ui>

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 on_pushButton_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp 中的代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{qDebug()<<"LED clicked";
}

main.cpp 中的代码

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

附编译完成后完整的工程目录

https://pan.baidu.com/s/1yhnmQGpnYl2I-urBsQt5Ew?pwd=88iw
注意:QtCreator的工程换位置后一定要更换一下Build directory的位置,因为在QtCreator中Build directory是一个绝对路径,详情见 https://blog.csdn.net/wenhao_ir/article/details/145458743

相关文章:

第一个Qt开发实例(一个Push Button按钮和两个Label)【包括如何在QtCreator中创建新工程、代码详解、编译、环境变量配置、测试程序运行等】

目录 Qt开发环境QtCreator的安装、配置在QtCreator中创建新工程在Forms→mainwindow.ui中拖曳出我们要的图形按钮查看拖曳出按钮后的代码为pushButton这个图形添加回调函数编译工程关闭开发板上QT的GUI(选做)禁止LCD黑屏(选做)设置Qt运行的环境变量运行Qt程序如何让程序在系统启…...

算法题(58):盛水最多的容器

审题&#xff1a; 需要我们找到数组height中的数据构建的可以盛水最多的容器&#xff0c;并把容量返回 思路&#xff1a; 容量 最短的容器边界 * 容器宽度 方法一&#xff1a;双层for循环 我们可以把所有情况枚举出来&#xff0c;然后维护一个最大容量 方法二&#xff1a;双指…...

MyBatis持久层框架

第1章 Mybatis框架入门 1.1 Mybatis简介 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下&#xff0c; iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github。 MyBati…...

DeePseek结合PS!批量处理图片的方法教程

​ ​ 今天我们来聊聊如何利用deepseek和Photoshop&#xff08;PS&#xff09;实现图片的批量处理。 传统上&#xff0c;批量修改图片尺寸、分辨率等任务往往需要编写脚本或手动处理&#xff0c;而现在有了AI的辅助&#xff0c;我们可以轻松生成PS脚本&#xff0c;实现自动化处…...

【C++】多态(下)

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C的多态&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 4. 多态的原理4.1 虚函数表4.2 多态的原理4.3 动态绑定与静态绑定 5. 单继承和多继承关系的虚…...

C++ 入门速通-第4章【黑马】

内容来源于&#xff1a;黑马 集成开发环境&#xff1a;CLion 先前学习完了C第1章的内容&#xff1a; C 入门速通-第1章【黑马】-CSDN博客 C 入门速通-第2章【黑马】-CSDN博客 C 入门速通-第3章【黑马】-CSDN博客 下面继续学习第4章&#xff1a; 结构体的基本应用&#xff1…...

Gauss高斯:分布键

分布键是决定数据分布到不同节点的列&#xff0c;直接影响数据的存储位置和后续查询的数据流向. 在分布式数据库系统中&#xff0c;分布键用于决定数据如何在不同的节点或分区中分布。 作用 分类 分布键的选择 避免常量过滤条件的字段&#xff1a;在选择分布键时&#xff0c;…...

Spring Security(maven项目) 3.0.3.1版本 - 动态JDBC认证

前言&#xff1a; 通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往…...

2024年半导体行业IPO与融资情况统计分析

重点内容速览&#xff1a; 1. IPO企业主要集中在科创板 2. 全年半导体行业融资事件超700起 2024年半导体行业的IPO和融资情况呈现出了显著的波动和变化。由于IPO政策的收紧&#xff0c;2024年成功上市的企业相比2023年的22家和2022年的45家有了显著降低&#xff0c;今年仅有1…...

Java 进阶 01 —— 5 分钟回顾一下 Java 基础知识

Java 进阶 01 —— 5 分钟回顾一下 Java 基础知识 Java 生态圈Java 跨平台的语言 Java 虚拟机规范JVM 跨语言的平台多语言混合编程两种架构 举例 JVM 的生命周期 虚拟机的启动虚拟机的执行虚拟机的退出 JVM 发展历程 Sun Classic VMExact VMHotSpotBEA 的 JRockitIBM 的 J9 …...

java进阶文章链接

java 泛型&#xff1a;java 泛型详解-绝对是对泛型方法讲解最详细的&#xff0c;没有之一 Java 泛型&#xff0c;你了解类型擦除吗&#xff1f; java 注解&#xff1a;深入理解Java注解类型 秒懂&#xff0c;Java 注解 &#xff08;Annotation&#xff09;你可以这样学 jav…...

【从零开始入门unity游戏开发之——C#篇48】C#补充知识点——静态导入、异常捕获和异常筛选器、nameof运算符

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…...

离散浣熊优化算法(DCOA)求解大规模旅行商问题(Large-Scale Traveling Salesman Problem,LTSP),MATLAB代码

大规模旅行商问题&#xff08;Large-Scale Traveling Salesman Problem&#xff0c;LTSP&#xff09;是经典旅行商问题&#xff08;TSP&#xff09;在规模上的扩展&#xff0c;是一个具有重要理论和实际意义的组合优化问题&#xff1a; 一、问题定义 给定一组城市和它们之间的…...

联邦学习中的一些专业术语

1. **Model Mixture&#xff08;模型混合&#xff09;** - **含义**&#xff1a;在联邦学习中&#xff0c;不同客户端的模型可能会被混合或融合&#xff0c;以生成一个更通用的全局模型。这种技术可以用于处理客户端之间的异质性。 - **应用场景**&#xff1a;当不同客户…...

从零开始实现一个双向循环链表:C语言实战

文章目录 1链表的再次介绍2为什么选择双向循环链表&#xff1f;3代码实现&#xff1a;从初始化到销毁1. 定义链表节点2. 初始化链表3. 插入和删除节点4. 链表的其他操作5. 打印链表和判断链表是否为空6. 销毁链表 4测试代码5链表种类介绍6链表与顺序表的区别7存储金字塔L0: 寄存…...

4种架构的定义和关联

文章目录 **1. 各架构的定义****业务架构&#xff08;Business Architecture&#xff09;****应用架构&#xff08;Application Architecture&#xff09;****数据架构&#xff08;Data Architecture&#xff09;****技术架构&#xff08;Technology Architecture&#xff09;*…...

一文解释pytorch 中的 squeeze() 和 unsqueeze()函数(全网最详细版)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;零基础入门PyTorch框架_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 …...

4. k8s二进制集群之ETCD集群证书生成

安装cfssl工具配置CA证书请求文件创建CA证书创建CA证书策略配置etcd证书请求文件生成etcd证书 继续上一篇文章《负载均衡器高可用部署》下面介绍一下etcd证书生成配置。其中涉及到的ip地址和证书基本信息请替换成你自己的信息。 安装cfssl工具 下载cfssl安装包 https://github…...

验证工具:VCS概识

是的,我熟悉 VCS(Synopsys Verilog Compiler Simulator),它是芯片验证领域广泛使用的商用仿真工具之一,由Synopsys公司开发。以下是对VCS的详细介绍,包括其特点、应用场景和常见使用技巧: 一、VCS常见介绍 1. VCS的核心特点 编译型仿真器:VCS将RTL(Verilog/SystemVer…...

Linux 的 sysfs 伪文件系统介绍【用户可以通过文件操作与内核交互(如调用内核函数),而无需编写内核代码】

1. 什么是 sysfs伪文件系统&#xff1f; sysfs 是 Linux 内核提供的 伪文件系统&#xff0c;用于向用户空间暴露内核对象的信息和控制接口。它是 procfs 的补充&#xff0c;主要用于管理 设备、驱动、内核子系统 等信息&#xff0c;使用户可以通过文件操作&#xff08;如用户空…...

4.[ISITDTU 2019]EasyPHP

进入题目页面如下 给出PHP源码进行代码审计 <?php // 高亮显示当前文件的源代码 highlight_file(__FILE__);// 从 GET 请求中获取名为 _ 的参数&#xff0c;并将其赋值给变量 $_ // 符号用于抑制可能出现的错误信息 $_ $_GET[_];// 使用正则表达式对 $_ 变量的值进行匹配…...

【数学】矩阵、向量(内含矩阵乘法C++)

目录 一、前置知识&#xff1a;向量&#xff08;一列或一行的矩阵&#xff09;、矩阵1. 行向量2. 列向量3. 向量其余基本概念4. 矩阵基本概念5. 关于它们的细节 二、运算1. 转置&#xff08;1&#xff09;定义&#xff08;2&#xff09;性质 2. 矩阵&#xff08;向量&#xff0…...

Centos 8 离线升级openssh 9.9

背景 根据云服务漏检报告&#xff0c;需要升级云服务器openssh服务&#xff08;离线环境&#xff09;。本文将采用rpm包形式&#xff0c;将openssh服务由OpenSSH_8.0p1 升级至OpenSSH_9.9p1。准备一台能够联网的服务器&#xff08;简称server1&#xff09;用于下载程序包&#…...

Java入门进阶

文章目录 1、常用API 1.1、Math1.2、System1.3、Object1.4、Arrays1.5、基本类型包装类 1.5.1、基本类型包装类概述1.5.2、Integer1.5.3、int和String相互转换1.5.4、自动装箱和拆箱 1.6、日期类 1.6.1、Date类1.6.2、SimpleDateFormat类 1.6.2.1、格式化&#xff08;从Date到…...

torchtext.get_tokenizer

文章目录 1. 说明2. pytorch代码 1. 说明 假设我们有一个句子如下&#xff1a;You can now install TorchText using pip! 分词后可得&#xff1a;[you, can, now, install, torchtext, using, pip, !] 2. pytorch代码 import torchtext from torchtext.data import get_tok…...

​零技术开始,但想用 Next.js 基于 React 构建一个类似 18Touch 的网站​

如果你从零技术开始&#xff0c;但想用 Next.js 基于 React 构建一个类似 18Touch 的网站&#xff0c;以下是一个详细的规划和学习路径。这个网站看起来是一个内容展示型网站&#xff0c;可能包含博客、产品展示、用户交互等功能。 1. 项目规划 1.1 确定核心功能 根据 18Touc…...

python实现多路视频,多窗口播放功能

系列Python开发 文章目录 系列Python开发前言一、python实现多路视频播放功能二、代码实现1. http申请视频流地址并cv2播放功能 三、打包代码实现生成可执行文件 总结 前言 一、python实现多路视频播放功能 服务端开发后通常需要做功能测试、性能测试&#xff0c;通常postman、…...

设计模式---观察者模式

设计模式—观察者模式 定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 主要解决的问题&#xff1a;一个对象状态改变给其他对象通知的问题&#xff0c;而且要考虑到易用和低耦合&#xff0c;…...

TensorFlow深度学习实战(6)——回归分析详解

TensorFlow深度学习实战&#xff08;6&#xff09;——回归分析详解 0. 前言1. 回归分析简介2. 线性回归2.1 简单线性回归2.2 多重线性回归2.3 多元线性回归 3. 构建基于线性回归的神经网络3.1 使用 TensorFlow 进行简单线性回归3.2 使用 TensorFlow 进行多元线性回归和多重线性…...

Deepseek v3R1 学习笔记

o1 o1 模型在训练过程中混合了多种奖励函数的设计方法&#xff0c;并且尝试从结果监督转向过程监督&#xff0c;在中间过程进行打分 使用的搜索策略&#xff1a;基于树的搜索和基于顺序修改的搜索 R1 R1-Zero 是从基础模型开始&#xff0c;完全由强化学习驱动&#xff0c;不…...

Spring Boot统一异常拦截实践指南

Spring Boot统一异常拦截实践指南 一、为什么需要统一异常处理 在Web应用开发中&#xff0c;异常处理是保证系统健壮性和用户体验的重要环节。传统开发模式中常见的痛点包括&#xff1a; 异常处理逻辑分散在各个Controller中错误响应格式不统一敏感异常信息直接暴露给客户端…...

lmk内存压力测试工具mem-pressure源码剖析

背景&#xff1a; android系统开发过程中&#xff0c;经常会遇到一些low memory kill的问题&#xff0c;在分析这些系统低内存导致被杀问题时候&#xff0c;经常因为不好复现而成为一个比较烦恼的阻碍。因为这种低内存问题本身就不属于一种功能操作类型的问题&#xff0c;属于…...

物联网 STM32【源代码形式-ESP8266透传】连接OneNet IOT从云产品开发到底层MQTT实现,APP控制 【保姆级零基础搭建】

一、MQTT介绍 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;是一种基于发布/订阅模式的轻量级通讯协议&#xff0c;构建于TCP/IP协议之上。它最初由IBM在1999年发布&#xff0c;主要用于在硬件性能受限和网络状况不佳的情…...

【大模型】AI 辅助编程操作实战使用详解

目录 一、前言 二、AI 编程介绍 2.1 AI 编程是什么 2.1.1 为什么需要AI辅助编程 2.2 AI 编程主要特点 2.3 AI编程底层核心技术 2.4 AI 编程核心应用场景 三、AI 代码辅助编程解决方案 3.1 AI 大模型平台 3.1.1 AI大模型平台代码生成优缺点 3.2 AI 编码插件 3.3 AI 编…...

Eclipse IDE 快捷键大全

文章目录 简介 ✨常用编辑快捷键 ⌨️基础编辑操作查找和定位代码优化 调试快捷键 &#x1f41b;编辑器通用快捷键 &#x1f4dd;窗口操作快捷键 &#x1fa9f;特殊功能快捷键 &#x1f527;重构相关快捷键 &#x1f504;提示 &#x1f4a1; 简介 ✨ Eclipse 作为一款强大的集…...

ES面试题

1、Elasticsearch的基本构成&#xff1a; &#xff08;1&#xff09;index 索引&#xff1a; 索引类似于mysql 中的数据库&#xff0c;Elasticesearch 中的索引是存在数据的地方&#xff0c;包含了一堆有相似结构的文档数据。 &#xff08;2&#xff09;type 类型&#xff1a…...

设置git区分大小写

设置git区分大小写 1.全局设置 (影响全部仓库): git config --global core.ignorecase false2.仓库级别设置 (影响当前仓库): git config core.ignorecase false3.已经提交了大小写不一致的文件处理: git mv -f OldName newName # 强制重命名 git commit -m "Fix cas…...

0205算法:最长连续序列、三数之和、排序链表

力扣128&#xff1a;最长连续序列 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 class Solution {public int longestConsecutive(in…...

VLAN 基础 | 不同 VLAN 间通信实验

注&#xff1a;本文为 “ Vlan 间通信” 相关文章合辑。 英文引文&#xff0c;机翻未校。 图片清晰度限于原文图源状态。 未整理去重。 How to Establish Communications between VLANs? 如何在 VLAN 之间建立通信&#xff1f; Posted on November 20, 2015 by RouterSwi…...

DeepSeek各版本说明与优缺点分析

DeepSeek各版本说明与优缺点分析 DeepSeek是最近人工智能领域备受瞩目的一个语言模型系列&#xff0c;其在不同版本的发布过程中&#xff0c;逐步加强了对多种任务的处理能力。本文将详细介绍DeepSeek的各版本&#xff0c;从版本的发布时间、特点、优势以及不足之处&#xff0…...

DS图(中)(19)

文章目录 前言一、图的遍历广度优先遍历深度优先遍历 二、最小生成树Kruskal算法Prim算法两种方法对比 总结 前言 承上启下&#xff0c;我们来学习下图的中篇&#xff01;&#xff01;&#xff01; 一、图的遍历 图的遍历指的是遍历图中的顶点&#xff0c;主要有 广度优先遍历 …...

协同探索与导航文献整理

文章目录 1.SOAR:异构无人机协同探索与拍摄以实现快速自主重建2. RACER: 一种使用分散式无人机群进行快速协同探索的方法3. 使用协作式纳米无人机在非结构化环境中进行最小感知探索4.GVP-MREP:通过动态拓扑图上的 Voronoi 分区进行快速且通信高效的多无人机探索5.森林的快速多无…...

排序算法--计数排序

唯一种没有比较的排序(指没有前后比较,还是有交换的)。统计每个元素出现的次数&#xff0c;直接计算元素在有序序列中的位置&#xff0c;要求数据是整数且范围有限。适用于数据为小范围整数&#xff08;如年龄、成绩&#xff09;&#xff0c;数据重复率较高时效率更优。可用于小…...

吴恩达深度学习——对象检测

内容来自https://www.bilibili.com/video/BV1FT4y1E74V&#xff0c;仅为本人学习所用。 文章目录 对象定位特征点检测基于滑动窗口的目标检测算法原理将全连接层转化成卷积层通过卷积实现滑动窗口检测算法 YOLOBounding Box预测交并比非极大值抑制Anchor BoxYOLO检测训练集中预…...

BUU19 [BJDCTF2020]Easy MD51

题目 当点进去不知道干啥的时候&#xff1a;1.看源代码 2.抓包 3.看网络请求 F12 用bp抓包&#xff0c;在response消息头中有hint提示&#xff1a; select * from admin where passwordmd5($pass,true) 如果md5($pass,true)后是 or 1 那么整句话就是password or 1&a…...

蓝桥杯刷题DAY2:二维前缀和 一维前缀和 差分数组

闪耀的灯光 &#x1f4cc; 题目描述 蓝桥公园是一个适合夜间散步的好地方&#xff0c;公园可以被视为由 n m 个矩形区域构成。每个区域都有一盏灯&#xff0c;初始亮度为 a[i][j]。 小蓝可以选择一个大的矩形区域&#xff0c;并按下开关一次&#xff0c;这将使得该区域内每盏…...

HTB:EscapeTwo[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用nmap对靶机…...

vue 引入百度地图和高德天气 都得获取权限

vue接入百度地图---获取ak https://blog.csdn.net/qq_57144407/article/details/143430661 vue接入高德天气&#xff0c; 需要授权----获取key https://www.jianshu.com/p/09ddd698eebe...

AI大模型:DeepSeek

近期DeepSeek产生了很大的影响力。首先来自于性能,给了业内一个很好的释放,缓解了HPC以及大规模集群被卡的焦虑。通过实验证实了小规模团队(公开资料显示规模约150左右)在资源受限的情况下(2M H100 GPU时),依然可以完成对领先大模型的实现与部署。后续观察该团队是否可以…...

LeetCode - #198 打家劫舍

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...