程序主要功能:创建两个独立窗口,窗口各设计一个按钮控件,按下按钮实现本界面关闭,另一界面打开。
主界面 子界面
主要程序:
1:新建主界面继承QWidget,UI界面上按钮控件
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include"sub_window.h" namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); public slots: void main_change_sub(); void sub_change_main(); private: Ui::Widget *ui; Sub_window sub_A; }; #endif // WIDGET_H
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); connect(ui->pushButton,&QPushButton::pressed,this,&Widget::main_change_sub); //connect(&sub_A,SIGNAL(mysignal()),this,SLOT(sub_change_main()));//QT4写法 connect(&sub_A,&Sub_window::mysignal,this,&Widget::sub_change_main);//QT5写法 /*connect(&sub_A,&Sub_window::mysignal, [=]() { this->sub_change_main(); } );*/ } Widget::~Widget() { delete ui; } void Widget::main_change_sub() { this->hide(); sub_A.show(); } void Widget::sub_change_main() { this->show(); sub_A.hide(); }
2:增加一个窗口类,继承QWidget
#ifndef SUB_WINDOW_H #define SUB_WINDOW_H #include <QWidget> #include <QPushButton> class Sub_window : public QWidget { Q_OBJECT public: explicit Sub_window(QWidget *parent = nullptr); QPushButton button;//子界面定义一个按钮控件 signals: void mysignal();//信号只要定义不用声明 public slots: void sendmysignal(); }; #endif // SUB_WINDOW_H
#include "sub_window.h" Sub_window::Sub_window(QWidget *parent) : QWidget(parent) { button.setParent(this);//指定按键的父对象 this->setFixedSize(200,200); button.setText("切换到主界面"); button.move(50,50); connect(&button,&QPushButton::pressed,this,&Sub_window::sendmysignal); } void Sub_window::sendmysignal() { emit mysignal(); }
程序注意事项:
1:子界面需要通过自定义信号来通知主界面——mysignal()
2:主程序需要包含子界面的头文件,创建子界面—— #include"sub_window.h" ,Sub_window sub_A;
3:QT信号和槽connect的三种方法
(1):connect(&发送者,SIGNAL(信号函数),接受者,SLOT(槽函数))
(2):connect(&发送者,&发送者父类::信号,&接收者,&接收者父类::槽)
(3):connect(&发送者,&发送者父类::信号,[=](){槽函数}) // LAMBDA表达式,使用LAMBAD需要在工程文件下添加CONFIG +=C++11