Qt实战案例(11)——利用Qt实现界面跳转与关闭操作
利用Qt设置两个界面,主界面上有一个按钮,点击主界面上这个按钮,打开一个子界面,子界面上有三个按钮,分别控制关闭主窗口,关闭本身以及两者都关闭。
目录
一、项目介绍
利用Qt设置两个界面,主界面上有一个按钮,点击主界面上这个按钮,打开一个子界面,子界面上有三个按钮,分别控制关闭主窗口,关闭本身以及两者都关闭。
二、项目基本配置
新建一个Qt案例,项目名称为“MouseEvent”,基类选择“QMainWindow”,完成项目创建。
新建完mainwindow.h,cpp,ui后,右击文件——>Add New:
选择Qt设计师界面类,选择默认的Widget,下一步
将Class name改为newwindow(这里可以随意更改名称),然后下一步,完成。
创建完成后,会出现两个.h头文件,三个.cpp源文件和两个UI界面。
三、UI界面设计
在主界面(mainwindow.ui)中创建一个按钮,设置其objectName为:open_btn,界面如下:
在子界面(newwindow.ui)中创建三个按钮,界面如下:
三个按钮的主要内容如下:
名称 | 类型 | 属性 |
---|---|---|
关闭主窗口 | QPushButton | objectName:btn1 |
关闭本身 | QPushButton | objectName:btn2 |
两者都关闭 | QPushButton | objectName:btn3 |
四、emit
所有从 QObject 或其子类 ( 例如 Qwidget) 派生的类都能够包含信号和槽。当对象改变其状态时,信号就由该对象发射 (emit) 出去,这就是对象所要做的全部事情,它不知道另一端是谁在接收这个信号。这就是真正的信息封装,它确保对象被当作一个真正的软件组件来使用。槽用于接收信号,但它们是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且,对象并不了解具体的通信机制。
emit 的含义是发出,也就是发出后面承接的信号。感兴趣的接收者会关注这个信号。当接收者连接这个信号时,就可以通过槽函数获得实际值。这样就完成了数据从发出者到接收者的一个转移。
【总结】:当对象改变其状态时,信号就由该对象发射 (emit) 出去,这就是对象所要做的全部事情,它不知道另一端是谁在接收这个信号。
参考:
五、主程序实现
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,以上便是文章的全部内容了,如果对你有所帮助,记得点个赞哟~
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)