Qt-day02
调用重载的信号
#ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QWidget> #include <QPushButton> #include <QDebug> #include "subwidget.h" class MainWidget : public QWidget { Q_OBJECT public: MainWidget(QWidget *parent = 0); ~MainWidget(); void cancelHandle(); void slotForWWindow(); void slotHidenMe(); void showMe(); void soltSubMsg(int num,QString msg); private: QPushButton *okBtn; QPushButton *cancelBtn; QPushButton *helpBtn; QPushButton *closeBtn; QPushButton *btn3; //子窗口对象 SubWidget subW; }; #endif // MAINWIDGET_H
#ifndef SUBWIDGET_H #define SUBWIDGET_H #include <QWidget> #include <QPushButton> class SubWidget : public QWidget { Q_OBJECT public: explicit SubWidget(QWidget *parent = nullptr); signals: //自定义信号 必须使用signals声明 信号不用实现。如果不加signals关键词就需要实现,不实现就会报错 加上以后就不需要实现了 /** // 1、信号的返回值必须为void 2、可以有参数 3、可以重载 4、信号发送 emit + 信号名 * @brief signSub */ void signSub(); void signSub(int,QString); public slots: void mySolt(); private: QPushButton *b1; }; #endif // SUBWIDGET_H
#include "mainwidget.h" MainWidget::MainWidget(QWidget *parent) : QWidget(parent) { okBtn = new QPushButton(this); okBtn->setText("确定按钮"); okBtn->move(20,100); cancelBtn = new QPushButton("取消按钮",this); cancelBtn->move(100,100); helpBtn = new QPushButton; helpBtn->setParent(this); helpBtn->setText("帮助"); helpBtn->move(200,100); closeBtn = new QPushButton("关闭按钮",this); closeBtn ->move(300,100); // cancelBtn 关闭窗口 connect(closeBtn,&QPushButton::clicked,this,&MainWidget::close); connect(cancelBtn,&QPushButton::clicked,this,this->cancelHandle); // 自定义槽函数 /** 1、QT5中可以是任意的类成员函数,全局函数,静态函数,lambda表达式 2、槽函数需要与信号对应(返回值,参数) 3、信号是没有返回值的,即槽函数返回值void void mySig(int,double,QString) void mySolt(int,double,QString) * @brief connect */ // connect(helpBtn,&QPushButton::clicked,this,this->cancelHandle); connect(helpBtn,&QPushButton::released,this,&MainWidget::slotForWWindow); btn3 = new QPushButton("打开子窗口",this); btn3->resize(100,50); btn3->move(200,200); connect(btn3,&QPushButton::clicked,this,&MainWidget::slotHidenMe); // // 接口子页面的信号 // connect(&subW,&SubWidget::signSub,this,&MainWidget::showMe); // 信号重载调用 /** * @brief connect */ void (SubWidget::*MySigSub)() = &SubWidget::signSub; // 接口子页面的信号 connect(&subW,MySigSub,this,&MainWidget::showMe); void (SubWidget::*MySigSubPlus)(int,QString) = &SubWidget::signSub; connect(&subW,MySigSubPlus,this,&MainWidget::soltSubMsg); } MainWidget::~MainWidget() { } void MainWidget::cancelHandle(){ qDebug() << "您点击了取消按钮" ; } void MainWidget::slotForWWindow(){ qDebug() << "册数传入的值:" ; closeBtn->setText("new 关闭"); } void MainWidget::slotHidenMe() { this->hide(); subW.show(); } void MainWidget::showMe() { subW.hide(); this->show(); } void MainWidget::soltSubMsg(int num,QString msg) { qDebug() << "数字:" << num << ",内容:" << msg <<endl; }
#include "subwidget.h" SubWidget::SubWidget(QWidget *parent) : QWidget(parent) { b1 = new QPushButton("中腾",this); b1->resize(100,40); setWindowTitle("软件园"); // 子页面 对 父页面进行操作 自定义信号 间接操作 resize(400,600); connect(b1,&QPushButton::clicked,this,&SubWidget::mySolt); } void SubWidget::mySolt() { emit signSub(); emit signSub(200,"hello 200!!"); }