找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

第2篇 Qt5基础(二)编写Qt多窗口程序

yafeilinux 2017-2-27 00:04 480560人围观 yafeilinux原创

四、使用自定义的对话框类



1.按下Ctrl+2返回代码编辑模式,在这里打开main.cpp文件,添加代码:
  1. #include "mainwindow.h"
  2. #include
  3. #include "logindlg.h"

  4. int main(int argc, char *argv[])
  5. {
  6.     QApplication a(argc, argv);
  7.     MainWindow w;
  8.     LoginDlg dlg;                        // 建立自己新建的LoginDlg类的实例dlg
  9.     if(dlg.exec() == QDialog::Accepted) // 利用Accepted返回值判断按钮是否被按下
  10.     {
  11.         w.show();                      // 如果被按下,显示主窗口
  12.         return a.exec();              // 程序一直执行,直到主窗口关闭
  13.     }
  14.     else return 0;          //如果没有被按下,则不会进入主窗口,整个程序结束运行
  15. }
复制代码

       在这里,我们先创建了LoginDlg类的对象dlg,然后让dlg运行,即执行exec()函数,这样会显示对话框窗口,然后判断exec()的返回值,如果用户按下了登录按钮,那么返回值应该是Accepted,这时就显示主窗口,并正常执行程序;如果没有按下登录按钮,那么就结束程序。
       现在大家可以运行程序,测试一下效果。


2.上面讲述了一种显示对话框的情况,下面再来讲述一种情况。我们打开mainwindow.ui文件进入设计模式,然后在“按钮”部件上右击并选择转到槽菜单,如下图所示。


       在弹出的转到槽对话框中选择第一个clicked()信号并按下确定按钮。这时会跳转到编辑模式mainwindow.cpp文件的on_pushButton_clicked()函数处,这个就是自动生成的槽,已经自动在mainwindow.h文件中进行了声明。我们只需要更改函数体即可。这里更改为:

  1. void MainWindow::on_pushButton_clicked()
  2. {
  3.    QDialog *dlg = new QDialog(this);
  4.    dlg->show();  
  5. }
复制代码

    我们创建了一个对话框对象,然后让其显示,创建时指定的this参数表明这个对话框的父窗口是MainWindow。注意还需要在mainwindow.cpp文件的开头添加#include 头文件包含。有的童鞋可能会问,如果多次按下按钮,那么每次都会生成一个对话框,是否会造成内存泄露或者内存耗尽?这里简单说明一下,Qt的对象树机制保证了不会造成内存泄露,而且不用写delete语句,因为指明了对话框的父部件,所以当主窗口MainWindow销毁时会自动销毁创建的对话框。当然,严谨的童鞋也可以在mainwindow.h文件中先定义一个对话框对象,并在构造函数中进行创建,然后再到这里使用。最后大家可以运行一下程序,查看效果。



188人点赞鲜花

7人点赞握手

5人点赞雷人

6人点赞路过

12人点赞鸡蛋

刚表态过的朋友 (218 人)

原作者: yafeilinux

yafeilinux和他的朋友们微信公众号二维码

微信公众号

专注于Qt嵌入式Linux开发等。扫一扫立即关注。

Qt开源社区官方QQ群二维码

QQ交流群

欢迎加入QQ群大家庭,一起讨论学习!


公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了