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")); }
原文地址:https://www.cnblogs.com/defen/p/5344154.html