两种connect函数(2021-06-22)

两种connect函数

  • 利用SIGNAL() and SLOT() macros,调用的connect函数如下:
[static] QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
  • 调用形参为 成员函数指针 :PointerToMemberFunction 的connect函数
[static] QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection)

第一个类: mainWidget
mainWidget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QPushButton>
#include"subwin.h"
class mainWidget : public QWidget
{
    Q_OBJECT
public:
    QPushButton*  bt_SwitchSubWin;
    QPushButton* bt_close;
    QPushButton* bt_FullScreen;
    // subW 需要提前开辟空间,否则会导致 connect 函数初始化失败
    subWin* subW=new subWin;
public slots:
    void showSubWin();
    void showMainWin();
    void PrintSth();
    void PrintSth(QString str);

//    void PrintSth(QString str);
public:
    mainWidget(QWidget *parent = 0);
    ~mainWidget();

};

#endif // WIDGET_H

mainWidget.cpp

#include "mainWidget.h"
#include<QDebug>
void mainWidget::showSubWin()
{
    subW->show();
    this->hide();
}
void mainWidget::showMainWin()
{
    this->show();
    subW->hide();
}

void mainWidget::PrintSth()
{
    qDebug()<<"fafafaf";
}
void mainWidget::PrintSth(QString str)
{
    qDebug()<<str;
}




mainWidget::mainWidget(QWidget *parent)
    : QWidget(parent)
{
   this->resize(640,360);
   this->setWindowTitle(QString("主窗口").toUtf8());
   bt_SwitchSubWin=new QPushButton(this);
   bt_SwitchSubWin->move(50,50);
   bt_SwitchSubWin->setText("切换子窗口");
   bt_close=new QPushButton(this);
   bt_close->setText("关闭");
   bt_FullScreen=new QPushButton(this);
   bt_FullScreen->move(100,100);
   bt_FullScreen->setText("全屏");

   connect(bt_SwitchSubWin,&QPushButton::clicked,this,&mainWidget::showSubWin);
   connect(bt_close,&QPushButton::clicked,this,&QWidget::close);
   connect(bt_FullScreen,&QPushButton::clicked,this,&QWidget::showFullScreen);
//   connect(subW,SIGNAL(showSignal()),this,SLOT(showMainWin()));

   connect(subW,&subWin::showSignal,this,&mainWidget::showMainWin);
   connect(subW,SIGNAL(mySignals()),this,SLOT(PrintSth()));
   //下面使用 重载 带有参数的 信号
    connect(subW,SIGNAL(mySignals(QString)),this,SLOT(PrintSth(QString)));

}

mainWidget::~mainWidget()
{

}

subwin.h

#ifndef SUBWIN_H
#define SUBWIN_H

#include <QWidget>
#include<QPushButton>
class subWin : public QWidget
{
    Q_OBJECT
public:
    QPushButton *bt_swithMainWin;
    QPushButton *bt_close;

public:
    explicit subWin(QWidget *parent = nullptr);

signals:
    void mySignals();
    void mySignals(QString);
    void showSignal();
public slots:

};

#endif // SUBWIN_H

subwin.cpp

#include "subwin.h"

subWin::subWin(QWidget *parent) : QWidget(parent)
{
    this->resize(500,300);
    this->setWindowTitle("子窗口");
    bt_close=new QPushButton("关闭",this);
    bt_swithMainWin=new QPushButton("切换到主窗口",this);
    bt_swithMainWin->move(50,50);
    connect(bt_close,&QPushButton::clicked,this,&QWidget::close);
    connect(bt_swithMainWin,&QPushButton::clicked,
       [=]()
    {
        emit mySignals();
        emit mySignals("我是子窗口");
        emit showSignal();
    } );

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值