QT学习三之多界面跳转与对话框

以下内容均是个人理解,不保证都是正确的,如有错欢迎指正
欢迎学习交流:815030927@qq.com

一、多界面跳转

1、介绍

MVC框架:MVC是模型(model)-视图(view)-controller(控制器)的缩写。模型视图控制器是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
QT便是按照MVC框架设计的,在QT中:
.ui——视图
.cpp 和 .h——数据逻辑控制

2、例程

主要功能: 点击第一个界面的next按钮跳转到第二个界面,点击第二个界面的next按钮跳转到第三个界面,点击第三个界面的prev按钮返回第二个界面。点击界面的close按钮则本界面关闭。
1、创建一个空的qt项目MulWin,在.pro中添加以下代码

QT += core gui widgets
TARGET = MulWin
TEMPLATE = app

2、添加main.cpp并添加以下代码

#include <QApplication>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    app.exec();
}

3、在创建的qt项目中添加三个qt设计师界面类,分别命名为firstWin,secondWin,ThirdWin
在这里插入图片描述在这里插入图片描述4、编辑三个界面视图,第一个窗口如下,第二个第三个是类似的操作
在这里插入图片描述最终三个界面效果
5、需要添加的代码(为了方便给出文件的所有代码)
main.cpp

#include <QApplication>
#include <firstwin.h>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    FirstWin fwin;
    fwin.show();
    app.exec();
}

first.cpp

#include "firstwin.h"
#include "ui_firstwin.h"
#include <secondwin.h>

FirstWin::FirstWin(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::FirstWin)
{
    ui->setupUi(this);
}
FirstWin::~FirstWin()
{
    delete ui;
}
void FirstWin::on_nextBt_clicked()
{
    //new一个SecondWin的类
    SecondWin *swin = new SecondWin;
    //把第二个窗口显示出来
    swin->show();
    //关闭第一个窗口
    this->close();
}
void FirstWin::on_closeBt_clicked()
{
    //关闭本窗口
    this->close();
}

secondwin.cpp

#include "secondwin.h"
#include "ui_secondwin.h"
#include <thirdwin.h>

SecondWin::SecondWin(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::SecondWin)
{
    ui->setupUi(this);
}

SecondWin::~SecondWin()
{
    delete ui;
}

void SecondWin::on_pushButton_clicked()
{
    //关闭本窗口
    this->close();
}

void SecondWin::on_pushButton_2_clicked()
{
    //new一个ThirdWin类,并指定父窗口
    ThirdWin *twin = new ThirdWin(this);
    //显示第三个窗口
    twin->show();
    //将第二个界面隐藏
    this->hide();
}

thirdwin.cpp

#include "thirdwin.h"
#include "ui_thirdwin.h"

ThirdWin::ThirdWin(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::ThirdWin)
{
    ui->setupUi(this);
}
ThirdWin::~ThirdWin()
{
    delete ui;
}
void ThirdWin::on_prevBt_clicked()
{
    //显示父窗体
    this->parentWidget()->show();
    //delete掉本窗体
    delete this;
}
void ThirdWin::on_closeBt_clicked()
{
    //关闭本窗体
    this->close();
}

注: 在此例程中,.h文件中的代码都是自动生成的,所以就不写出来了

6、notice
①第二和第三个界面必须new出来,若使用局部变量槽函数返回后局部变量也没了。
②由于第二和第三个界面是new出来的,所以必须根据需要把前一个界面关闭或隐藏,避免重复点击出现过多窗口
③创建QT设计师界面类的时候需要继承MainWindow,若继承Widget,则实现第三个界面转跳会第二个界面时会比较困难。

二、对话框

以下将介绍输入对话框、颜色对话框、字体对话框、文件对话框、信息提示对话框、自定义对话框功能和基本应用(所有对话框的应用会在一个例程中展示)

1、输入对话框QInputDialog

作用:
QInputDialog类提供可以一个简单便捷的对话框,该对话框可以用于从用户获得单一值。这个单一值可以是QString、数字或列表中的一项。输入对话框中必须要有一个标签告诉用户应该输入什么。QInputDialog中的静态函数:getText(), getMultiLineText(), getInt(), getDouble(), and getItem().

2、字体对话框QFontDialog

作用:
QFontDialog提供一个对话框来选择一种字体,可以通过其静态成员函数getFont()来创建一个字体对话框

3、颜色对话框QColorDialog

作用:
QColorDialog类提供一个用于指定颜色的对话框,使用其静态成员函数getColor()可以显示出一个颜色对话框

4、文件对话框QFileDialog

作用:
QFileDialog提供一个对话框使得用户可以选择一个或多个文件或路径。使用其静态成员函数getOpenFileName可以创建一个文件对话框。

5、信息提示对话框QMessageBox

作用:
QMessageBox类提供一个模态对话框,用于通知用户或询问用户问题并接收答案。

6、自定义文件对话框

当QT中提供的对话框无法满足我们的需要的时候,我们可以自己定义一个对话框

三、对话框例程

1、实现的功能:

点击输入对话框按钮——可以将标签中文字设置为用户输入的文字
点击字体对话框按钮——设置标签中的文字字体
点击颜色对话框按钮——设置标签中文字的颜色
点击文件对话框按钮——弹出文件对话框,将标签中文字改为选择的文件路径
点击信息提示对话框按钮——弹出消息提示对话框
点击自定义对话框——弹出自定义的对话框

在这里插入图片描述

2、步骤

1)创建带界面的QT项目DialogTest

在这里插入图片描述

2)设计界面如下,并使用布局管理器布局

在这里插入图片描述

3)将所有按钮转到槽
4)代码

dialogtest.h中的代码都是自动生成的,所以不展示出来。
dialogtest.cpp:

#include "dialogtest.h"
#include "ui_dialogtest.h"
#include <QInputDialog>
#include <QFontDialog>
#include <QColorDialog>
#include <QMessageBox>
#include <QFileDialog>
#include <QDebug>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <mydialog.h>

DialogTest::DialogTest(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::DialogTest)
{
    ui->setupUi(this);
}

DialogTest::~DialogTest()
{
    delete ui;
}
//输入对话框
void DialogTest::on_InputBt_clicked()
{
    //定义布尔变量,判断用户点击了ok还是cancel
    bool ok;
    QString str = QInputDialog::getText(this, "信息输入"/*对话框标签*/, "请输入一串文字"/*对话框提示语句*/, QLineEdit::Normal/*设置编辑框回显模式*/, QString(), &ok);
    //用户点击确定,则将标签中的文字设置为用户输入的内容
    if(ok==true)
        ui->label->setText(str);
}
//字体对话框
void DialogTest::on_FontBt_clicked()
{
    //定义布尔变量,判断用户是否点击了ok
    bool ok = false;
    QFont font = QFontDialog::getFont(&ok, this);
    if(ok==true)
        ui->label->setFont(font);
}
//颜色对话框
void DialogTest::on_ColorFt_clicked()
{
    //从颜色对话框中获取一种颜色
    QColor color = QColorDialog::getColor(Qt::white, this);
    //获取标签的颜色表
    QString str = ui->label->styleSheet();
    //在样式表后追加,设置标签中字体颜色
    str.append(QString("color: %1;").arg(color.name()));
    qDebug()<<str;
    ui->label->setStyleSheet(str);
}
//文件对话框
void DialogTest::on_FileBt_clicked()
{
    QString file = QFileDialog::getOpenFileName(this);
    ui->label->setText(file);
}
//消息提示对话框
void DialogTest::on_BoxBt_clicked()
{
    QMessageBox::warning(this, "提示", "内容缺失", QMessageBox::Ok/*显示ok按钮*/, QMessageBox::No/*显示no*/);
}
//自定义对话框
void DialogTest::on_selfBt_clicked()
{
    /*通过代码实现自定义对话框*/
    //创建一个对话框
    QDialog myDialog;
    myDialog.resize(250,200);
    //添加一个标签
    QLabel label(&myDialog);
    label.setText("密码错误");
    label.setAlignment(Qt::AlignHCenter);
    //添加两个按钮
    QPushButton Bt1(&myDialog), Bt2(&myDialog);
    Bt1.setText("重新输入");
    Bt2.setText("找回密码");
    //水平布局管理器
    QHBoxLayout hbox;
    hbox.addWidget(&Bt1);
    hbox.addWidget(&Bt2);
    QVBoxLayout vbox(&myDialog);
    vbox.addWidget(&label);
    vbox.addLayout(&hbox);
    //显示对话框
    myDialog.show();
    //轮询
    myDialog.exec();
    
    /*通过添加QT设计师界面类实现自定义对话框*/
//    myDialog dialog;
//    dialog.show();
//    dialog.exec();
}

注: 在使用QT设计师界面类实现自定义对话框时,需要在项目中添加一个QT设计师界面类,设计好自定义对话框的界面后将其显示出来即可。

3、效果

1)输入对话框

在这里插入图片描述

2)字体对话框

在这里插入图片描述

3)颜色对话框

在这里插入图片描述

4)文件对话框

在这里插入图片描述

5)消息提示对话框

在这里插入图片描述

6)自定义对话框

在这里插入图片描述

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值