您的位置:首页 > 编程语言 > Qt开发

Qt基础: 信号和槽

2016-04-07 15:34 387 查看
信号和槽用于两个对象之间的通信, 信号和槽机制是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));
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt 通信