信号和槽

一、关联

1.自动关联

   在UI界面,右击控件,选择转到槽

2.手动关联

          1)自定义信号可以有参数,可以重载,需要声明,不用实现, 返回void,写到signals下

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

 

  方式一:connect(信号发出者,SIGNAL(发出的信号),信号接收者,SLOT(槽:相应的处理));

    例:connect(QPushButton,SIGNAL(clicked()),this,SLOT(slotOpenFileDlg()));

注:不会检查做错误检查

注:槽只能声明到slots下面

 

方式二:connect(信号发出者,发出的信号:函数的地址,信号接收者,槽:函数地址);

     情况一:没有重载时

         例:connect(QPushButton,  &QPushButton::clicked , this , &QWidget::close );

         新建一个sj类和一个me类,在sj.h中声明信号。由于信号不用实现,所以sj.cpp文件不需要动

#ifndef SJ_H
#define SJ_H

#include <QObject>

class sj : public QObject
{
    Q_OBJECT
public:
    explicit sj(QObject *parent = nullptr);

signals:
    void issj();

};

#endif // SJ_H

      在me.h中声明槽函数,并在.cpp中实现

#ifndef ME_H
#define ME_H

#include <QObject>

class me : public QObject
{
    Q_OBJECT
public:
    explicit me(QObject *parent = nullptr);

signals:

public slots:
    void happy();  

};

#endif // ME_H
#include "me.h"
#include"QDebug"

me::me(QObject *parent) : QObject(parent)
{

}
void me::happy(){
    qDebug()<<"开心";

}

最后在mainwindow的.h声明其对象,在.cpp中连接,并触发sj的信号 

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include"sj.h"
#include"me.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);


    ~MainWindow();

private:
    Ui::MainWindow *ui;

    sj *s ;
    me *m ;
};
#endif // MAINWINDOW_H

 



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

     this->s = new sj(this);
     m = new me(this);


      connect(s,&sj::issj,m,&me::happy);
      emit s->issj();                //emit用于触发信号
}

     情况二:自定义信号和槽,有重载时,  通过指向信号和槽的函数指针来实现(使用emit触发信号)    

         指针可以指向地址,那指向函数地址的指针就是函数指针;

//sj.h文件


#ifndef SJ_H
#define SJ_H

#include <QObject>

class sj : public QObject
{
    Q_OBJECT
public:
    explicit sj(QObject *parent = nullptr);

signals:
    void issj();

    void issj(QString i);   //带参数的信号

};

#endif // SJ_H
//sj.cpp文件



#include "sj.h"

sj::sj(QObject *parent) : QObject(parent)
{

}
//me.h文件


#ifndef ME_H
#define ME_H

#include <QObject>

class me : public QObject
{
    Q_OBJECT
public:
    explicit me(QObject *parent = nullptr);

signals:

public slots:
    void happy();
    void happy(QString j);   //带参数的槽

};

#endif // ME_H
#include "me.h"
#include"QDebug"

me::me(QObject *parent) : QObject(parent)
{

}
void me::happy(){
    qDebug()<<"开心";

}

void me::happy(QString j){     //实现带参数的槽
    qDebug()<<"开心"<<j;       

}

    例:注:会对函数类型,个数做检查,推荐使用。

情况三:用lambda表达式写槽函数

     connect(s,&sj::issj,m,[=](){   m->happy();});

 

  二、信号其他说明

1.信号连接信号

    connect(控件,控件的信号,接收者,槽);    

    例:connect(login,&QPushButton::clicked,s,sjj);    

2.信号可以连接多个槽

  connect(login,&QPushButton::clicked,s,sjj);    

  connect(login,&QAbstractButton::clicked,this,&QWidget::close);

3.多个信号可以连接同一个槽

4.信号的参数可以多于槽的参数,但还是要一一对应

5.断开信号

   disconnect(login,&QPushButton::clicked,s,sjj);    

6.深入了解信号与槽的连接方式
-Qt::DirectConnection(立即调用)
-Qt::QueuedConnection(异步调用)
-Qt::BlockingQueuedConnection(同步调用)
-Qt::AutoConnection(默认连接)
-Qt::UniqueConnection(单一连接)

bool connect(const QObject* sender, const char* signal, const QObject* receiver, const char* method, Qt::ConnectType type = Qt::AutoConnection);

基于Swin Transformer与ASPP模块的图像分类系统设计与实现 本文介绍了一种结合Swin Transformer与空洞空间金字塔池化(ASPP)模块的高效图像分类系统。该系统通过融合Transformer的全局建模能力ASPP的多尺度特征提取优势,显著提升了模型在复杂场景下的分类性能。 模型架构创新 系统核心采用Swin Transformer作为骨干网络,其层次化窗口注意力机制能高效捕获长距离依赖关系。在特征提取阶段,创新性地引入ASPP模块,通过并行空洞卷积(膨胀率6/12/18)全局平均池化分支,实现多尺度上下文信息融合。ASPP输出经1x1卷积降维后与原始特征拼接,有效增强了模型对物体尺寸变化的鲁棒性。 训练优化策略 训练流程采用Adam优化器(学习率0.0001)交叉熵损失函数,支持多GPU并行训练。系统实现了完整的评估指标体系,包括准确率、精确率、召回率、特异度F1分数等6项指标,并通过动态曲线可视化模块实时监控训练过程。采用早停机制保存最佳模型,验证集准确率提升可达3.2%。 工程实现亮点 1. 模块化设计:分离数据加载、模型构建训练流程,支持快速迭代 2. 自动化评估:每轮训练自动生成指标报告可视化曲线 3. 设备自适应:智能检测CUDA可用性,无缝切换训练设备 4. 中文支持:优化可视化界面的中文显示与负号渲染 实验表明,该系统在224×224分辨率图像分类任务中,仅需2个epoch即可达到92%以上的验证准确率。ASPP模块的引入使小目标识别准确率提升15%,特别适用于医疗影像等需要细粒度分类的场景。未来可通过轻量化改造进一步优化推理速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值