Qt基础: 信号和槽

来源:互联网 发布:多路访问网络 编辑:程序博客网 时间:2024/06/03 18:51

信号和槽用于两个对象之间的通信, 信号和槽机制是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_OBJECTpublic:    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
原创粉丝点击