QT之信号与槽

1、(QT5)信号与槽整体分析

QPushButton b;
MainWidget m;
connect(&b, &QPushButton::pressed, &m, &MainWidget::close);

1、信号发出者
“&b”:是信号发出者。格式:一般为某一对象的地址(即对象指针类型
)。
2、信号
“ &QPushButton::pressed”:是要处理的信号。 格式: &信号发出者的类名::信号名字。
3、信号接收者
“ &m”: 是信号接收者。格式:一般为某一对象的地址(即对象指针类型
)。
4、槽函数(即信号处理函数)
“ &MainWidget::close”:是槽函数(即信号处理函数)。格式:&接收的类名::槽函数名字。

总结:“信号与槽”是QT 对象之间通信的接口。

2、槽函数(slot)

2.1 槽函数的来源

  在QT5中,对象的成员函数、普通全局函数、静态函数都可以做槽函数。可以将槽函数看作普通函数,但是普通函数不一定都是槽函数(见槽函数特点)。

2.2 槽函数的特点

1、槽函数和信号(信号其实也是一种函数)的参数和返回值要一样;
2、信号函数没有返回值,所以槽函数也没有返回值。

2.3 槽函数举例

connect(b2, &QPushButton::released, this, mySlot);
void mySlot()
{
b2->setText(“123”); //槽函数具体函数体。
}
注意:槽函数mySlot没有返回值(void),没有参数。

3 信号(signals)特点

1、声明信号时,信号必须有signals关键字。 如下图中的"mySignal()"信号。
class SubWidget : public QWidget
{
Q_OBJECT
public:
void sendSlot();

signals:
void mySignal();
void mySignal(int, QString);

public slots:

private:
QPushButton b;
};
2、信号没有返回值,但可以有参数。 如上图中的"mySignal()"信号。
3、 信号就是函数的声明,只需声明,无需定义。
4、使用信号时必须加“emit”关键字。 如下图。
void SubWidget::sendSlot()
{
emit mySignal();
emit mySignal(250, “我是子窗口”);
}

5、信号可以重载,如下加黑的部分。
class SubWidget : public QWidget
{
Q_OBJECT
public:
explicit SubWidget(QWidget *parent = 0);
void sendSlot();

signals:
void mySignal();
void mySignal(int, QString);

public slots:

private:
QPushButton b;
};

注意:信号只有函数声明,没有函数体,信号的参数是传给和其匹配的槽函数的。,所以才要求槽函数和信号的参数要一样。

4 信号重载实例

void (SubWidget::*funSignal)() = &SubWidget::mySignal;
/connect(&subWin, funSignal, this, &MainWidget::dealSub);

void (SubWidget::*testSignal)(int, QString) = &SubWidget::mySignal;
connect(&subWin, testSignal, this, &MainWidget::dealSlot);

5 QT4的信号与槽

connect(&subWin, SIGNAL(mySignal()), this, SLOT(dealSub()) ;

connect(&subWin, SIGNAL(mySignal(int,QString)),this, SLOT(dealSlot(int,QString)) );

1、特点:Qt4槽函数定义时必须有slots关键字来修饰
class MainWidget : public QWidget
{
Q_OBJECT

public:
MainWidget(QWidget *parent = 0);
~MainWidget();

public slots:
void mySlot();
void changeWin();
void dealSub();
void dealSlot(int, QString);

private:
QPushButton b1;
QPushButton *b2;
QPushButton b3;

SubWidget subWin;

};
2、缺点:SIGNAL SLOT 将函数名字转换为字符串 ,不进行语法错误检查

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值