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

来源:互联网 发布:陕西像素数据 编辑:程序博客网 时间:2024/06/07 21:06

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

登录对话框:

#ifndef LOGINDLG_H#define LOGINDLG_H#include<QDialog>#include<QPushButton>class LoginDlg : public QDialog{    Q_OBJECTpublic:    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_OBJECTpublic:    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;}




0 0