• QT的学习信号与槽实现两个窗体的联通


    #include "mywidget.h"
    
    MyWidget::MyWidget(QWidget *parent)
        : QWidget(parent)
    {
        b1.setParent(this);
        b1.setText("切换到子窗口");
        b1.move(100,100);
        resize(400,400);
        connect(&b1,&QPushButton::pressed,this,&MyWidget::MySolt);
        //处理子窗口的信息
        void (SubWidget::*ptr)(int,QString)=&SubWidget::mySignal;
        connect(&m_cd,ptr,this,&MyWidget::SoltParam);
    
    }
    
    MyWidget::~MyWidget()
    {
    #include "subwidget.h"
    
    SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
    {
         b2.setParent(this);
         b2.setText("切换到主窗口");
         b2.move(100,100);
         resize(400,400);
         connect(&b2,&QPushButton::pressed,this,&SubWidget::MySolt);
    
    }
    SubWidget::~SubWidget()
    {
    
    }
    
    void SubWidget::MySolt()
    {
        emit mySignal(250,"zhang");
    }
    
    
    #ifndef MYWIDGET_H
    #define MYWIDGET_H
    
    #include <QWidget>
    #include <QPushButton>
    #include "subwidget.h"
    #include <QDebug>
    
    
    class MyWidget : public QWidget
    {
        Q_OBJECT
    public:
        MyWidget(QWidget *parent = nullptr);
        ~MyWidget();
        void MySolt();
        void DealSolt();
        void SoltParam(int a,QString str);
    private:
        QPushButton b1;
        SubWidget m_cd;
    };
    
    #endif // MYWIDGET_H
    #ifndef SUBWIDGET_H
    #define SUBWIDGET_H
    
    #include <QWidget>
    #include <QPushButton>
    
    class SubWidget : public QWidget
    {
        Q_OBJECT
    public:
        explicit SubWidget(QWidget *parent = nullptr);
        ~SubWidget();
    signals:
        /*
         * 信号必须由这个关键字来声明
         * 信号没有返回值,但是可以修改
         * 信号就是函数的声明,只需声明,无须定义
         * 使用:emit mySignal();
         * 可以有参数,怎么接受?
         */
        void mySignal(int a,QString str);
    
    public slots:
        void MySolt();
    private:
        QPushButton b2;
    };
    
    #endif // SUBWIDGET_H
    
    
    }
    
    void MyWidget::MySolt()
    {
     m_cd.show();
     this->hide();
    }
    
    void MyWidget::SoltParam(int a,QString str)
    {
    
       qDebug() <<a<<str.toUtf8().data();
    }
    void MyWidget::DealSolt()
    {
        this->show();
        m_cd.hide();
    }
  • 相关阅读:
    java设计模式之代理模式 ,以及和java 回调机制的区别
    oracle 安装,启动 ,plsql 连接
    jsp 访问文件夹中的图片,tomcat配置虚拟目录
    最实用解决tomcat startup.bat 一闪而过
    oracle 创建表
    java debug源码完整版
    node.js事件轮询(1)
    markdown命令语法
    mac常用的命令
    node + nginx + mongo搭建负载均衡
  • 原文地址:https://www.cnblogs.com/z2529827226/p/11694323.html
Copyright © 2020-2023  润新知