Qt 第二课 对话框之间的切换

原创 2017年01月02日 22:43:59

在做一些登录系统的时候,可能需要在登录界面和主界面之间进行切换,今天学习了这部分内容,顺便复习了前面学习到的信号,槽,模态对话框,非模态对话框。

登录对话框:

#ifndef LOGINDLG_H
#define LOGINDLG_H
#include<QDialog>
#include<QPushButton>
class LoginDlg : public QDialog
{
    Q_OBJECT
public:
    LoginDlg(QWidget *parent = 0);
    ~LoginDlg();
private:
    QPushButton*pOK;
    QPushButton*pExit;
private slots:
    void OnOkClicked();
    void OnExitClicked();
};

#endif // LOGINDLG_H

#include"logindlg.h"
#include<QHBoxLayout>
LoginDlg::LoginDlg(QWidget *parent):QDialog(parent)
{
    pOK=new QPushButton("OK",this);
    pExit=new QPushButton("Exit",this);

    QHBoxLayout*pMainLayout=new QHBoxLayout(this);

    pMainLayout->addWidget(pOK);
    pMainLayout->addWidget(pExit);

    this->setLayout(pMainLayout);

    connect(pOK,SIGNAL(clicked()),this,SLOT(OnOkClicked()));
    connect(pExit,SIGNAL(clicked()),this,SLOT(OnExitClicked()));
   // resize(400,200);
   /// setGeometry(800,800,400,200);
    setWindowTitle("hello world ");
}

LoginDlg::~LoginDlg()
{
    static int a=0;//为了调试析构 , 因为在书上看到当以一个窗口为父窗口,new了一个窗口或部件的时候,不需要写delete,在父窗口析构的时候,会释放所                     //有子窗口
    a++;
}


void LoginDlg:: OnOkClicked()
{
    return accept();
}

void LoginDlg::OnExitClicked()
{
    return reject();
}
主窗口:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include"logindlg.h"
class QPushButton;
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QPushButton*pNewWnd;
    LoginDlg*pNewDlg;
private slots:
    void BtnNewWndClicked();
};

#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QPushButton>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    pNewWnd=new QPushButton("重新登录",this);
    //connect(pNewWnd,SIGNAL(clicked()),this,SLOT(OnBtnNewWndClicked()));
    connect(pNewWnd,SIGNAL(clicked()),this,SLOT(BtnNewWndClicked()));
}

MainWindow::~MainWindow()
{
    delete ui;
}
//这里需要对close()函数进行说明:只有当最后一个窗口调用close时,程序才会退出,其他的情况只是将窗口隐藏起来。
void MainWindow::BtnNewWndClicked()
{
    close();
    pNewDlg=new LoginDlg(this);
    //pNewDlg->setModal(true);
    if(pNewDlg->exec()==QDialog::Accepted)
        this->show();
}

main 函数

#include "mainwindow.h"
#include <QApplication>
#include"logindlg.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    LoginDlg dlg;
    if(dlg.exec()==QDialog::Accepted)
    {
    w.show();
    return a.exec();
    }
    else
    return 0;
}




相关文章推荐

【Qt编程】Qt学习之窗口间的相互切换

在用Qt设计GUI时,经常要设计两个窗口之间的相互切换,即可以从一个窗口跳转到另一个窗口,然后又从另一个窗口跳转回原窗口。下面我们来介绍具体的实现方法: 首先,我们建立Qt  Gui应用,项目名Two...

Qt多窗口来回切换实战

学习Qt有一段时间了,今天算是空闲,总结一下之前过的多窗口切换的实现过程。因为自己在学这个的时候在网上查找过一些资料,感觉都没有完全把过程讲清楚,对于初学者来说是一种痛苦(老是缺这缺那得,估计都是大神...

QT 主窗口和非模态对话框切换 以及消息通信

项目中要用到非模态窗口,程序一开始弹出一个主窗口来,点击一个按钮的时候弹出一个非模态窗口,虽然是一个比较简单的需求,但是在实现的过程中有各种问题。列一下自己遇到的问题并且说一下自己的解决方法。 1) ...

5-QT5多窗口切换以及所有对话框的实现

这里我要实现的是一个由多个窗口组成而且各个窗口之间可以切换的程序。 实现之前必须了解一些必备知识; 模态和非模态对话框的概念: 简单来说就是模态对话框,对话框之间相互不交互,例如退出提示框,而非模态对...

Qt之各种对话框(信号和槽)

一、多窗口切换 第一步:首先创建一个项目,之后进入ui设计模式,在左侧找到Label和Push Button这两个左键拖入。 第二步:双击Label将其修改为主界面,之后在Push Button ...

QT多窗口间传值---信号槽方法

在写程序时,难免会碰到多窗体之间进行传值的问题。依照自己的理解,我把多窗体传值的可以使用的方法归纳如下:       1.使用QT中的Signal&Slot机制进行传值;       2....
  • lywzgzl
  • lywzgzl
  • 2014年11月13日 19:38
  • 5159

【Linux探索之旅】第三部分第二课:流、管道、重定向,三管齐下

这一课我们来学一些非常有用的内容,而且相当有意思,而且内容很多,而且有可能颠覆你的三《观》(毕竟三管齐下,不颠覆三观也难)。今天的标题中的三个名称,听上去就怪怪的。什么流,管道,重定向,都啥玩意啊。不...

Java第二课 Java面向对象编程,面向对象编程和面向过程编程的区别,我们如何才能掌握面向对象的编程,类和对象的关系;讲解了Java中的构造、重载、this和super变量、静态变量、Java中的常

位运算 class Test{ public static void main(String[] args){ int i=0xffffffff;//两个f表示一个字节所表示的二进...

微信jsapi开发教程之如何获取jsapi_ticket(第二课)

我们在看微信jsapi开发文档发现,想要使用微信jsapi不仅要绑定已备案的域名,而且还需要一大堆接口注入权限验证。本人感觉有点麻烦,但是也没办法,谁让微信这么火呢。 通过config接口注入权...

学习淘淘商城第二课(搭建Maven工程)

上节课我们一起学习了淘淘商城的架构,这节课我们一起学习如何搭建Maven工程,关于Maven的好处,网上有很多,这里就不啰嗦了。           Maven常见的打包方式有:jar、war、pom...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt 第二课 对话框之间的切换
举报原因:
原因补充:

(最多只允许输入30个字)