Qt基础: 信号和槽

信号和槽用于两个对象之间的通信, 信号和槽机制是Qt 的核心特征, 也是Qt 不同于其他开发框架的最突出的特征.


注意点:
1使用signals 关键字声明信号;
2
signals 前不能使用 public, protected, private 限定符, 因为只有定义该信号的类以及其子类才可以发送该信号;
3信号只用声明,无需也不能进行定义,没有返回值, 只能使用 void 类型;
4
只有QObject 类及其子类才能使用信号和槽机制,故需要在类声明最开始处加 Q_OBJECT 宏.

Demo

#ifndef SIGNALS_SLOTS_H
#define SIGNALS_SLOTS_H

#include <QDialog>

namespace Ui {
class signals_slots;
}
class QPushButton;
class QSpinBox;
class QLabel;

//处理信号的对象
class signals_slots : public QDialog
{
    Q_OBJECT

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

signals:
    //自定义信号
    void dlgReturn(int);

private slots:
    //自定义槽
    void showValue(int value);
    void pushButton_clicked();

private:
    Ui::signals_slots *ui;
    QPushButton *pushButton;
    QSpinBox *spinBox;
    QLabel *label;
};

#endif // SIGNALS_SLOTS_H

///////////////////////////////////

#include <QtGui>

#include "signals_slots.h"
#include "ui_signals_slots.h"


signals_slots::signals_slots(QWidget *parent) : QDialog(parent),
    ui(new Ui::signals_slots)
{
    ui->setupUi(this);
    QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));

    pushButton = new QPushButton(this);
    pushButton->setText(tr("发射信号"));
    spinBox = new QSpinBox(this);
    spinBox->setValue(50);
    label = new QLabel(this);
    label->setText("value=");

    QHBoxLayout *layout = new QHBoxLayout(this);
    layout->addWidget(spinBox);
    layout->addWidget(pushButton);
    layout->addWidget(label);
    setLayout(layout);

    //连接 按钮 和"按下按钮"槽
    connect(pushButton, SIGNAL(clicked()), this, SLOT(pushButton_clicked()));
    //连接自定义信号和自定义槽
    connect(this, SIGNAL(dlgReturn(int)), this, SLOT(showValue(int)));

    setWindowTitle(tr("自定义信号发送与接收"));

}

signals_slots::~signals_slots()
{
    delete ui;
}
void signals_slots::pushButton_clicked()
{
    int value = spinBox->value();
    emit dlgReturn(value);      //发射信号
}
void signals_slots::showValue(int value)
{
    label->setText(tr("value=%1").arg(value));
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值