2-5内置信号连接自定义槽

内置信号连接自定义槽

案例

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtWidgets>
class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
void onClick();
void onCheck(int state);
private:
QPushButton* clickBtn;
QLabel* label;

// QObject interface
protected:
void timerEvent(QTimerEvent *event);
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QWidget* widget = new QWidget(this);
setCentralWidget(widget);
clickBtn = new QPushButton("点击",widget);
QCheckBox* cd = new QCheckBox("connect",widget);
cd->setCheckState(Qt::Checked);
label = new QLabel(QTime::currentTime().toString(),widget);

QHBoxLayout* hbox = new QHBoxLayout(widget);
hbox->addWidget(clickBtn);
hbox->addWidget(cd);
hbox->addWidget(label);

startTimer(1000);
connect(clickBtn,&QPushButton::clicked,this,&MainWindow::onClick);
connect(cd,&QCheckBox::stateChanged,this,&MainWindow::onCheck);
}

MainWindow::~MainWindow()
{

}

void MainWindow::onClick()
{
statusBar()->showMessage("按钮被点击");
}

void MainWindow::onCheck(int state)
{
statusBar()->showMessage("");
if(state)
connect(clickBtn,&QPushButton::clicked,this,&MainWindow::onClick);
else
disconnect(clickBtn,&QPushButton::clicked,this,&MainWindow::onClick);
}

void MainWindow::timerEvent(QTimerEvent *event)
{
label->setText(QTime::currentTime().toString());
}