Qt实战案例(11)——利用Qt实现界面跳转与关闭操作

目录

    • 一、项目介绍
    • 二、项目基本配置
    • 三、UI界面设计
    • 四、emit
    • 五、主程序实现
      • 5.1 mainwindow.h头文件
      • 5.2 mainwindow.cpp源文件
      • 5.3 newwindow.h头文件
      • 5.4 newwindow.cpp源文件
    • 六、效果演示

一、项目介绍

利用Qt设置两个界面,主界面上有一个按钮,点击主界面上这个按钮,打开一个子界面,子界面上有三个按钮,分别控制关闭主窗口,关闭本身以及两者都关闭。

二、项目基本配置

新建一个Qt案例,项目名称为“MouseEvent”,基类选择“QMainWindow”,完成项目创建。

新建完mainwindow.h,cpp,ui后,右击文件——>Add New:
Qt实战案例(11)——利用Qt实现界面跳转与关闭操作_第1张图片
选择Qt设计师界面类,选择默认的Widget,下一步
Qt实战案例(11)——利用Qt实现界面跳转与关闭操作_第2张图片
将Class name改为newwindow(这里可以随意更改名称),然后下一步,完成。
Qt实战案例(11)——利用Qt实现界面跳转与关闭操作_第3张图片
创建完成后,会出现两个.h头文件,三个.cpp源文件和两个UI界面。
Qt实战案例(11)——利用Qt实现界面跳转与关闭操作_第4张图片

三、UI界面设计

在主界面(mainwindow.ui)中创建一个按钮,设置其objectName为:open_btn,界面如下:
Qt实战案例(11)——利用Qt实现界面跳转与关闭操作_第5张图片
在子界面(newwindow.ui)中创建三个按钮,界面如下:
Qt实战案例(11)——利用Qt实现界面跳转与关闭操作_第6张图片

三个按钮的主要内容如下:

名称 类型 属性
关闭主窗口 QPushButton objectName:btn1
关闭本身 QPushButton objectName:btn2
两者都关闭 QPushButton objectName:btn3

四、emit

所有从 QObject 或其子类 ( 例如 Qwidget) 派生的类都能够包含信号和槽。当对象改变其状态时,信号就由该对象发射 (emit) 出去,这就是对象所要做的全部事情,它不知道另一端是谁在接收这个信号。这就是真正的信息封装,它确保对象被当作一个真正的软件组件来使用。槽用于接收信号,但它们是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且,对象并不了解具体的通信机制。

emit 的含义是发出,也就是发出后面承接的信号。感兴趣的接收者会关注这个信号。当接收者连接这个信号时,就可以通过槽函数获得实际值。这样就完成了数据从发出者到接收者的一个转移。

【总结】:当对象改变其状态时,信号就由该对象发射 (emit) 出去,这就是对象所要做的全部事情,它不知道另一端是谁在接收这个信号。

参考:

  1. https://blog.csdn.net/alzzw/article/details/99628409

五、主程序实现

5.1 mainwindow.h头文件

头文件中首先需要包含子界面的头文件:

#include"newwindow.h"

然后声明两个私有槽函数:

private slots:
    void on_open_btn_clicked();//按钮点击槽函数
    void getinfo();            //子界面发送过来的信号对应的槽函数

on_open_btn_clicked()表示open_btn按钮对应的点击槽函数,getinfo()表示子界面发送过来的信号对应的槽函数。

然后在private中声明新界面:

private:
	newwindow *m_second;  //声明新界面

由于新子界面class名称为newwindow,因此声明如上。

5.2 mainwindow.cpp源文件

首先在主程序中声明子界面,然后将该界面的close_main()信号与之前在头文件中定义的getinfo()槽函数连接:

    m_second=new newwindow;  //创建一个newwindow新界面
   connect(m_second,SIGNAL(close_main()),this,SLOT(getinfo()));

然后定义点击打开按钮槽函数:

//定义点击打开按钮的槽函数
void MainWindow::on_open_btn_clicked()
{
    m_second->show();//显示子界面
}

定义子界面发送过来的信号对应的槽函数(内容是关闭主界面,有三种方法):

void MainWindow::getinfo()
{
//    this->hide();   //方法一
    //QMainWindow::close();//方法二
    QWidget::close();   //方法三
}

5.3 newwindow.h头文件

newwindow.h头文件需要声明一个信号:

signals:
    void close_main();

声明三个按钮点击的私有槽函数:

private slots:
    void on_btn1_clicked();

    void on_btn2_clicked();

    void on_btn3_clicked();

5.4 newwindow.cpp源文件

newwindow.cpp源文件中定义三个按钮点击函数。

定义关闭本身按钮槽函数比较简单,利用close()函数,代码如下:

void newwindow::on_btn2_clicked()  //关闭自身窗口
{
    QWidget::close();
}

关闭主窗口按钮槽函数利用emit发射信号,信号为close_main()信号,该信号连接的槽函数在mainwindow.cpp源文件中定义过了,用于关闭主窗口:

void newwindow::on_btn1_clicked()  //关闭主窗口
{
    emit close_main();//发射信号
}

全部关闭按钮槽函数是上述两个按钮的叠加,代码如下:

void newwindow::on_btn3_clicked()  //全部关闭
{
    QWidget::close();
    emit close_main();
}

六、效果演示

如果没有看懂的话,完整代码可以参考:https://download.csdn.net/download/didi_ya/55512397


ok,以上便是文章的全部内容了,如果对你有所帮助,记得点个赞哟~

你可能感兴趣的