0
点赞
收藏
分享

微信扫一扫

域名不变根据系统判断手机和端脑h5pc自动转发不同请求

非宁静不致远 2024-05-14 阅读 6
qtc++学习

这里写目录标题

自定义的信号

前面咱们都用的qt组件自带的信号,接下来我们自己写一个信号。

在这里插入图片描述
在这里插入图片描述

自定义的槽

当有了自定义的信号,咱们再去搞一个自定义的槽。
在这里插入图片描述

槽函数是必须要做实现的在mainwindow.cpp中
在这里插入图片描述
然后咱们用一个按钮点击信号去关联咱们自定义的槽函数
随便教一下大家如何去用代码创建主键。
首先在mainwindow.h中添加按钮的数据类型

在这里插入图片描述
然后在mainwindow.cpp中new一个按键,并进行位置和大小的设置,最后设置按钮文字
在这里插入图片描述
然后按钮点击信号和我们的自定义的槽进行关联
在这里插入图片描述
运行效果:

在这里插入图片描述
这样就做到了自定义槽的使用

自定义的信号和槽的结合使用

上面都是用的组件已经有的信号,下面咱们用自己定义的信号和槽来玩玩。
mainwindow.h中

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE


struct people
{
    QString name;
    int age;
};

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

signals:
    void mySignal(people p);//自定义的信号传自定义的类型

public slots:
    void mySlot();//自定义的槽
    void mySlot2(people p);//自定义的槽



private:
    Ui::MainWindow *ui;
    QPushButton*btn;
};
#endif // MAINWINDOW_H

mainwindow.cpp中

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPushButton>
#include <QDebug>

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

    btn=new QPushButton(this);
    btn->setGeometry(200,200,100,50);
    btn->setText("超级大按钮");

    qRegisterMetaType<people>("people");
    //connect(btn,&QPushButton::clicked,this,&MainWindow::mySlot);
    connect(btn,SIGNAL(clicked()),this,SLOT(mySlot()));//必须在声明时,前面加slot

   // connect(this,SIGNAL(mySignal(people p)),this,SLOT(mySlot2(people p)));
     connect(this,&MainWindow::mySignal,this,&MainWindow::mySlot2);

}

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

void MainWindow::mySlot()
{
    qDebug()<<"你点到我了"<<endl;
    people p;
    p.name="姚国林";
    p.age=19;
    emit mySignal(p);//自己写的信号只能手动发送信号
}

void MainWindow::mySlot2(people p)
{
    qDebug()<<p.name<<" "<<p.age<<endl;
    disconnect(this,&MainWindow::mySignal,this,&MainWindow::mySlot2);
}

运行效果:
在这里插入图片描述
讲解:
1.connect(this,&MainWindow::mySignal,this,&MainWindow::mySlot2);首先对自定义的信号和槽进行了关联
2.自定义的信号要进行手动发出emit mySignal§;
3.当传的产生类型是自定义的时候,要在关联前加一个qRegisterMetaType(“people”); 其意在Qt中注册一个自定义数据类型people,使其能够在信号和槽之间进行传递。
注意:

信号和槽的断开

当我将disconnect哪行代码进行注释时,我一直点按钮,就会一直输出’你点到我了’和我的信息。
在这里插入图片描述
当我添加上这行代码,它只会第一次出现我的信息,后面就关联不上了。
在这里插入图片描述

disconnect你要断开那个信号槽,后面就输填入相关的信号槽,跟connect一样。
disconnect的多种形式:
在这里插入图片描述

总结:

到这里信号槽也就讲完了。
总的来说信号和槽,都是一个函数
信号是不用做实现的函数
槽是要做具体实现的函数
ui界面的组件都有自己的信号和槽,信号也可以自动发出,我们只需要进行关联即可,手动或者自动关联
如果自定义信号和槽要注意:

  • 定义信号前要加signals
  • 定义槽函数前最好加上slots
  • 参数是自定义的类型,需要加qRegisterMetaType(“class”);
  • 只能手动发出信号 emit
举报

相关推荐

0 条评论