qt的信号与槽函数
关联:
bool connect ( const?QObject?*?sender, const?char?*?signal, const QObject * receiver, const char * slot, Qt::ConnectionType?type?= Qt::AutoConnection)
1.一个信号 对应槽函数
connect(&a1,SIGNAL(mysignals()),&b1,SLOT(mySlot()));
2.一个信号 对应多个槽函数
connect(&a1,SIGNAL(mysignals()),&b1,SLOT(mySlot()));
connect(&a1,SIGNAL(mysignals()),&c1,SLOT(mySlotccc()));
connect(&a1,SIGNAL(mysignals()),&d1,SLOT(mySlotcccddd()));
3.多个信号 对应一个槽函数
connect(&a1,SIGNAL(mysignals()),&b1,SLOT(mySlot()));
connect(&b1,SIGNAL(mysignalsb()),&b1,SLOT(mySlot()));
connect(&c1,SIGNAL(mysignalsc()),&b1,SLOT(mySlot()));
4.一个信号 对应一个信号
connect(&c1,SIGNAL(mysignalsc()),&b1,SIGNAL(mysignal()));
注意点:
1.继承 QObject , Q_OBJECT宏
2.public slots:包含了任何信号都可以相连的slots。
protected slots:包含了该类和它的子类的信号才能连接的slots。就是说这些slots只是类的实现的一部分,而不是它和外界的接口。
private slots:包含了只有该类本身的信号可以连接的slots。就是说这个类非常紧密,甚至它的子类都没有获得连接该类中slots的权利。
win.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include<QTimer> #include<QTime> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; QTime *mytime; QDate *mydate; QTimer *mytimer; public slots: void mytimes(); }; #endif // MAINWINDOW_H
win.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" #include<QTime> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); mytime = new QTime(); mydate = new QDate(); ui->label_2->setText(mydate->currentDate().toString("yyyy/MM/dd")); mytimer = new QTimer(); connect(mytimer,SIGNAL(timeout()),this,SLOT(mytimes())); mytimer->start(1000); } MainWindow::~MainWindow() { delete ui; } void MainWindow::mytimes() { ui->label->setText(mytime->currentTime().toString("hh:mm:ss")); ui->label_2->setText(mydate->currentDate().toString("yyyy/MM/dd")); }