QT学习1——独立窗口的切换

程序主要功能:创建两个独立窗口,窗口各设计一个按钮控件,按下按钮实现本界面关闭,另一界面打开。

                                       主界面                                                                  子界面

QT学习1——独立窗口的切换QT学习1——独立窗口的切换

主要程序:

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

上一篇:webpack 3.X学习之Babel配置


下一篇:QT 监听键盘按键