qt的信号与槽函数

时间:2023-03-08 17:22:46

关联:
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 = );
~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();
} 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")); }