涉及的技术要点:
1、信号与槽函数连接
1)信号:普通函数,只需声明,无需实现
2)槽函数:QT5中任意成员函数,静态函数,全局函数和lambda表达式
3)信号与槽没有返回值,但可以有参数
4)信号与槽的参数列表必须一致;例如:void sg(int,double,char);void sl(int,double,char);
5)信号与槽函数的参数个数可以不一样,信号的个数大于槽函数个数
6)一个信号可以连接多个槽函数,一个槽函数可以被多个信号连接
7)信号可以连接信号
8)信号与槽断开连接,disconnect()
2、写了一个子类
3、两个窗口之间信号的传递
信号与槽函数代码片段:
子函数部分
#ifndef SUBWINDOW_H
#define SUBWINDOW_H
#include <QWidget>
#include <QPushButton>
class subWindow : public QWidget
{
Q_OBJECT
public:
explicit subWindow(QWidget *parent = nullptr);
QPushButton p2;
signals:
void sendSg();
public slots:
void mySlot();
};
#endif // SUBWINDOW_H
cpp:
#include "subwindow.h"
subWindow::subWindow(QWidget *parent) : QWidget(parent)
{
p2.setParent(this);
p2.setText("123");
setWindowTitle("son");
connect(&p2,&QPushButton::clicked,this,&subWindow::mySlot);//信号与槽
}
void subWindow::mySlot()
{
emit sendSg();//发送信号
}
主窗口部分:
头文件:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QPushButton>
#include <QMainWindow>
#include "subwindow.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void dealSlot();
void changeWindow();
private:
Ui::MainWindow *ui;
QPushButton p;
subWindow subWin;
};
#endif // MAINWINDOW_H
cpp部分:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowTitle("fatherWindow");
p.setParent(this);
p.move(50,50);
p.resize(100,50);
p.setText("abc");
connect(&p,&QPushButton::clicked,this,&MainWindow::changeWindow);
connect(&subWin,&subWindow::sendSg,this,&MainWindow::dealSlot);//接受来自子类的信号,并在主窗口执行槽函数
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::changeWindow()
{
this->hide();
subWin.show();
}
void MainWindow::dealSlot()
{
this->show();
subWin.hide();
}
运行结果:
点击按钮切换不同界面。