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

Qt_day3_信号槽

目录

信号槽

1. 概念

2. 函数原型

3. 连接方式

3.1 自带信号 → 自带槽

3.2 自带信号 → 自定义槽

3.3 自定义信号

4. 信号槽传参

5. 对应关系

5.1 一对多

5.2 多对一


信号槽

1. 概念

    之前的程序界面只能看,不能交互,信号槽可以让界面进行人机交互。

    信号槽是Qt在C++基础上新增的特性,类似于其他编程中的回调机制,其目的是实现对象之间的通信。

使用信号槽需要具备两个先决条件:

  • 通信的对象必须继承自QObject

QObject是Qt所有对象的基类,内部规定了Qt最基础的对象特性。

  • 类中要包含Q_OBJECT宏

2. 函数原型

信号槽的建立是通过connect函数实现的。

// 信号槽连接函数
// 参数1:发射者,因发起的对象n.
// 参数2:信号函数,因的动作v.,需要使用SIGNAL()包裹函数名称
// 参数3:接收者,果执行的对象n.
// 参数4:槽函数,果的动作v.,需要使用SLOT()包裹函数名称
QObject::​connect(const QObject * sender, const char * signal, const QObject * receiver, const char * slot)                [static]

    信号函数一定来自于发射者,槽函数一定来自于接收者。信号槽的连接必须在发射者对象和接收者对象创建完成后进行,如果成功连接后,发射者或接收者对象销毁了,连接断开。

    信号槽的连接也可以程序员手动断开,只需要把connect函数改为disconnect即可,参数保持不变。

3. 连接方式

为了讲课,按照难易程度分为三种连接方式:

  • 自带信号 → 自带槽
  • 自带信号 → 自定义槽
  • 自定义信号 → 槽

3.1 自带信号 → 自带槽

    这种连接方式是最简单的连接方式,因为信号函数和槽函数都是Qt内置的,程序员只需要找到连接的四个参数,直接连接即可。

【例子】点击按钮,关闭窗口。

分析:

参数1:发射者——按钮对象

参数2:信号函数——点击

void QAbstractButton::​clicked()                    [signals]

参数3:接收者——窗口对象

参数4:槽函数——关闭

bool QWidget::​close()                            [slot]

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QPushButton>class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = 0);~Dialog();private:QPushButton *btn;
};#endif // DIALOG_H

dialog.cpp

#include "dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent)
{resize(400,400);btn = new QPushButton("关闭",this);btn->move(100,100);//  参数1:发射者——按钮对象//	参数2:信号函数——点击//	参数3:接收者——窗口对象//	参数4:槽函数——关闭connect(btn,SIGNAL(clicked()),this,SLOT(close()));
}Dialog::~Dialog()
{delete btn;
}

3.2 自带信号 → 自定义槽

    这种连接方式是使用的最多的一种连接方式,因为在实际开发中,Qt无法预设所有的槽函数情况,对于复杂的操作执行逻辑,需要程序员手动编写槽函数。

槽函数是一种特殊的成员函数。

【例子】点击按钮,窗口向右下角移动10个像素,并且后台输出当前窗口的位置。

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QPushButton>
#include <QDebug>class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = 0);~Dialog();private:QPushButton *btn;// 槽函数的声明
private slots: // 最小权限原则void mySlot(); // 自定义槽函数
};#endif // DIALOG_H

dialog.cpp

#include "dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent)
{resize(400,400);btn = new QPushButton("关闭",this);btn->move(100,100);// 连接信号槽connect(btn,SIGNAL(clicked()),this,SLOT(mySlot()));
}void Dialog::mySlot()
{// 先获得当前坐标int x = this->x();int y = this->y();// 移动move(x+10,y+10);// 输出当前窗口位置qDebug() << this->x() << this->y();
}Dialog::~Dialog()
{delete btn;
}

3.3 自定义信号

    自定义信号通常用于解决一些对象之间“远距离”通信问题,本节属于强行使用,因此并不是问题最优解,只是为了展示自定义信号的使用方式。

【例子】点击按钮,按钮上显示点击的次数。

先忽略自定义信号,展示正常解法:

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QPushButton>
#include <QDebug>class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = 0);~Dialog();private:QPushButton* btn;int count;private slots:void btnClickedSlot(); // 点击按钮的槽函数
};#endif // DIALOG_H

dialog.cpp

#include "dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent),count(0) // 构造初始化列表
{resize(400,400);btn = new QPushButton("0",this);btn->move(200,200);connect(btn,SIGNAL(clicked()),this,SLOT(btnClickedSlot()));
}void Dialog::btnClickedSlot()
{count++;// int → QStringQString text = QString::number(count);// 设置到按钮上显示btn->setText(text);
}Dialog::~Dialog()
{delete btn;
}

基于上面的解法,强行增加自定义信号发射环节:

     信号函数是一种特殊的函数,只有声明没有定义,声明后可以直接配合emit关键字发射。

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QPushButton>
#include <QDebug>class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = 0);~Dialog();private:QPushButton* btn;int count;signals:void countSignal(); // 自定义信号private slots:void btnClickedSlot(); // 点击按钮的槽函数void countSlot(); // 与自定义信号连接的槽函数
};#endif // DIALOG_H

dialog.cpp

#include "dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent),count(0) // 构造初始化列表
{resize(400,400);btn = new QPushButton("0",this);btn->move(200,200);connect(btn,SIGNAL(clicked()),this,SLOT(btnClickedSlot()));connect(this,SIGNAL(countSignal()),this,SLOT(countSlot()));
}void Dialog::btnClickedSlot()
{count++;// 发射自定义信号emit countSignal();
}/*** @brief Dialog::countSlot* 中转之后更新按钮显示的槽函数*/
void Dialog::countSlot()
{QString text = QString::number(count);btn->setText(text);
}Dialog::~Dialog()
{delete btn;
}

4. 信号槽传参

    信号槽可以进行参数传递,信号函数携带参数发射,槽函数可以收到此参数。

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QPushButton>
#include <QDebug>class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = 0);~Dialog();private:QPushButton* btn;int count;signals:void countSignal(int); // 自定义信号private slots:void btnClickedSlot(); // 点击按钮的槽函数void countSlot(int); // 与自定义信号连接的槽函数
};#endif // DIALOG_H

dialog.cpp

#include "dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent),count(0) // 构造初始化列表
{resize(400,400);btn = new QPushButton("0",this);btn->move(200,200);connect(btn,SIGNAL(clicked()),this,SLOT(btnClickedSlot()));connect(this,SIGNAL(countSignal(int)),this,SLOT(countSlot(int)));
}void Dialog::btnClickedSlot()
{count++;// 发射自定义信号(携带参数)emit countSignal(count);
}/*** @brief Dialog::countSlot* count参数是信号函数发来的,不是成员变量* 中转之后更新按钮显示的槽函数*/
void Dialog::countSlot(int count)
{QString text = QString::number(count);btn->setText(text);
}Dialog::~Dialog()
{delete btn;
}

需要注意的是:

  • 理论上可以传递任意多个参数
  • 信号函数的参数个数必须大于等于槽函数的参数个数
  • 参数类型需要匹配

5. 对应关系

    同一个信号可以连接到多个槽(一对多),多个信号也可以连接到同一个槽(多对一)。

5.1 一对多

    槽函数也是成员函数,因此在一对多的连接关系中,把连接的多个槽函数可以看做是普通的成员函数,合并为一个槽函数。

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QPushButton>
#include <QDebug>class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = 0);~Dialog();private:QPushButton* btn1;QPushButton* btn2;private slots:void btnClickedSlot1();void btnClickedSlot2();void btnClickedSlot3(); // 3 = 1 + 2
};#endif // DIALOG_H

dialog.cpp

#include "dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent)
{resize(400,400);btn1 = new QPushButton("一对多", this);btn1->move(200,100);btn2 = new QPushButton("一对一", this);btn2->move(100,200);// 一对多connect(btn1,SIGNAL(clicked()),this,SLOT(btnClickedSlot1()));connect(btn1,SIGNAL(clicked()),this,SLOT(btnClickedSlot2()));// 一对一connect(btn2,SIGNAL(clicked()),this,SLOT(btnClickedSlot3()));
}void Dialog::btnClickedSlot1()
{qDebug() << "A";
}void Dialog::btnClickedSlot2()
{qDebug() << "B";
}void Dialog::btnClickedSlot3()
{// 直接把Slot1和Slot2两个函数当做普通的成员函数,// 使用this指针调用btnClickedSlot1();btnClickedSlot2();
}Dialog::~Dialog()
{delete btn1;
}

5.2 多对一

    多对一的连接方式下,槽函数无法区分信号来源,可以在槽函数中调用sender函数获取发射者对象,从而判断信号来源。

// 在槽函数中调用,返回发射者对象
QObject * QObject::​sender() const

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QPushButton>
#include <QDebug>class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = 0);~Dialog();private:QPushButton* btn1;QPushButton* btn2;private slots:void btnsClickedSlot();
};#endif // DIALOG_H

dialog.cpp
#include "dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent)
{resize(400,400);btn1 = new QPushButton("A",this);btn2 = new QPushButton("B",this);btn1->move(150,100);btn2->move(150,200);// 多对一connect(btn1,SIGNAL(clicked()),this,SLOT(btnsClickedSlot()));connect(btn2,SIGNAL(clicked()),this,SLOT(btnsClickedSlot()));
}void Dialog::btnsClickedSlot()
{if(btn1 == sender()){qDebug() << "点击了按钮1";}else if(btn2 == sender()){qDebug() << "点击了按钮2";}qDebug() << "槽函数触发!";
}Dialog::~Dialog()
{delete btn1;delete btn2;
}

相关文章:

Qt_day3_信号槽

目录 信号槽 1. 概念 2. 函数原型 3. 连接方式 3.1 自带信号 → 自带槽 3.2 自带信号 → 自定义槽 3.3 自定义信号 4. 信号槽传参 5. 对应关系 5.1 一对多 5.2 多对一 信号槽 1. 概念 之前的程序界面只能看&#xff0c;不能交互&#xff0c;信号槽可以让界面进行人机…...

求从2开始的第n个素数

方法一&#xff1a;暴力法 思路&#xff1a;从2开始&#xff0c;逐个判断每个数是否为素数。素数是除了1和它自身外&#xff0c;不能被其他自然数整除的数。对于每个数m&#xff0c;从2到sqrt(m)遍历&#xff0c;如果能被整除则不是素数。当找到n个素数时停止。 C 代码如下&am…...

【Android】View—基础知识,滑动,弹性滑动

基础知识 什么是View 在 Android 中&#xff0c;View 是用户界面&#xff08;UI&#xff09;中的基本组件&#xff0c;用于绘制图形和处理用户交互。所有的 UI 组件&#xff08;如按钮、文本框、图片等&#xff09;都是 View 的子类。可以说&#xff0c;View 是构建 Android …...

MYSQL中的两种转义操作

在 MySQL 中&#xff0c;转义字符用于处理特殊字符,以防止语法错误或 SQL 注入攻击,而单双引号都是需要重点注意的字符 可以用转义符\ 和 两个连续的引号 来起到转义引号的作用 转义符转义: 这是users表中的数据 如果查询admin 或者 admin" 用户,可以用转义符\ 两个连…...

力扣题目解析--删除链表的倒数第n个节点

题目 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[]示例 3&…...

Knowledge Graph-Enhanced Large Language Models via Path Selection

研究背景 研究问题&#xff1a;这篇文章要解决的问题是大型语言模型&#xff08;LLMs&#xff09;在生成输出时存在的事实不准确性&#xff0c;即所谓的幻觉问题。尽管LLMs在各种实际应用中表现出色&#xff0c;但当遇到超出训练语料库范围的新知识时&#xff0c;它们通常会生…...

Android 项目模型配置管理

Android 项目配置管理 项目模型相关的配置管理config.gradle文件&#xff1a;build.gradle文件&#xff1a; 参考地址 项目模型相关的配置管理 以下是一个完整的build.gradle和config.gradle示例&#xff1a; config.gradle文件&#xff1a; ext {// 模型相关配置&#xff0…...

「QT」几何数据类 之 QSizeF 浮点型尺寸类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…...

Essential Cell Biology--Fifth Edition--Chapter one(2)

1.1.1.3 Living Cells Are Self-Replicating Collections of Catalysts 催化剂集合 生物最常被引用的特性之一是它们的繁殖能力。对于细胞来说&#xff0c;这个过程包括复制它们的遗传物质和其他成分&#xff0c;然后分裂成两个&#xff0c;产生一对子细胞[daughter cells]&a…...

大语言模型LLMs在医学领域的最新进展总结

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 相比其他学科&#xff0c;医学AI&#xff0c;是发表学术成果最多的领域。 医学数据的多样性和复杂性&#xff08;包括文本、图像、基因组数据等&#xff09;&#xff0c;使得…...

云防护单节点2T抗攻击能力意味着什么?

随着互联网的发展&#xff0c;DDoS攻击的规模和频率不断增加&#xff0c;对企业和个人用户的网络服务造成了严重威胁。云防护服务作为一种高效的DDoS防护手段&#xff0c;逐渐成为许多企业的首选。本文将重点讨论云防护单节点2T&#xff08;太比特每秒&#xff09;抗攻击能力的…...

IDEA在编译时: java: 找不到符号符号: 变量 log

一、问题 IDEA在编译的时候报Error:(30, 17) java: 找不到符号符号: 变量 log Error:(30, 17) java: 找不到符号 符号: 变量 log 位置: 类 com.mokerson.rabbitmq.config.RabbitMqConfig 二、解决方案 背景&#xff1a;下载其他同事代码时&#xff0c;第一次运行&#xff0c…...

HTML 基础架构:理解网页的骨架

HTML的文档结构主要由以下几个部分组成&#xff1a;<html>、<head>和<body>。 <html>标签是HTML文档的根元素&#xff0c;用来包裹整个HTML文档的内容。<head>标签用于定义文档的头部&#xff0c;包含了一些元数据和其他不直接显示在页面上的内…...

FPGA学习笔记#5 Vitis HLS For循环的优化(1)

本笔记使用的Vitis HLS版本为2022.2&#xff0c;在windows11下运行&#xff0c;仿真part为xcku15p_CIV-ffva1156-2LV-e&#xff0c;主要根据教程&#xff1a;跟Xilinx SAE 学HLS系列视频讲座-高亚军进行学习 从这一篇开始正式进入HLS对C代码的优化笔记 目录 1.循环优化中的基…...

web实操4——servlet体系结构

servlet体系结构 我们基本都只实现service方法&#xff0c;其余几个都不用&#xff0c; 之前我们直接实现servlet接口&#xff0c;所有的方法都必须实现&#xff0c;不用也得写&#xff0c;不然报错&#xff0c;写了又不用当摆设。 能不能只要定义一个service方法就可以&…...

Linux开发讲课48--- Linux 文件系统概览

本文旨在高屋建瓴地来讨论 Linux 文件系统概念&#xff0c;而不是对某种特定的文件系统&#xff0c;比如 EXT4 是如何工作的进行具体的描述。另外&#xff0c;本文也不是一个文件系统命令的教程。 每台通用计算机都需要将各种数据存储在硬盘驱动器&#xff08;HDD&#xff09;…...

Node.js 模块详解

模块的概念 Node.js 运行在 V8 JavaScript 引擎上&#xff0c;通过 require() 函数导入相关模块来处理服务器端的各种进程。一个 Node.js 模块可以是一个函数库、类集合或其他可重用的代码&#xff0c;通常存储在一个或多个 .js 文件中。 例如&#xff0c;启动一个 Node.js 服…...

大厂面试真题-说说tomcat的优缺点

Tomcat作为服务器&#xff0c;特别是作为Java Web服务器&#xff0c;具有一系列优点和缺点。以下是对其优缺点的详细分析&#xff1a; 优点 开源免费&#xff1a; Tomcat是一个免费、开源的Web服务器&#xff0c;用户可以在任何环境下自由使用&#xff0c;无需支付任何费用。…...

Linux系统编译boot后发现编译时间与Windows系统不一致的解决方案

现象 如下图&#xff0c;从filezilla软件看虚拟机Linux中编译的uboot.img修改时间与Windows系统时间不同 解决过程 在Linux中查看编译的uboot详细信息&#xff0c;从而得到编译时间。终端输入ls -l后&#xff0c;如下图&#xff1a; 结论 说明在Linux是按照Windows系统时…...

WPS Office手机去广高级版

工具介绍功能特点 WPS Office是使用人数最多的移动办公软件&#xff0c;独有手机阅读模式&#xff0c;字体清晰翻页流畅&#xff1b;完美支持文字&#xff0c;表格&#xff0c;演示&#xff0c;PDF等51种文档格式&#xff1b;新版本具有海量精美模版及高级功能 安装环境 [名称…...

Python爬虫基础-正则表达式!

前言 正则表达式是对字符串的一种逻辑公式&#xff0c;用事先定义好的一些特定字符、及这些特定字符的组合&#xff0c;组成一个“规则的字符串”&#xff0c;此字符串用来表示对字符串的一种“过滤”逻辑。正在在很多开发语言中都存在&#xff0c;而非python独有。对其知识点…...

Python处理PDF组件使用及注意事项

在 Python 中处理 PDF 文件时&#xff0c; 使用的组件及注意事项如下&#xff1a; 1. PyPDF2 / PyPDF4 说明&#xff1a; PyPDF2 和 PyPDF4 都是功能强大的 PDF 操作库&#xff0c;适用于合并、拆分、旋转 PDF 文件&#xff0c;提取 PDF 元数据等。PyPDF4 是 PyPDF2 的一个分…...

langgraph_plan_and_execute

整体入门demo 教程概览 欢迎来到LangGraph教程&#xff01; 这些笔记本通过构建各种语言代理和应用程序&#xff0c;介绍了如何使用LangGraph。 快速入门&#xff08;Quick Start&#xff09; 快速入门部分通过一个全面的入门教程&#xff0c;帮助您从零开始构建一个代理&a…...

[代码随想录打卡Day8] 344.反转字符串 541. 反转字符串II 54. 替换数字

反转字符串 难度&#xff1a;易。 问题描述&#xff1a;编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 这个就是开头…...

DCN DCWS-6028神州数码 AC 设备配置笔记

DCN DCWS-6028神州数码 AC 设备配置笔记 一、前期准备 PC 电脑网络配置 目的:使 PC 能够访问 AC 的 web 管理控制台。配置详情:web 管理控制台地址为 192.168.1.10,将 PC 电脑 IP 地址配置在 192.168.1.1 - 192.168.1.254 网段内,如 192.168.1.110,子网掩码 255.255.255.…...

Go语言的常用内置函数

文章目录 一、Strings包字符串处理包定义Strings包的基本用法Strconv包中常用函数 二、Time包三、Math包math包概述使用math包 四、随机数包&#xff08;rand&#xff09; 一、Strings包 字符串处理包定义 Strings包简介&#xff1a; 一般编程语言包含的字符串处理库功能区别…...

华为OD技术一面手撕题

150. 逆波兰表达式求值 来自leecode 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 、-、* 和 / 。每个操作数&#xff08;运算对象&#xff09;都…...

Qt低版本多网卡组播bug

原文地址 最近在某个项目中&#xff0c;发现了一个低版本Qt的bug&#xff0c;导致组播无法正常使用&#xff0c;经过一番排查&#xff0c;终于找到了原因&#xff0c;特此记录。 环境 Qt&#xff1a;5.7.0 mingw32操作系统&#xff1a;windows 11 现象 在Qt5.7.0版本中&…...

Leetcode:540. 有序数组中的单一元素

题目 给你一个仅由整数组成的有序数组&#xff0c;其中每个元素都会出现两次&#xff0c;唯有一个数只会出现一次。 请你找出并返回只出现一次的那个数。 你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。 输入: nums [1,1,2,3,3,4,4,8,8] 输出: 2 输入:…...

Python数据分析NumPy和pandas(二十七、数据可视化 matplotlib API 入门)

数据可视化或者数据绘图是数据分析中最重要的任务之一&#xff0c;是数据探索过程的一部分&#xff0c;数据可视化可以帮助我们识别异常值、识别出需要的数据转换以及为模型生成提供思考依据。对于Web开发人员&#xff0c;构建基于Web的数据可视化显示也是一种重要的方式。Pyth…...

海南私彩网站怎么做/产品推广方式有哪些

ch09-SpringBoot 打包1.1 SpringBoot 打包为 war1.1.1 pom.xml 文件1.1.2 创建 webapp 目录1.1.3 指定 webapp 为 web 目录1.1.4 创建 jsp 文件1.1.5 创建 Controller1.1.6 配置视图解析器1.1.7 启动主类&#xff0c;访问地址1.1.8 主启动类继承 SpringBootServletInitializer1…...

html网站开发中的应用/域名网站

睡不着&#xff0c;无聊......再整理点好玩的出来。先上图 效果 碎碎念 自从13级后打出DOTA2的天梯积分以来简直是逆水行舟不进则退啊&#xff0c;室友已经高呼着被游戏玩了&#xff01;&#xff01;结果怒删游戏 其实我也发现这游戏不合适我玩…天梯里场场被各种选英雄针对&am…...

已认证网站服务费怎么做/舆情通

某大公司有这么一个规定&#xff1a;只要有一个员工过生日&#xff0c;当天所有员工全部放假一天。但在其余时候&#xff0c;所有员工都没有假期&#xff0c;必须正常上班。这个公司需要雇用多少员工&#xff0c;才能让公司一年内所有员工的总工作时间期望值最大&#xff1f; …...

wordpress删除顶部/宁波seo排名优化价格

python中os模块中文帮助文档文章分类:Python编程python中os模块中文帮助文档翻译者&#xff1a;butalnd 翻译于2010.1.7——2010.1.8&#xff0c;个人博客&#xff1a;http://butlandblog.appspot.com/注此模块中关于unix中的函数大部分都被略过&#xff0c;翻译主要针对WINDOW…...

商业网站推广/国家认可的教育培训机构

首先要配置我们的spring.xml xmlns 多加下面的内容、 [html] view plaincopy xmlns:task"http://www.springframework.org/schema/task" 然后xsi:schemaLocation多加下面的内容、 [html] view plaincopy http://www.springframework.org/schema/task http://www.s…...

外贸汽车网站制作/网络营销外包推广定制公司

水环境检测系统的设计与实现 摘 要 在我国,水源的污染是不可忽视的问题。对于水质监测进行数据的采集工作,目前主要通过人工实现。因此,部分地区的采集工作,实施起来难度很大,比如恶劣环境和偏僻山区等地。所以,目前对于水质监测的研究,主导方向是建立更加高效完善,智能化的水质…...