QT自定义信号和槽

最近项目中使用到QT,在此记录一下QT的核心,信号与槽:

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

sender:信号发出者

signal:发送信号

receiver:信号接收者

method:信号处理者

新建一个QT窗口,在窗口上放一个按钮,点击按钮然后关闭窗口

SignalAndSlot.h

#include <QtWidgets/QWidget>
#include "ui_SignalAndSlot.h"
#include <QPushButton>

class SignalAndSlot : public QWidget
{
    Q_OBJECT

public:
    SignalAndSlot(QWidget *parent = Q_NULLPTR);

private:
    QPushButton b1;

private:
    Ui::SignalAndSlotClass ui;
};

SignalAndSlot.cpp

#include "SignalAndSlot.h"

SignalAndSlot::SignalAndSlot(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);

    b1.setParent(this);
    b1.setText(QStringLiteral("关闭"));//QStringLiteral解决VS中文乱码
    b1.move(100, 100);

    connect(&b1, &QPushButton::released, this, &SignalAndSlot::close);
}

一. 槽函数:

QT5:任意的成员函数,普通全局函数,静态函数
     槽函数需要和信号一直(参数,返回值)
     由于信号没有返回值,所以槽函数一定没有返回值

我们自定义槽函数
void closeWidget(); //自定义槽函数
//槽函数里执行关闭操作
void SignalAndSlot::closeWidget()
{
     close();
}

.....

connect(&b1, &QPushButton::released, this, &SignalAndSlot::closeWidget);//自定义槽函数

二.自定义信号实例

我们实现两个窗口互相切换,在主创中新建一个按钮,叫切换到子窗口(这个过程是子窗口显示,主窗口隐藏), 新建一个QT子窗口,子窗口上有一个按钮叫切换到主窗口(子窗口隐藏,主窗口显示);

1.新建子窗口

2.在主窗口中定义SubWidget窗口成员变量和主窗口的切换函数

这样实现,就可以从主窗口切换到子窗口。

3.从子窗口切换到主窗口

在子窗口定义信号和发送信号的槽函数

SubWidget.h

#include <QWidget>
#include "ui_SubWidget.h"

class SubWidget : public QWidget
{
    Q_OBJECT

public:
    SubWidget(QWidget *parent = Q_NULLPTR);
    ~SubWidget();

signals:
    /*
    * 信号必须有signals 关键字来声明
    * 信号没有返回值,但可以有参数
    * 信号就是函数声明,只需声明,无须实现
    * 使用:emit mysignal();
    * 信号可以重载
    */
    void MySignal();

public:
    void SendSignal();//发送信号的槽

private:
    Ui::SubWidget ui;
};

SubWidget.cpp

#include "SubWidget.h"
#include <QPushButton>

SubWidget::SubWidget(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);

    QPushButton* pChange = new QPushButton(this);
    pChange->setText(QStringLiteral("切换到主窗口"));
    pChange->move(100, 0);

    connect(pChange, &QPushButton::released, this, &SubWidget::SendSignal);//点击按钮,槽函数触发一个信号

}

SubWidget::~SubWidget()
{
}

void SubWidget::SendSignal()
{
    emit MySignal();
}

4.在主窗口里面处理这个自定义信号

....

connect(&sub, &SubWidget::MySignal, this, &SignalAndSlot::DealSubSignal);
}

void SignalAndSlot::DealSubSignal()
{
    show();
    sub.hide();
}

效果:

原文地址:https://www.cnblogs.com/chechen/p/11768362.html

时间: 2024-10-11 21:11:03

QT自定义信号和槽的相关文章

qt自定义信号和槽函数 emit

一.自定义信号 关键字:signals signals  : void ageChanged(int age); //虽然是一个函数,但是无需实现,参数age会传递到槽函数 二.信号和槽函数的关联 connect(boy,&Person::ageChanged,this,&Person::on_ageChanged); 三.发射信号 关键字:emit emit ageChanged(age);  //当年龄age改变时发射信号,让执行槽函数 四.槽函数 void Person::on_ag

如何在VS2013+QT5.3环境下使用自定义信号与槽函数

图1中标注出来的是VS2013中的QT界面设计师文件,双击默认打开的是Qt设计师工具. 在界面上面拉入一个PushButton,点击编辑信号与槽按钮进入编辑模式. 选择信号clicked(),发现可以从QWidget继承很多槽函数,暂时先选择close()槽函数,点OK 保存后,VS2013中有个文件“ui_testqt.h”会自动生成信号与槽的代码.此文件也是生成界面文件的源代码. 目前都是使用的默认的信号与槽函数,如果想触发自定义的槽函数呢?我们会想到可以直接修改ui_testqt.h里面的

4自定义信号和槽函数

自定义信号和槽 信号和槽的本质都是函数. 区别: 信号必须由signal关键字来声明 信号可以重载 信号没有返回值,但可以有参数.由于信号都是没有返回值,所以,槽函数一定没有返回值 信号就是函数的声明,只需声明,无需定义.槽既要函数声明也要完成定义. 使用方式:emit MySignal(); 例子说明:本例创建两个独立的窗口,分别在窗口中放置一个按钮,由此来进行两个窗口的切换.如:"切换到子窗口",即子窗口显示,主窗口隐藏.反之亦然. 按照之前的方式创建程序,另外在项目中"

【PyQt5-Qt Designer】pyqtSignal()-高级自定义信号与槽

PyQt 5信号与槽的几种高级玩法 参考:http://www.broadview.com.cn/article/824 from PyQt5.QtCore import QObject , pyqtSignal class CustSignal(QObject): #声明无参数的信号 signal1 = pyqtSignal() #声明带一个int类型参数的信号 signal2 = pyqtSignal(int) #声明带int和str类型参数的信号 signal3 = pyqtSignal(

QT 的信号与槽

转载: QT 的信号与槽机制介绍 QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT 库的基础之上.QT 支持下列平台:MS/WINDOWS-95.98.NT 和 2000:UNIX/X11-Linux.Sun Solaris.HP-UX.Digital Unix.IBM AIX.SGI IRIX:EMBEDDED- 支持 framebuffer

Qt的信号与槽机制

1.信号和槽机制是QT的核心机制,要精通QT编程就必须对信号和槽有所了解. 2.信号和槽是一种高级接口,应用于对象之间的通信,它是QT的核心特性,也是QT区别于其它工具包的重要地方. 3.信号和槽是QT自行定义的一种通信机制,它独立于标准的C/C++语言,因此要正确的处理信号和槽,必须借助一个称为moc(Meta Object Compiler)的QT工具,该工具是一个C++预处理程序,它为高层次的事件处理自动生成所需要的附加代码. 4.在我们所熟知的很多GUI工具包中,窗口小部件(widget

QT的信号和槽机制简介

信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念.元对象工具以及在实际使用过程中应注意的一些问题. QT是一个跨平台的C++ GUI应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前Linux上最为流行的KDE桌面环境就是建立在QT库的基础之上.QT支持下列平台:MS/WINDOWS-95.98.NT和2000:UNIX/X11-Linux.Sun Solaris.HP-UX.Digital Unix.IB

qt中信号与槽机制

一. 简介 就我个人来理解,信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁. 信号和槽机制是 Qt 的核心机制,可以让编程人员将互不相关的对象绑定在一起,实现对象之间的通信. 信号 当对象改变其状态时,信号就由该对象发射 (emit) 出去,而且对象只负责发送信号,它不知道另一端是谁在接收这个信号.这样就做到了真正的信息封装,能确保对象被当作一个真正的软件组件来使用. 槽 用于接收信号,而且槽只是普通的对象成员函数.一个槽并不知

QT的信号与槽机制介绍

信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念.元对象工具以及在实际使用过程中应注意的一些问题. QT是一个跨平台的C++ GUI应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前Linux上最为流行的KDE桌面环境就是建立在QT库的基础之上.QT支持下列平台:MS/WINDOWS-95.98.NT和2000:UNIX/X11-Linux.Sun Solaris.HP-UX.Digital Unix.IB