信号与槽

一,信号与槽

1.1,信号与槽的作用

信号槽机制主要用来在不同的对象之间传递数据,例如:定义SendObject类用来发送消息,在Widget窗口接受消息

//SendObject.h
class SendObject : public QObject
{
    Q_OBJECT
public:
    explicit SendObject(QObject *parent = 0);
    void setMessage(const QString &message);

private:
    QString m_strMessage;

signals:
    //自定义信号函数
    void sendMessage(const QString &message);

public slots:
};
//SendObject.cpp
#include "SendObject.h"

SendObject::SendObject(QObject *parent) : QObject(parent)
{

}

void SendObject::setMessage(const QString &message)
{
    m_strMessage = message;
    //发送消息
    emit sendMessage(message);
}
//Widget.h
class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;

public slots:
    //定义槽函数用来接受消息
    void getMessage(const QString &message);
};
//Widget.cpp
#include "Widget.h"
#include "ui_widget.h"
#include "SendObject.h"

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

    SendObject *pObj = new SendObject;
    //信号与槽链接在一起
    connect(pObj, SIGNAL(sendMessage(const QString &)), this, SLOT(getMessage(const QString &)));
    pObj->setMessage(QString("hello world"));
}

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

//在槽函数中相应信号函数
void Widget::getMessage(const QString &message)
{
    qDebug()<

1.2,信号与槽函数的特点

  • 信号函数与槽函数的返回值都为空。
  • 一个信号可以发送给多个槽函数,多个信号也可以发送给同一个槽函数,但是常见的是一个信号发给一个槽函数。

1.3,常见的信号与槽链接不上的原因

  • 头文件没有设置Q_OBJECT宏。
  • 信号与槽函数的参数类型不匹配,例如:信号函数传递的是 const QString 类型,此时槽函数的类型是 QString 类型,会导致信号与槽链接不上。例如:信号函数传递的是 QString & 类型,此时槽函数的类型是QString 类型,也会导致信号与槽链接不上。

你可能感兴趣的:(Qt基础知识)