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

2023-11-12

以下内容均是个人理解,不保证都是正确的,如有错欢迎指正
欢迎学习交流: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)自定义对话框

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT学习三之多界面跳转与对话框 的相关文章

随机推荐

  • 我要自学网视频教程ajax,这么逆天的自学网站,还是第一次见,难怪考不上清华北大...

    原标题 这么逆天的自学网站 还是第一次见 难怪考不上清华北大 有很多朋友 工作了N年之后 工资一直不涨 其实就是没有找到正确的方法 这个时候呢 我们就需要用到一些非常好用的自学网站 去帮助自己在所在的领域进行充电啦 首选的当然就是下面几个啦
  • Servlet 的应用程序设计

    目录 1 基于 Servlet Controller 的应用程序设计 2 基于 Filter Dispatcher 的应用程序设计 3 使用表单验证器 4 添加数据库访问 5 依赖注入 在该模型中 用一个 Servlet 或者过滤器充当控制
  • Flex中字符串String按照格式转化为日期Date的方法

    在Flex中 要通过传入时间的字符串和格式字符串的方式来转换出Date Flex本身没有完善的方法 不知道Adobe在想什么 这么简单实用的功能都没有 回想起来 还是java神马的好 在网上找了好久都没有完善的解决方案 最后偶然发现Date
  • cout << 输出格式突然变成了16进制

    1 背景 在工程中 我通过cout打印一个被频繁调用的函数里面某个参数的值 在前面若干次调用中 cout lt lt 工作正常 是打印的10进制 突然 不清楚什么原因 就开始打印16进制的值 而且是不加0x的16进制 导致我一直以为是10进
  • 力扣:338. 比特位计数

    给你一个整数 n 对于 0 lt i lt n 中的每个 i 计算其二进制表示中 1 的个数 返回一个长度为 n 1 的数组 ans 作为答案 示例 1 输入 n 2 输出 0 1 1 解释 0 gt 0 1 gt 1 2 gt 10 示例
  • 枪神纪紫霄系列服务器,枪神纪紫霄左轮枪简测评

    枪神纪最新的新年红包武器紫霄左轮枪上线 小编这就给各位玩家带来 枪神纪紫霄左轮枪武器测评 枪神纪紫霄左轮枪怎么样 红包武器 紫霄左轮枪 面板 面板伤害比重击左轮高出10点伤害 穿甲多出65 稳定高出20 便携高6 外观 简直和这皮肤是一套的
  • Mac M1 安装配置TensorFlow-GPU

    在Mac上安装了TensorFlow 但是import Tensorflow时却一直显示TensorFlow不存在 看了各种安装方法 最后终于成功了 进入正题 直接进官网 根据苹果官方给的安装方法进行安装 https developer a
  • Windows下安装 Redis

    目录 1 下载 1 1 Redis官网 1 2 github下载地址 2 安装步骤 2 1 解压Redis压缩包 2 2 创建临时服务 2 3 启动客户端 2 4 注册Redis服务 3 总结 4 致谢 1 下载 1 1 Redis官网 D
  • python linux系统巡检脚本

    使用python 实现linux 系统巡检远程获取系统资源情况 导出为excel表格 背景 因为服务器很多 刚开始一台一台手动巡检 效率很低 于是我想能不能写个工具实现一劳永逸 于是我想到了python python 具有丰富的类库 且语言
  • Arduino安装ESP32下载失败的解决方法

    Arduino安装ESP32时 经常下载失败 解决办法 1 复制命令行中的提示信息到记事本 找到下载地址 2 打开浏览器 在地址栏中贴粘下载地址 回车开始下载 3 将下载的包复制到C Users Administrator AppData
  • 《Cesium 基础知识点》- 申请 Cesium Ion 密钥

    一 为什么要申请 学习 链接 Cesium ion是一个提供瓦片图和3D地理空间数据的平台 Cesium ion支持把数据添加到用户自己的应用程序中 Cesium ion的使用需要申请access token 申请成功后 就能畅快的访问Ce
  • Pandas 中DataFrame的groupby()计数、groupby()取样及reset_index()的使用

    什么是groupby 以下为对DataFrame对象按A进行分组操作 图片来源 内容 目的 DataFrame对象按照指定列 LNG LAT 分组计数 并将分组计数结果 包括指定列及计数值 写入csv文件中 过程 代码一 import pa
  • python中line的意思_关于python代码,line[:-1]的意思

    line 1 其实就是去除了这行文本的最后一个字符 换行符 后剩下的部分 line abcde line 1 结果为 abcd line abcde line 1 结果为 edcba 扩展资料 1 先定义一个array数据 1 import
  • Http 状态码

    常见HTTP状态码大全1xx 临时响应 表示临时响应并需要请求者继续执行操作的状态代码 代码 说明http状态码 100 继续 请求者应当继续提出请求 服务器返回此代码表示已收到请求的第一部分 正在等待其余部分 http状态码 101 切换
  • org.springframework.beans.factory.BeanCreationException的问题所在!!

    今天一不小心弄出的小问题 严重 Exception sending context initialized event to listener instance of class org springframework web contex
  • 记录一次iPhone5s的iCloud bypass经历

    之前成功过一次 使用的是checkra1n v0 9 5 越狱成功后 使用ssh连接手机 执行以下几个命令 正在挂载根目录文件系统为读写 bash 3 2 mount o rw union update bash 3 2 echo gt g
  • C语言:选择+编程(每日一练Day3)

    目录 选择题 题一 题二 题三 题四 题五 编程题 题一 记负均正 思路一 题二 旋转数组的最小数字 思路一 选择题 题一 1 已知函数的原型是 int fun char b 10 int a 设定义 char c 10 int d 正确的
  • Centos7部署MySQL主从复制

    一 准备 1 准备两台服务器 如果本地测试 准备两台虚拟机 2 两台服务器上安装相同的mysql数据库 3 我这里准备两台虚拟机演示 192 168 21 102 主机 192 168 21 105 从机 4 在两台mysql数据库分别创建
  • 计算机视觉理论笔记 (5) - 边缘检测 (Edge Detection)

    边缘检测 Edge Detection 总览 边缘 edges 基于梯度 gradient 的边缘检测 检测不连续性 detection of discontinuities 1D 2D 梯度强度阈值 threshold 噪声影响 其他算子
  • QT学习三之多界面跳转与对话框

    以下内容均是个人理解 不保证都是正确的 如有错欢迎指正 欢迎学习交流 815030927 qq com 一 多界面跳转 1 介绍 MVC框架 MVC是模型 model 视图 view controller 控制器 的缩写 模型视图控制器是一