两个独立的窗口和自定义信号

两个独立的窗口和自定义信号

1.两个独立的窗口

实现一个简单的窗口程序:首先有两个窗口,每个窗口当中都有一个按钮,当点击第一个窗口中的按钮时显示第二个窗口,隐藏第一个窗口,反之亦然。

2.自定义信号

自定义信号的规则

  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();
}

在这里插入图片描述

发布了158 篇原创文章 · 获赞 117 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/wolfGuiDao/article/details/105462670
今日推荐