Two independent windows and custom signals

Two independent windows and custom signals

1. Two separate windows

Implement a simple window program: first there are two windows, each of which has a button. When the button in the first window is clicked, the second window is displayed and the first window is hidden, and vice versa.

2. Custom signal

自定义信号的规则

  1. 信号必须有signals进行声明
  2. 信号没有返回值但是可以有参数
  3. 信号就是函数的声明,没有实现也不需要实现
  4. 使用时必须加上emit + 自定义信号的方式使用
  5. 信号参数的个数可以比槽函数的参数个数多,反之不行
  6. 一个信号可以连接多个槽,但是槽函数的执行顺序是随机的,不受控制
  7. 槽函数可以同时接收多个信号
  8. 信号连接成功后可以断开连接disconnect
  9. 信号可以连接信号
  10. 槽函数可以是lanbda表达式

mainwidget.h:

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>
#include "subwidget.h"

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = 0);
    ~MainWidget();
    void ChengeWin();//槽函数,当调用该函数时主窗口隐藏,子窗口显示
    void dealsub();//槽函数,当调用该函数时主窗口显示,子窗口隐藏
private:
    QPushButton b3;//主窗口中的按钮
    SubWidget w;//主窗口中创建另外子一个窗口的对象
};

#endif // MAINWIDGET_H

subwidget.h:

#ifndef SUBWIDGET_H
#define SUBWIDGET_H

#include <QWidget>
#include <QPushButton>

class SubWidget : public QWidget
{
    Q_OBJECT
public:
    explicit SubWidget(QWidget *parent = nullptr);
    void SendSolt();//槽函数:功能是发送自定义的信号

signals:
    void Mysignal();//自定义的信号

public slots:

private:
    QPushButton b;//自窗口当中的按钮
};

#endif // SUBWIDGET_H

mainwidget.cpp:

#include "mainwidget.h"

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
	//给主窗口当中设置内容
    setWindowTitle("lao da");
    b3.setParent(this);
    b3.setText("get xiao di win");
    b3.move(210,210);
	
	//关联主窗口当中的b3按钮和主窗口,当触发released信号时就执行ChengeWin槽函数
    connect(&b3,&QPushButton::released,this,&MainWidget::ChengeWin);
	
	//关联子窗口和主窗口,当主窗口触发Mysignal时执行dealsub槽函数
    connect(&w,&SubWidget::Mysignal,this,&MainWidget::dealsub);

	//固定窗口大小
    resize(400,400);
}
//对子窗口发送过来的信号进行处理
void MainWidget::dealsub()
{
    w.hide();//子窗口隐藏
    this->show();//主窗口显示
}

//按钮发送给主窗口的槽函数
void MainWidget::ChengeWin()
{
    w.show();//子窗口显示
    this->hide();//主窗口隐藏
}

subwidget.cpp:

#include "subwidget.h"

SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{
	//设置自窗口属性
    this->setWindowTitle("xiao di");
    b.setParent(this);
    b.move(80,80);
    b.setText("get lao da win");

	//关联按钮和子窗口,当触发clicked信号时,执行SendSolt槽函数,
	//向主窗口发送自定义信号
    connect(&b,&QPushButton::clicked,this,&SubWidget::SendSolt);

	//固定窗口大小
    resize(400,400);
}

//给主窗口发送一个自定义的Mysignal信号
void SubWidget::SendSolt()
{
    emit Mysignal();
}

main.cpp:

#include "mainwidget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWidget w;
    w.show();

    return a.exec();
}

Insert picture description here

Published 158 original articles · praised 117 · 90,000 views

Guess you like

Origin blog.csdn.net/wolfGuiDao/article/details/105462670