1 //qqwidget.cpp 2 #include "qqwidget.h" 3 #include "ui_qqwidget.h" 4 5 qqwidget::qqwidget(QWidget *parent) : 6 QWidget(parent), 7 ui(new Ui::qqwidget) 8 { 9 ui->setupUi(this); 10 11 setWindowTitle("老大"); 12 b.setParent(this); 13 b.setText("change"); 14 15 connect(&b,&QPushButton::released,this,&qqwidget::myslot); 16 17 //处理子窗口信号 18 connect(&sub1,&sub::mysignal,this,&qqwidget::myslot2); 19 20 } 21 22 qqwidget::~qqwidget() 23 { 24 delete ui; 25 } 26 void qqwidget::myslot() 27 { 28 this->hide(); 29 sub1.show(); 30 } 31 void qqwidget::myslot2() 32 { 33 this->show(); 34 sub1.hide(); 35 } 36 37 38 //sub.cpp 39 #include "sub.h" 40 41 sub::sub(QWidget *parent) : QWidget(parent) 42 { 43 b1.setParent(this); 44 b1.setText("切换至主窗口"); 45 46 47 connect(&b1,&QPushButton::released,this,&sub::mysubslot); 48 } 49 50 void sub::mysubslot() 51 { 52 emit mysignal(); 53 } 54 55 //qqwidget.h 56 #ifndef QQWIDGET_H 57 #define QQWIDGET_H 58 59 #include <QWidget> 60 #include <QPushButton> 61 #include "sub.h" 62 63 namespace Ui { 64 class qqwidget; 65 } 66 67 class qqwidget : public QWidget 68 { 69 Q_OBJECT 70 71 public: 72 explicit qqwidget(QWidget *parent = nullptr); 73 ~qqwidget(); 74 QPushButton b; 75 void myslot(); 76 void myslot2(); 77 sub sub1; 78 79 private: 80 Ui::qqwidget *ui; 81 }; 82 83 #endif // QQWIDGET_H 84 85 86 //sub.h 87 #ifndef SUB_H 88 #define SUB_H 89 90 #include <QWidget> 91 #include <QPushButton> 92 93 class sub : public QWidget 94 { 95 Q_OBJECT 96 public: 97 explicit sub(QWidget *parent = nullptr); 98 QPushButton b1; 99 void mysubslot(); 100 signals: 101 void mysignal(); 102 103 public slots: 104 }; 105 106 #endif // SUB_H
1. sub窗口调用qqwidget主窗口时,在sub.h中sub类中自定义了信号函数,sub中将按钮与该信号函数connect。
同时,在qqwidget主窗口中将该信号函数与某slot函数connect,从而执行操作。
注:主窗口hide并不是消失,使用自定义信号函数connect后即可触发相应slot函数