QT学习(6)——QT中的定时器事件,两种实现方式;事件的分发event,事件过滤器

news2024/10/6 8:21:26

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

目录

  • 引出
  • 定时器事件
    • QTimerEvent
    • QTimer
  • 事件的分发
    • 事件过滤器
  • 总结
  • QT中的鼠标事件
    • 定义QLable的鼠标进入离开事件
    • 提升为myLabel
    • 重写QLabel的函数
      • 鼠标的事件
      • 鼠标的左中右键枚举
      • 鼠标多事件获取和鼠标移动
      • 鼠标追踪
  • QT中的信号和槽
    • 自定义信号和槽
      • 1.自定义信号
      • 2.自定义槽
      • 3.建立连接
      • 4.进行触发
    • 自定义信号重载
      • 带参数的
      • 按钮触发
      • 信号触发信号
      • 拓展
    • lambda表达式
      • 返回值
      • mutable修饰
      • 案例

引出

QT学习(6)——QT中的定时器事件,两种实现方式;事件的分发event,事件过滤器

在这里插入图片描述


定时器事件

QTimerEvent

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    // 重写定时器事件
    void timerEvent(QTimerEvent *);

    int id1; // 定时器1的唯一标识
    int id2; // 定时器2的唯一标识

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如何定义多个定义器事件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    // 启动定时器
    // 参数1 间隔 单位 毫秒
    id1 = startTimer(1000);

    id2 = startTimer(2000);
}

void Widget::timerEvent(QTimerEvent * ev)
{
    if(ev->timerId()==id1){
        static int num =1;
        // label1 每间隔1秒
        ui->label_2->setText(QString::number(num++));
    }

    // label2 每间隔2s
    if(ev->timerId()==id2){
        static int num2 = 1;
        ui->label_3->setText(QString::number(num2++));
    }


    // label3 每间隔3s

}


Widget::~Widget()
{
    delete ui;
}

QTimer

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

定时器实现的另一种方式:实例化定时器QTimer 然后加到对象树上

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

进行定时信号的发送和处理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#include "widget.h"
#include "ui_widget.h"
#include <QTimer> // 定时器的类

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    // 启动定时器
    // 参数1 间隔 单位 毫秒
    id1 = startTimer(1000);
    id2 = startTimer(2000);

    // 定时器的第二种方式,实例化,加到对象树上
    QTimer *timer = new QTimer(this);
    //  启动定时器
    timer->start(500); // 每隔500ms

    connect(timer,&QTimer::timeout,
            [=](){
        static int num = 1;
        ui->label_4->setText(QString::number(num++));
    });

    // 点击暂停按钮,停止定时器
    connect(ui->btnStop,&QPushButton::clicked,
            [=](){
        timer->stop();
    });

}

void Widget::timerEvent(QTimerEvent * ev)
{
    if(ev->timerId()==id1){
        static int num =1;
        // label1 每间隔1秒
        ui->label_2->setText(QString::number(num++));
    }

    // label2 每间隔2s
    if(ev->timerId()==id2){
        static int num2 = 1;
        ui->label_3->setText(QString::number(num2++));
    }


    // label3 每间隔3s

}


Widget::~Widget()
{
    delete ui;
}

事件的分发

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过重写event事件分发器,拦截鼠标按下的的事件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

事件的枚举类型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

静态类型转换方法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鼠标按下的事件拦截,自己处理,返回True;
其他事件交给父类进行处理,默认处理;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

bool myLabel::event(QEvent *e)
{
    // 如果是鼠标按下,在event事件分发中做拦截操作
    if(e->type()==QEvent::MouseButtonPress)
    {
        QString str1 = QString("鼠标按下了,在event事件分发中处理");
        qDebug() << str1;

        // 需要进行类型转换
        QMouseEvent * ev = static_cast<QMouseEvent *>(e);
        QString str = QString("鼠标按下了,x=%1,y=%2; global坐标为:x=%3,y=%4")
                .arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
        qDebug() << str;
        return true; // 代表用户自己处理,不向下分发
    }

    // 其他事件,交给父类处理,默认处理
    return QLabel::event(e);
}

事件过滤器

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以在event之前,再做一次高级的拦截

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

步骤:1.给label1安装事件过滤器

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

步骤二:重写事件过滤器的事件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里有两个参数,obj 和 e,一个用于判断控件,另一个用来判断事件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#include "widget.h"
#include "ui_widget.h"
#include <QTimer> // 定时器的类
#include <QDebug>
#include <QMouseEvent>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    // 启动定时器
    // 参数1 间隔 单位 毫秒
    id1 = startTimer(1000);
    id2 = startTimer(2000);

    // 定时器的第二种方式,实例化,加到对象树上
    QTimer *timer = new QTimer(this);
    //  启动定时器
    timer->start(500); // 每隔500ms

    connect(timer,&QTimer::timeout,
            [=](){
        static int num = 1;
        ui->label_4->setText(QString::number(num++));
    });

    // 点击暂停按钮,停止定时器
    connect(ui->btnStop,&QPushButton::clicked,
            [=](){
        timer->stop();
    });

}

void Widget::timerEvent(QTimerEvent * ev)
{
    if(ev->timerId()==id1){
        static int num =1;
        // label1 每间隔1秒
        ui->label_2->setText(QString::number(num++));
    }

    // label2 每间隔2s
    if(ev->timerId()==id2){
        static int num2 = 1;
        ui->label_3->setText(QString::number(num2++));
    }

    // 给label1安装事件过滤器
    // 步骤1:安装事件的过滤器
    ui->label->installEventFilter(this);
}


bool Widget::eventFilter(QObject * obj, QEvent * e){
    if(obj == ui->label){
        if(e->type() == QEvent::MouseButtonPress){
            QMouseEvent * ev = static_cast<QMouseEvent *>(e);
            QString str = QString("事件过滤器===鼠标按下了,x=%1,y=%2; global坐标为:x=%3,y=%4")
                    .arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
            qDebug() << str;
            return true;
        }
    }

    // 其他默认处理
    return QWidget::eventFilter(obj,e);

}


Widget::~Widget()
{
    delete ui;
}


总结

QT学习(6)——QT中的定时器事件,两种实现方式;事件的分发event,事件过滤器

QT中的鼠标事件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

定义QLable的鼠标进入离开事件

注意这里的QWidget后面要改成QLabel

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#include "mylabel.h"
#include <QDebug>

myLabel::myLabel(QWidget *parent) : QLabel(parent)
{
}


// 鼠标进入
void myLabel::enterEvent(QEvent *event)
{
    qDebug() << "鼠标进入了";
}

// 鼠标离开
void myLabel::leaveEvent(QEvent *)
{
    qDebug() << "鼠标离开了";
}

提升为myLabel

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

重写QLabel的函数

鼠标的事件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于控件的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鼠标的左中右键枚举

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

鼠标多事件获取和鼠标移动

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

头文件

#ifndef MYLABEL_H
#define MYLABEL_H

#include <QLabel>

class myLabel : public QLabel
{
    Q_OBJECT
public:
    explicit myLabel(QWidget *parent = nullptr);

    // 鼠标进入
    void enterEvent(QEvent *event);

    // 鼠标离开
    void leaveEvent(QEvent *);

    // 鼠标放下和释放
    virtual void mousePressEvent(QMouseEvent *ev);
    virtual void mouseReleaseEvent(QMouseEvent *ev);

    // 鼠标的移动
    virtual void mouseMoveEvent(QMouseEvent *ev);

signals:

};

#endif // MYLABEL_H

cpp文件

#include "mylabel.h"
#include <QDebug>
#include <QMouseEvent>

myLabel::myLabel(QWidget *parent) : QLabel(parent)
{
}


// 鼠标进入
void myLabel::enterEvent(QEvent *event)
{
//    qDebug() << "鼠标进入了";
}

// 鼠标离开
void myLabel::leaveEvent(QEvent *)
{
//    qDebug() << "鼠标离开了";
}

// 鼠标放下和释放
void myLabel::mousePressEvent(QMouseEvent *ev)
{

    // 鼠标左键按下打印
    if(ev->button() == Qt::LeftButton){
        QString str = QString("鼠标按下了,x=%1,y=%2; global坐标为:x=%3,y=%4")
                .arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
        qDebug() << str;
    }

}
void myLabel::mouseReleaseEvent(QMouseEvent *ev)
{
    qDebug() << "鼠标释放";
}

// 鼠标的移动
void myLabel::mouseMoveEvent(QMouseEvent *ev)
{
    if(ev->buttons() & Qt::LeftButton)
    {
        qDebug() << "鼠标移动";
    }
}

鼠标追踪

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

QT中的信号和槽

自定义信号和槽

1.自定义信号

写到signals下
返回void
需要声明,不需要实现
可以有参数,可以重戟

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.自定义槽

返回void
需要声明,也需要实现
可以有参数,可以重载
写到public slot下或者public或者全局函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.建立连接

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

// 老师饿了,学生请吃饭
connect(te,&Teacher::hungry,st,&Student::treat);

4.进行触发

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自定义信号重载

当自定义信号和槽出现重载
8.1 需要利用还数指针明确指向函数的地址·
8.2void(Teacher::tsignal )QString )=&Teacher::hungry;
8.3 QString转成char *
8.3.1.ToUtf80转为QByteArray
8.3.2.Data0转为Char *
8.4信号可以连接信号
8.5断开信号disconnect

带参数的

    void (Teacher::*teacherSignal)(QString) = &Teacher::hungry;
    void (Student::*StudentSlot)(QString) = &Student::treat;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

void Student::treat(QString foodName){
    // QString -> char * 先转成QByteArray(.toUtf8())  再转成Char* ()
    qDebug() << "请老师吃。。。" << foodName.toUtf8().data();
}

按钮触发

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    // 用一个按钮调用下课
    QPushButton *btn = new QPushButton("下课了",this);

    // 重置窗口daxiao
    this->resize(600,400);

    connect(btn,&QPushButton::clicked,this,&Widget::classIsOver);

信号触发信号

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    // 无参的信号和槽连接
    void (Teacher::*teacherSignal2)(void) = &Teacher::hungry;
    void (Student::*StudentSlot2)(void) = &Student::treat;
    connect(te,teacherSignal2,st,StudentSlot2);

    // 信号连接信号
    connect(btn,&QPushButton::clicked,te,teacherSignal2);

断开信号disconnect

拓展

1、信号是可以连接信号
2、一个信号可以连接多个槽函数
3、多个信号可以连接同一个糟函数
4、信号和槽函数的参数必须类型一一对应
5、信号和槽的参数个数是不是要一致?信号的参数个数可以多余槽函数的参数个数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

connect(信号的发送者,发送的信号signal信号),信号接受者,槽函数SLOT)
优点:参数直观
缺点:编译器不会检测爸数类型:

lambda表达式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

在这里插入图片描述

    [=](){
        btn->setText("aaa");
    }();

返回值

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    int ret = []()->int{return 1000;}();
    qDebug() << "ret = " << ret;

mutable修饰

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    QPushButton *myBtn1 = new QPushButton(this);
    QPushButton *myBtn2 = new QPushButton(this);
    myBtn1->move(100,100);
    int m = 10;
    connect(myBtn1,&QPushButton::clicked,this,
            [m]()mutable {m=100+10;qDebug()<< m;});
    connect(myBtn2,&QPushButton::clicked,this,
            [=](){qDebug()<<m;});
    qDebug() << m;

案例

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    QPushButton * btnClose = new QPushButton;
    btnClose->setText("close");
    btnClose->move(100,0);
    btnClose->setParent(this);
    connect(btnClose,&QPushButton::clicked,this,
            [=](){
        btnClose->setText("关闭");
        emit te->hungry("娃哈哈");
//        this->close();
    });

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

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

相关文章

【Mindspore进阶】-03.ShuffleNet实战

ShuffleNet图像分类 当前案例不支持在GPU设备上静态图模式运行&#xff0c;其他模式运行皆支持。 ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一样主要应用在移动端&#xff0c;所以模型的设计目标就是利用有…

[数据结构] 排序#插入排序希尔排序

标题&#xff1a;[数据结构] 排序#插入排序&希尔排序 水墨不写bug 目录 &#xff08;一&#xff09;插入排序 实现思路&#xff1a; 插入排序实现&#xff1a; &#xff08;二&#xff09;希尔排序 希尔排序的基本思想&#xff1a; 希尔排序的实现&#xff1a; 正…

数据结构(3.5)——队列的顺序实现

队列的顺序实现 #define MaxSize 10//定义队列中元素的最大个数 typedef struct {int data[MaxSize];//用静态数组存放队列元素int front, rear;//队头指针和队尾指针 } SqQueue;void testQueue() {SqQueue Q;//声明一个队列(顺序存储) } 队列的初始化操作和判空 //初始化队…

Vue异步操作发送AJAX请求

5. Vue异步操作 1 axios介绍 在Vue中发送异步请求&#xff0c;本质上还是AJAX。我们可以使用axios这个插件来简化操作&#xff01; 使用步骤 1.引入axios核心js文件。 2.调用axios对象的方法来发起异步请求。 3.调用axios对象的方法来处理响应的数据。 axios常用方法 代码…

centos执行yum相关命令报错的可能原因

文章目录 1. 执行yum命令是报下面一大帕拉2. 安装某个包报错&#xff0c;找不到这个包 1. 执行yum命令是报下面一大帕拉 最后一行报错&#xff0c;在repo文件中找不到空baseurl&#xff1a;xxx / x86_64 执行这行命令把这个找不到的 xxx 禁掉即可sudo yum-config-manager --di…

关于Unity粒子(2D序列帧粒子)的旋转、StartRotation值用脚本怎么动态设置

今天要用粒子做一个拖尾效果。由于对象的移动可以向任何方向&#xff0c;所以作为拖尾的粒子要根据方向做相应的旋转。 1.没有旋转的情况&#xff08;物体向下移动&#xff09;时&#xff0c;默认是下面这样的。 粒子发射器的形状是一个向上的长方形&#xff0c;粒子的移动方向…

[FreeRTOS 功能应用] 互斥量 功能应用

文章目录 一、基础知识点二、代码讲解三、结果演示四、代码下载 一、基础知识点 [FreeRTOS 基础知识] 互斥量 概念 [FreeRTOS 内部实现] 互斥量 本实验是基于STM32F103开发移植FreeRTOS实时操作系统&#xff0c;互斥量实战操作。 使用工具&#xff1a;Keil、串口工具 二、代码…

Android增量更新----java版

一、背景 开发过程中&#xff0c;随着apk包越来越大&#xff0c;全量更新会使得耗时&#xff0c;同时浪费流量&#xff0c;为了节省时间&#xff0c;使用增量更新解决。网上很多文章都不是很清楚&#xff0c;没有手把手教学&#xff0c;使得很多初学者&#xff0c;摸不着头脑&a…

【LabVIEW学习篇 - 2】:LabVIEW的编程特点

文章目录 LabVIEW的编程特点图形编程天然并行运行基于数据流运行 LabVIEW的编程特点 图形编程 LabVIEW使用图形化的图形化编程语言&#xff08;G语言&#xff09;&#xff0c;用户通过在程序框图中拖放和连接各种节点&#xff08;Nodes&#xff09;来编写程序。每个节点代表一…

C#Modbus通信

目录 1&#xff0c;辅助工具。 2&#xff0c;初识Modbus。 3&#xff0c;基于ModbusRTU的通信。 3.1&#xff0c;RTU与ASCII模式区别 3.2&#xff0c;Modbus存储区 3.3&#xff0c;报文格式 3.4&#xff0c;异常代码 3.5&#xff0c;详细文档连接 。 3.6&#xff0c;代…

mupdf加载PDF显示中文乱码

现象 加载PDF显示乱码,提示非嵌入字体 non-embedded font using identity encoding调式 在pdf-font.c中加载字体 调试源码发现pdf文档的字体名字居然是GBK&#xff0c;估计又是哪个windows下写的pdf生成工具生成pdf 字体方法&#xff1a; static pdf_font_desc * load_cid…

软通动力子公司鸿湖万联最新成果SwanLink AI亮相世界人工智能大会

7月4日&#xff0c;2024世界人工智能大会暨人工智能全球治理高级别会议&#xff08;WAIC 2024&#xff09;在上海拉开帷幕&#xff0c;软通动力董事长兼首席执行官刘天文受邀出席开幕式。其间&#xff0c;软通动力携子公司鸿湖万联深度参与到大会各项活动中&#xff0c;并全面展…

详解AT_dp_l Deque(区间动态规划)

题目 思路 考虑模拟博弈过程。 题目可以看成:先手希望X - Y最大&#xff0c;后手希望X - Y最小。 显然游戏过程中剩下的数必然是连续的一段。设 dp[i,j]​ 表示剩下下标为 [i,j] 的数时&#xff0c;先手&#xff08;并非当前的先手而是开始时的先手&#xff0c;下同&#xf…

12 Dockerfile详解

目录 1. Dockerfile 2. Dockerfile构建过程 2.1. Dockerfile编写规则&#xff1a; 2.2. Docker执行Dockerfile的大致流程 2.3. 总结 3. Dockerfile指令 3.1. FROM 3.2. MAINTAINER 3.3. RUN 3.4. EXPOSE 3.5. WORKDIR 3.6. USER 3.7. ENV 3.8. VOLUME 3.9. ADD …

CVE-2023-30212(xss漏洞)

简介 OURPHP版本<7.2.0存在XSS漏洞&#xff0c;攻击路径为/client/manage/ourphp_out.php。 过程 打开靶场 访问攻击路径/client/manage/ourphp_out.php 得到flag{354c7c41-cc23-4de5-be73-79cbbf384aba}

Hasleo Backup Suite 一款专为Windows操作系统设计的免费数据备份与恢复软件,支持备份、恢复和克隆功能

数据安全是每位计算机用户都关心的重要问题。在日常使用中&#xff0c;我们经常面临文件丢失、系统崩溃或病毒感染等风险。为了解决这些问题&#xff0c;我们需要可靠且高效的数据备份与恢复工具。本文将介绍一款优秀的备份软件&#xff1a;Hasleo Backup Suite&#xff0c;它为…

Python数据分析案例49——基于机器学习的垃圾邮件分类系统构建(朴素贝叶斯,支持向量机)

案例背景 trec06c是非常经典的邮件分类的数据&#xff0c;还是难能可贵的中文数据集。 这个数据集从一堆txt压缩包里面提取出来整理为excel文件还真不容不易&#xff0c;肯定要做一下文本分类。 虽然现在文本分类基本都是深度学习了&#xff0c;但是传统的机器学习也能做。本案…

Python字符串处理常用的30种操作

我们平时编写代码时&#xff0c;经常需要对字符串进行处理&#xff0c;本文详细介绍Python处理字符串常用的30种操作&#xff0c;并给出了对应的代码。 分割 使用split()方法将字符串按照指定的分隔符进行分割。 s "Hello,World" result s.split(","…

解决分布式环境下session共享问题

在分布式环境下&#xff0c;session会存在两个问题 第一个问题:不同域名下&#xff0c;浏览器存储的jsessionid是没有存储的。比如登录时认证服务auth.gulimall.com存储了session&#xff0c;但是搜索服务search.gulimall.com是没有这个session的&#xff1b; 第二个问题&…

hdu物联网硬件实验2 GPIO亮灯

学院 班级 学号 姓名 日期 成绩 实验题目 GPIO亮灯 实验目的 点亮三个灯闪烁频率为一秒 硬件原理 无 关键代码及注释 const int ledPin1 GREEN_LED; // the number of the LED pin const int ledPin2 YELLOW_LED; const int ledPin3 RED…