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