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

网站页面设计最宽可做多宽网站建设公司推荐

网站页面设计最宽可做多宽,网站建设公司推荐,php 如何用op浏览器开发手机网站,网站建设小程序开发公司目录 信号槽的概念 按钮的常用信号 自定义槽函数 自定义信号函数 自定义槽和信号注意的事项 信号与槽的拓展 lambda表达式 信号槽的概念 信号槽是Qt框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如&#xff0c…

目录

信号槽的概念

按钮的常用信号

自定义槽函数

自定义信号函数

自定义槽和信号注意的事项

信号与槽的拓展

lambda表达式


信号槽的概念

信号槽是Qt框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号 (signal)这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect) 函数,意思是,将想要处理的信号和自己的一个函数 (称为槽 (slot) )绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。

connect()函数最常用的一般形式:
connect(sender, signal. receiver, slot):
参数解释:
        sender:发出信号的对象
        signal:发送对象发出的信号
        receiver:接收信号的对象
        slot:接收对象在接收到信号之后所需要调用的函数 (槽函数)

#include "widget.h"
#include <QPushButton>Widget::Widget(QWidget *parent): QWidget(parent)
{//创建一个按钮 点击按钮关闭窗口this->close();QPushButton *b = new QPushButton("点击关闭",this);//设置点击按钮 产生信号 会调用window close函数connect(b,&QPushButton::clicked,this,&Widget::close);
}Widget::~Widget()
{}

按钮的常用信号

在帮助中搜索QPushButton

点击信号

查看常用信号(点击 按下 释放 触发)

自定义槽函数

在类中public slots:下声明槽函数

#include "widget.h"
#include <QPushButton>
#include <qdebug.h>
Widget::Widget(QWidget *parent): QWidget(parent)
{b = new QPushButton;b->setParent(this);b->setText("点击发送信号");//注册信号与槽的连接//槽函数可以是普通的成员函数 还可以是槽函数//如果信号没有参数 槽函数也不能有参数 如果信号有参数 槽函数可以有也可以没有参数connect(b,&QPushButton::pressed,this,&Widget::print);
}void Widget::print()
{qDebug()<<"收到信号,打印信息";
}Widget::~Widget()
{}

可以看到,按钮被点击后信息被打印

自定义信号函数

父窗口点击按钮隐藏父窗口显示子窗口,子窗口点击按钮隐藏子窗口,并且发送信号10,

父窗口收到信号10,显示父窗口

sonwidget.h

#ifndef SONWIDGET_H
#define SONWIDGET_H#include <QWidget>
#include <QPushButton>
class Sonwidget : public QWidget
{Q_OBJECT
public:explicit Sonwidget(QWidget *parent = nullptr);QPushButton *b2;
signals://信号//信号没有返回值 可以有参数 信号函数不需要定义 只需要声明void window_hide_signal(int a);
public slots://槽void emit_mysignal();
};#endif // SONWIDGET_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include "sonwidget.h"
#include <QPushButton>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = 0);~Widget();Sonwidget *sonwindow;QPushButton *b1;
public slots:void button_cd();void signal_cd(int a);
};#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent): QWidget(parent)
{this->setWindowTitle("父窗口");sonwindow = new Sonwidget;sonwindow->show();b1 = new QPushButton();b1->setText("隐藏父窗口,显示子窗口");b1->setParent(this);connect(b1,&QPushButton::clicked,this,&Widget::button_cd);connect(sonwindow,&Sonwidget::window_hide_signal,this,&Widget::signal_cd);
}void Widget::button_cd()
{this->hide();this->sonwindow->show();
}void Widget::signal_cd(int a)
{qDebug()<<a;this->show();this->sonwindow->hide();
}Widget::~Widget()
{}

sonwidget.cpp

#include "sonwidget.h"
#include <QPushButton>
Sonwidget::Sonwidget(QWidget *parent) : QWidget(parent)
{this->setWindowTitle("子窗口");b2 = new QPushButton();b2->setText("隐藏子窗口,显示父窗口");b2->setParent(this);connect(b2,&QPushButton::clicked,this,&Sonwidget::emit_mysignal);
}void Sonwidget::emit_mysignal()
{window_hide_signal(10);//发送10
}

10被打印

自定义槽和信号注意的事项

发送者和接收者都需要是 QObject 的子类 (当然,槽函数是全局函数、Lambda 表达式等无需接收者的时候除外);

信号和槽函数返回值是 void

信号只需要声明,不需要实现,槽函数需要声明也需要实现

槽函数是普通的成员函数,作为成员函数,会受到 public、private、protected 的影响;

使用 emit 在恰当的位置发送信号;

使用 connect()函数连接信号和槽。

任何成员函数、static 函数、全局函数和 Lambda 表达式都可以作为槽函数

信号槽要求信号和槽的参数一致,所谓一致,是参数类型一致。

如果信号和槽的参数不一致,允许的情况是,槽函数的参数可以比信号的少,即便如此,槽函数存在的那些参数的顺序也必须和信号的前面几个一致起来。这是因为,你可以在槽函数中选择忽略信号传来的数据 (也就是槽函数的参数比信号的少)。

信号与槽的拓展

一个信号可以和多个槽相连

        如果是这种情况,这些槽会一个接一个的被调用,但是它们的调用顺序是不确定的。多个信号可以连接到一个槽,只要任意一个信号发出,这个槽就会被调用。

一个信号可以连接到另外的一个信号

        当第一个信号发出时,第二个信号被发出。除此之外,这种信号-信号的形式和信号-槽的形式没有什么区别。

槽可以被取消链接

        这种情况并不经常出现,因为当一个对象 delete 之后,Qt 自动取消所有连接到这个对象上面的槽。

信号槽可以断开

        利用 disconnect 关键字是可以断开信号槽的

使用 Lambda 表达式

        在使用 Qt 5的时候,能够支持 Qt 5的编译器都是支持 Lambda 表达式的。在连接信号和槽的时候,槽函数可以使用 Lambda 表达式的方式进行处理。

lambda表达式

lambda表达式用于定义并创建匿名的函数对象,以简化编程工作

#include "widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent): QWidget(parent)
{b = new QPushButton("点击",this);int a = 10;//槽函数可以是一个lambda表达式//lambda表达式中[]写=,代表将上面的函数的局部变量以值传递的方式传入表达式//lambda表达式中[]写&,代表将上面的函数的局部变量以引用的方式传入表达式//lambda表达式中[]写a,代表将上面的函数的局部变量a以值传递的方式传入表达式//lambda表达式中[]写a,b,代表将上面的函数的局部变量a和b以值传递的方式传入表达式//lambda表达式中[]写&a,代表将上面的函数的局部变量a以引用的方式传入表达式//mutable修饰的作用是可以修改传入lambda中的值//->代表lambda返回值的类型是intconnect(b,&QPushButton::clicked,this,[=]()mutable->{qDebug()<<a;qDebug()<<"点击成功";});
}Widget::~Widget()
{}

http://www.hrbkazy.com/news/16150.html

相关文章:

  • 网站开发前端简历优化整站
  • 重庆主城区疫情最新消息专业搜索引擎seo服务商
  • 网站怎么做发送邮件的超链接百度广告联盟app
  • 做淘宝客建网站用什么深圳全网推广公司
  • 动态网站建设包括哪些太原seo网站排名
  • 湖北省住房与城乡建设部网站谷歌推广seo
  • 超链接网站怎么做网推一手单渠道
  • 怎么让自己做的网站别人可以访问主流网站关键词排名
  • 湖北省住建厅网站官网专业seo站长工具
  • 怎么查看网站死链公众号推广合作平台
  • 云南网页设计制作临沂seo建站
  • 网站建设期末实践报告最新军事战争新闻消息
  • 做暧暧xoxo网站百度推广时间段在哪里设置
  • 重庆最专业的房产网站建设旺道seo推广效果怎么样
  • 新网站怎么做seo优化东莞seo优化方案
  • 郑州一网网站建设网上seo研究
  • 无法打开建设银行企业网站什么软件可以刷网站排名
  • app定制网站开发百度平台客服电话
  • 韩国做 mp4下载网站重庆seo网络优化咨询热线
  • 北京网站建设那些怎么打开网站
  • 无锡做网站baidu什么是电商?电商怎么做
  • 建设部人事教育司网站外贸独立站建站
  • 谁有人跟动物做的网站公众号推广方法
  • 有关网站开发的知识手机域名访问网站怎么进入
  • 做项目挣钱的网站中文域名的网站
  • 织梦做中英文网站步骤百度竞价外包
  • 检察院网站建设方案抖音推广平台
  • wordpress主题压缩包百度seo按天计费
  • 淘宝上买的建设网站能退款吗百度电话
  • 做国外电影网站免费宣传网站