【QT】QT的消息盒子和对话框(自定义对话框)

QT的消息盒子和对话框(自定义对话框)

  • 一、消息盒子QMessageBox
    • 1、弹出警告盒子
      • 示例代码:
      • 现象:
    • 2、致命错误盒子
      • 示例代码:
      • 现象:
    • 3、帮助盒子
      • 示例代码:
      • 现象:
    • 4、示例代码:
  • 二、QT中自带的对话框
    • 1、颜色对话框 QColorDialog
      • 1)方法
        • 示例代码:
        • 现象:
    • 2、字体对话框 QFontDialog
      • 1) 方法
        • 示例代码:
        • 现象:
    • 3、文件对话框 QFileDialog
      • 1) 方法:弹出文件对话框,让用户可以选择某个具体的文件
        • 示例代码:
        • 现象:
      • 2) 方法:弹出目录对话框,只能让用户选择目录,不可以选择目录中具体文件
        • 示例代码:
  • 三、自定义对话框
    • 1.模态和非模态
      • 示例代码:
      • 现象:

一、消息盒子QMessageBox

1、弹出警告盒子

[static] StandardButton QMessageBox::warning(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)返回值:点击了盒子里面的哪个按钮,返回值就返回这个按钮参数:parent --this,父窗口title --》消息盒子的标题text --》盒子里面的文本内容 buttons --》盒子默认使用哪些按钮,默认使用ok按钮如果要添加多个按钮,多个按钮之间使用 按位或 连接起来defaultButton --》当按下回车键,默认选中的按钮

示例代码:

QMessageBox::warning(this, "警告","您输入的账号或密码错误,请重新输入", QMessageBox::Close | QMessageBox::Ok, QMessageBox::Close);

现象:

在这里插入图片描述

2、致命错误盒子

[static] StandardButton QMessageBox::critical(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
// 定义如警告盒子

示例代码:

QMessageBox::critical(this, "致命错误","您输入的账号或密码错误,请重新输入", QMessageBox::Close | QMessageBox::Ok, QMessageBox::Close);

现象:

在这里插入图片描述

3、帮助盒子

[static] StandardButton QMessageBox::question(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = StandardButtons( Yes | No ), StandardButton defaultButton = NoButton)
// 定义如警告盒子

示例代码:

QMessageBox::question(this, "帮助","您输入的账号或密码错误,请重新输入", QMessageBox::Close | QMessageBox::Ok, QMessageBox::Close);

现象:

在这里插入图片描述

  如何判断点击了哪个按钮
方法:通过warning函数的返回值判断,具体参见例子代码if(ret==QMessageBox::Ok){}else  //其他按钮{}

4、示例代码:

auto ret = QMessageBox::question(this, "帮助","您输入的账号或密码错误,请重新输入", QMessageBox::Close | QMessageBox::Ok, QMessageBox::Close);
if (ret == QMessageBox::Ok)
{// 按实际逻辑做处理qDebug()<<"点击的是ok";
}
else
{qDebug()<<"点击的是close";
}

二、QT中自带的对话框

1、颜色对话框 QColorDialog

1)方法

[static] QColor QColorDialog::getColor(const QColor &initial = Qt::white, QWidget *parent = Q_NULLPTR, const QString &title = QString())返回值:弹出的对话框所选中的颜色参数:initial --》颜色对话框默认选中的颜色//依据RGB的值新建颜色对象QColor(int r, int g, int b)   parent --》父窗口 thistitle --》颜色对话框的标题如何判断用户是否选中了某个颜色bool QColor::isValid() const返回值:如果用户点击ok  --》颜色就是合法,返回true反之,返回false
示例代码:
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_btn1_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QColorDialog>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}// 颜色对话框
void MainWindow::on_btn1_clicked()
{QColor color1(0, 0, 255);// 弹出颜色对话框QColor color_ret = QColorDialog::getColor(color1, this, "颜色对话框");// 判断用户是点击了ok还是cancelif(color_ret.isValid()){qDebug()<<"点击了ok";// 拼接得到qss语句QString set_style = QString("background-color:rgb(%1,%2,%3);").arg(color_ret.red()).arg(color_ret.green()).arg(color_ret.blue());// 把按钮的背景色设置成自己选择的颜色ui->btn1->setStyleSheet(set_style);}else{qDebug()<<"点击了cancel";}
}
现象:

在这里插入图片描述

2、字体对话框 QFontDialog

1) 方法

[static] QFont QFontDialog::getFont(bool *ok, QWidget *parent = Q_NULLPTR)返回值:所选中的字体参数:ok --》保存是否选中了某个字体,选中了 --true  没有选中 --falseparent --》父窗口 this
如何判断用户是否选中了某个字体方法:判断getFont的第一个参数是否为真
QString QFont::family() const返回值:返回选中的字体名字
int QFont::pointSize() const 返回值:返回选中的字体大小
示例代码:
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFontDialog>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{bool is_ok;QFont myFont = QFontDialog::getFont(&is_ok, this);if (is_ok){qDebug()<<"选择了ok";ui->label->setFont(myFont);}else{qDebug()<<"选择了concel";}
}
现象:

在这里插入图片描述

3、文件对话框 QFileDialog

1) 方法:弹出文件对话框,让用户可以选择某个具体的文件

[static] QString QFileDialog::getOpenFileName(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString())返回值:选中的某个文件的绝对路径名参数:parent --》父窗口 thiscaption --》文件对话框的标题dir --》指定要打开的目录路径filter --》文件过滤器,过滤掉不需要的文件比如: "*.txt"        表示只想查看文件夹中的记事本"*.txt *.bmp"  表示想查看文件夹中的记事本和bmp图片
示例代码:
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H// mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{QString pathName = QFileDialog::getOpenFileName(this, "打开的文件对话框", "C:/Users/xxx/Desktop/vm_shared/code/QT_proj/250406_test", "*txt *xls");qDebug()<< "选择的文件是"<< pathName;
}
现象:

在这里插入图片描述

2) 方法:弹出目录对话框,只能让用户选择目录,不可以选择目录中具体文件

[static] QString QFileDialog::getExistingDirectory(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString())返回值:选中的某个目录的绝对路径名参数:parent --》父窗口 thiscaption --》目录对话框的标题dir --》指定要打开的目录路径
示例代码:
 // 打开目录对话框
QString dirPath = QFileDialog::getExistingDirectory(this, "目录");

三、自定义对话框

QT添加新的ui界面总共提供三种模板,三者区别
dialog --》作为独立的弹窗来使用
mainwindow --》多界面跳转,界面直接切换
widget --》作为子窗口来使用,嵌套到mainwindow

如何新建Qdialog:
右键点击工程名–》QT设计师界面类,选择QDialog模板

1.模态和非模态

          模态对话框 --》exec(),对话框如果不关闭,无法操作其他界面非模态对话框 --》show(),对话框如果不关闭,不影响操作其他界面

示例代码:

firstwin.h firstwin.cpp

// firstwin.h
#ifndef FIRSTWIN_H
#define FIRSTWIN_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class firstwin; }
QT_END_NAMESPACEclass firstwin : public QMainWindow
{Q_OBJECTpublic:firstwin(QWidget *parent = nullptr);~firstwin();private slots:void on_pushButton_clicked();void on_pushButton_2_clicked();private:Ui::firstwin *ui;
};
#endif // FIRSTWIN_H// firstwin.cpp
#include "firstwin.h"
#include "ui_firstwin.h"
#include <QDebug>
#include "secondwin.h"
#include "regdialog.h"
firstwin::firstwin(QWidget *parent): QMainWindow(parent), ui(new Ui::firstwin)
{ui->setupUi(this);
}firstwin::~firstwin()
{delete ui;
}//登录按钮的槽函数
void firstwin::on_pushButton_clicked()
{//获取输入的用户名和密码QString name=ui->lineEdit->text();QString passwd=ui->lineEdit_2->text();if(name=="hello" && passwd=="123456"){//跳到主界面--》第二个界面//创建第二个界面对象secondwin *win=new secondwin();//显示第二个界面win->show();//关闭第一个界面this->close();}elseqDebug()<<"登录失败";
}
//注册按钮对应的槽函数
void firstwin::on_pushButton_2_clicked()
{//弹出注册对话框regdialog *dialog=new regdialog(this);//显示对话框//dialog->show();  //非模态对话框dialog->exec();    //模态对话框
}

secondwin.cpp secondwin.h

// secondwin.h
#ifndef SECONDWIN_H
#define SECONDWIN_H#include <QMainWindow>namespace Ui {
class secondwin;
}class secondwin : public QMainWindow
{Q_OBJECTpublic:explicit secondwin(QWidget *parent = nullptr);~secondwin();private slots:void on_pushButton_clicked();void on_pushButton_2_clicked();private:Ui::secondwin *ui;
};#endif // SECONDWIN_H// secondwin.cpp
#include "secondwin.h"
#include "ui_secondwin.h"secondwin::secondwin(QWidget *parent) :QMainWindow(parent),ui(new Ui::secondwin)
{ui->setupUi(this);
}secondwin::~secondwin()
{delete ui;
}void secondwin::on_pushButton_clicked()
{//证明QWidget一般作为子窗口嵌套到QMainWindow里面ui->widget->hide();
}void secondwin::on_pushButton_2_clicked()
{//证明QWidget一般作为子窗口嵌套到QMainWindow里面ui->widget->show();
}

regdialog.h regdialog.cpp

// regdialog.h
#ifndef REGDIALOG_H
#define REGDIALOG_H#include <QDialog>namespace Ui {
class regdialog;
}class regdialog : public QDialog
{Q_OBJECTpublic:explicit regdialog(QWidget *parent = nullptr);~regdialog();private:Ui::regdialog *ui;
};#endif // REGDIALOG_H// regdialog.cpp
#include "regdialog.h"
#include "ui_regdialog.h"regdialog::regdialog(QWidget *parent) :QDialog(parent),ui(new Ui::regdialog)
{ui->setupUi(this);
}regdialog::~regdialog()
{delete ui;
}

现象:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/75355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

依靠视频设备轨迹回放平台EasyCVR构建视频监控,为幼教连锁园区安全护航

一、项目背景 幼教行业连锁化发展态势越发明显。在此趋势下&#xff0c;幼儿园管理者对于深入了解园内日常教学与生活情况的需求愈发紧迫&#xff0c;将这些数据作为提升管理水平、优化教育服务的重要依据。同时&#xff0c;安装监控系统不仅有效缓解家长对孩子在校安全与生活…

Stable Diffusion+Pyqt5: 实现图像生成与管理界面(带保存 + 历史记录 + 删除功能)——我的实验记录(结尾附系统效果图)

目录 &#x1f9e0; 前言 &#x1f9fe; 我的需求 &#x1f527; 实现过程&#xff08;按功能一步步来&#xff09; &#x1f6b6;‍♂️ Step 1&#xff1a;基本图像生成界面 &#x1f5c3;️ Step 2&#xff1a;保存图片并显示历史记录 &#x1f4cf; Step 3&#xff1a…

量子计算未来的潜力和挑战

据麦肯锡预测&#xff0c;到 2035 年或 2040 年&#xff0c;量子计算市场规模可能增长至约 800 亿美元。目前&#xff0c;许多量子比特技术正竞相成为首台通用、无差错量子计算机的基础&#xff0c;但仍面临诸多挑战。 我们将探讨量子计算的未来前景、潜力&#xff0c;以及它对…

ArcGIS 给大面内小面字段赋值

文章目录 引言:地理数据处理中的自动化赋值为何重要?实现思路模型实现关键点效果实现步骤1、准备数据2、执行3、完成4、效果引言:地理数据处理中的自动化赋值为何重要? 在地理信息系统(GIS)的日常工作中,空间数据的属性字段赋值是高频且关键的操作,例如在土地利用规划…

如何打通虚拟化-容器环境并保障流量安全?SmartX VCCI 方案升级!

为了提升资源利用率、交付效率和业务灵活性&#xff0c;不少企业用户都在推进从传统架构向云原生架构的演进&#xff0c;并采用虚拟机与容器共存的混合模式支持多种业务系统。由于两个环境在业务交互层面形成高度耦合&#xff0c;企业需要具备简单、高效方案&#xff0c;实现虚…

stable diffusion 量化加速点

文章目录 一、导出为dynamic shape1)函数讲解(函数导出、输出检查)2)代码展示二、导出为static shape1)函数讲解(略)2)代码展示三、序列化为FP32测速1)测速2)代码四、序列化为FP16测速1)测速2)代码同上五、发现并解决解决CLIP FP16溢出,并测速1)如何找到溢出的算子…

7-openwrt-one通过web页面配置访客网络、无线中继等功能

前几个章节一直在介绍编译、分区之类的,都还没正常开始使用这个路由器的wifi。默认wifi是没有启动的,前面还是通过手动修改uci配置启动的,这个章节介绍下官方web页面的使用。特别是访客网络、无线中继 1、开启wifi,配置wifi基本信息 我们使用有线连接路由器,通过192.168.…

AcWing 6099. 座位

原题目链接 问题描述 有 n 头奶牛&#xff08;n ≥ 5&#xff09;&#xff0c;编号为 1 ∼ n&#xff0c;按照某种顺序围着一张圆桌坐成一圈。 奶牛之间存在如下的朋友关系&#xff1a; 如果两头奶牛相邻&#xff0c;则它们是朋友&#xff1b;如果两头奶牛之间只隔着一头奶…

44、Spring Boot 详细讲义(一)

Spring Boot 详细讲义 目录 Spring Boot 简介Spring Boot 快速入门Spring Boot 核心功能Spring Boot 技术栈与集成Spring Boot 高级主题Spring Boot 项目实战Spring Boot 最佳实践总结 一、Spring Boot 简介 1. Spring Boot 概念和核心特点 1.1、什么是 Spring Boot&#…

配置mac mini M4 的一些软件

最近更换了 mac mini M4 &#xff0c;想要重新下载配置软件 &#xff0c;记录一下。 Homebrew是什么&#xff1f; homebrew是一款Mac OS平台下的软件包管理工具&#xff0c;拥有安装、卸载、更新、查看、搜索等功能。通过简单的指令可以实现包管理&#xff0c;而不用关心各种…

网络空间安全(54)CSRF

一、定义与原理 CSRF&#xff08;Cross-Site Request Forgery&#xff09;&#xff0c;全称为跨站请求伪造&#xff0c;也被称为One Click Attack或Session Riding&#xff0c;缩写为CSRF或XSRF。它是一种网络安全漏洞&#xff0c;攻击者通过伪造用户的请求&#xff0c;利用用户…

分布式文件存储系统FastDFS

文章目录 1 分布式文件存储1_分布式文件存储的由来2_常见的分布式存储框架 2 FastDFS介绍3 FastDFS安装1_拉取镜像文件2_构建Tracker服务3_构建Storage服务4_测试图片上传 4 客户端操作1_Fastdfs-java-client2_文件上传3_文件下载4_获取文件信息5_问题 5 SpringBoot整合 1 分布…

安装了VM Tools,仍无法复制拖动-解决方案

今天在安装ubuntu时遇到了困扰许久的问题&#xff0c;安装了VM Tools&#xff0c;仍无法拖动主机文件到虚拟机&#xff0c;主要有两种原因并对应解决办法。 1.相关虚拟机设置选项卡中-客户机隔离-两个功能没有勾选 解决方案&#xff1a;勾选重启虚拟机即可 2.&#xff08;这个…

Jmeter分布式测试启动

代理客户端配置 打开jmeter.properties文件&#xff0c;取消注释并设置端口&#xff08;如server_port1099&#xff09;&#xff0c; 并添加server.rmi.ssl.disabletrue禁用SSL加密。 &#xff08;Linux系统&#xff09;修改jmeter-server文件中的RMI_HOST_DEF为代理机实际IP。…

火语言RPA--Oracle-导入数据表格

【组件功能】&#xff1a;导入特定的表格数据到包含同样字段的数据表 将表格对象数据通过数据库操作对象导入到指定数据库。 配置预览 配置说明 源表格 表格来源有“来自表格对象”和“来自表达式”2种&#xff0c;表达式支持DataTable类型变量。 对象 对应来自表格对象&…

Java的Selenium的特殊元素操作与定位之验证码

1.使用OCR技术识别验证 步骤&#xff1a; 截取整个网页的截图。 定位验证码图片元素。 根据验证码图片的位置和大小&#xff0c;从截图中裁剪出验证码图片。 使用OCR工具&#xff08;如Tesseract&#xff09;识别验证码图片中的文本。 2.手动处理验证码 步骤&#xff1a;…

OpenStack Yoga版安装笔记(十七)安全组笔记

一、安全组与iptables的关系 OpenStack的安全组&#xff08;Security Group&#xff09;默认是通过Linux的iptables实现的。以下是其主要实现原理和机制&#xff1a; 安全组与iptables的关系 OpenStack的安全组规则通过iptables的规则链实现。每条安全组规则会被转换为相应的i…

starrocks split函数和trino split函数差异性

在trino419和starrocks3.2.8中分别执行下面这两条sql,出来的结果是不一样的 select split(,,,)[1] as t1 select coalesce(split(,,&#

Spring Data JPA中的List底层:深入解析ArrayList的奥秘!!!

&#x1f31f; Spring Data JPA中的List底层&#xff1a;深入解析ArrayList的奥秘 &#x1f4a1; 你是否好奇过&#xff0c;为什么Spring Data JPA的查询方法返回的List<T>总是默认为ArrayList&#xff1f;本文将通过技术原理解析、验证实验和性能优化指南&#xff0c;为…

腾讯云智测试开发面经

1、投递时间线 2.20投递简历,3.11第一轮面试,3.30第二轮面试,4.4第三轮面试,4.10第四轮面试,4.11offer意向书 2、第一轮面试 第一轮面试技术面,面试官是导师,面试时长40多分钟 1)自我介绍 2)数组和列表的区别 3)了解哪些数据库 4)进程和线程的区别 5)了解哪…