Qt信号与槽第三章
来源:互联网 发布:淘宝人群导购怎么参加 编辑:程序博客网 时间:2024/06/06 02:29
mainwindow.h
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include "signalandslot.h"#include <QMainWindow>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); signalandslot a,b;private slots: void on_action_2_triggered();private: Ui::MainWindow *ui;};#endif // MAINWINDOW_H
signalandslot.h
#ifndef SIGNALANDSLOT_H#define SIGNALANDSLOT_H#include <QObject>class signalandslot : public QObject{ Q_OBJECTpublic: explicit signalandslot(QObject *parent = 0); int Data;signals: void DataChanged(int Data);public slots: void SetData(int Data);};#endif // SIGNALANDSLOT_Hmainwindow.cpp
#include "mainwindow.h"#include "ui_mainwindow.h"#include "signalandslot.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); ui->statusBar->showMessage(tr("a.Data=%1 b.Data=%2").arg(a.Data).arg(b.Data)); //Qt5的写法 connect(&b,&signalandslot::DataChanged,&a,&signalandslot::SetData);}MainWindow::~MainWindow(){ delete ui;}void MainWindow::on_action_2_triggered(){ b.SetData(100); ui->statusBar->showMessage(tr("a.Data=%1 b.Data=%2").arg(a.Data).arg(b.Data));}void MainWindow::on_pushButton_clicked(){ ui->statusBar->showMessage(tr("b.Data=%1").arg(b.Data));}
signalandslot.cpp
#include "signalandslot.h"signalandslot::signalandslot(QObject *parent) : QObject(parent){ Data=0; }void signalandslot::SetData(int inputData){ if(Data!=inputData){ Data=inputData; //emit抛出信号 emit DataChanged(Data); }}
注意
emit DateChanged(Data)//抛出信号
信号的传参
Qt4 和Qt5 的自定义建立信号与槽的方式不同
Qt4
QObject::connect(&newspaper,SIGNAL(newPaper(QString)), &reader, SLOT(receiveNewspaper(QString)));Qt5
QObject::connect(&newspaper,&Newspaper::newPaper, &reader, &Reader::receiveNewspaper);
阅读全文