Qt学习(八)信号与槽

一.什么是信号与槽?

        通常情况下,我们需要通过信号、事件等,去触发程序做一些特定的事情,也就是常说的人机交互。当某个事件发生时,相应控件接受到事件的发生,就会发出一个信号,这时会有一个对象接收该信号,与该信号进行连接,(使用连接函数connect())将接收到的信号与自己的函数(即槽函数slot())建立联系,通过槽函数来对信号进行处理。

在编程时,第一步要在.h文件中进行槽函数的声明

1.格式如下:

public slots:
    void 自定义函数名称(参数类型);

2.举例:我声明了一个槽函数,将函数命名为slotQComboBoxValueChanged,我想要实现的槽函数功能是将QCombox中字符串的改变显示到Label中。通过Qt助手查找(文末有使用Qt助手查找的方法)可以看到,我所需的槽函数参数类型为const QString &value。

public slots:
    void slotQComboBoxValueChanged(const QString &value);

值得注意的是,在进行信号与槽的连接时,只需写出参数的类型,不需写出变量名称。

第二步要在.c 文件中定义槽函数。

1.格式如下:

void 类名称::槽函数名称(参数类型)
{
    对信号的处理;
}

2.举例:我定义了一个槽函数,我想要实现的槽函数功能是将QCombox中字符串的改变显示到Label中。通过Qt助手查找(文末有使用Qt助手查找的方法)可以看到,我所需的槽函数参数类型为const QString &value。

void CMainWindow::slotQComboBoxValueChanged(const QString &value)
{
    m_pLab->setText(value);
}

第三步要将信号与槽进行连接。在连接时需要使用连接函数connect()。

1.什么是连接函数?

       创建一个从发送方对象中的信号到接收方对象中的方法的给定类型的连接。 返回连接的句柄,该句柄以后可用于断开连接。在指定信号和方法时,必须使用 SIGNAL ()和 SLOT ()宏。

2.格式如下:

 connect(发出信号的对象,SIGNAL(发出的信号(参数类型)),this,SLOT(槽函数名称(参数类型)));

 

3.举例:我想要实现的功能是:当m_pCbox中的当前值改变时,所产生的信号被我所定义的槽函数接收到,通过connect()实现了此功能。

connect(m_pCbox,SIGNAL(currentTextChanged(const QString &)),this,SLOT(slotQComboBoxValueChanged(const QString &)));

值得注意的是,一个信号可以连接到多个槽和信号,多个信号可以连接到一个槽。

 

二.通过Qt助手查找控件可以发出的信号种类

以QComboBox为例。

1.打开Qt Assistant。

找到“索引",在查找栏输入“QComboBox”

Qt学习(八)信号与槽_第1张图片

可以看到在右侧出现了类的介绍

Qt学习(八)信号与槽_第2张图片

2.往下翻 找到  “Signals”的加粗字样 ,圈出的红色方框里即为控件可以发出的信号以及对应的参数类型。

Qt学习(八)信号与槽_第3张图片

 

你可能感兴趣的:(Qt学习(八)信号与槽)