模态对话框和非模态对话框

在一个页面进行交互时弹出的一个新页面,新页面不堵塞旧页面的交互,这就是非模态对话框。

模态对话框

模态对话框就是当该对话框弹出后会阻塞其他窗口的响应事件,必须先关闭该对话框,其他窗口才会继续响应事件。

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);auto w = new QDialog(this);w->setModal(true);w->show();
}

点击运行,弹出一个对话框和主窗口,点击主窗口没有任何反应,点击对话框关闭后才能点击主窗口,所以w就是一个模态对话框。注意不用手动delete掉w,运行结束后会自动释放。
另外一个创建模态对话框的方式是这样的(先弹出dialog窗口,关闭之后弹出mainwindow窗口)

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);QDialog w(this);w.exec();
}

窗口置顶

需要将对话框置顶,不论其是不是模态对话框我们都可以这么做

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);auto s = new QDialog(this);s->setWindowFlag(Qt::WindowStaysOnTopHint);s->show();
}

信号和槽

当我们需要一个界面通知另一个界面时,可以采用信号和槽机制。通过链接信号和槽,当一个界面发送信号时,链接该信号的槽会被响应,从而达到消息传递的目的。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDialog>
#include<QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);connect(ui->showChildBotton,SIGNAL(clicked(bool)),this,SLOT(showChildBotton()));//到mainWindow.h写槽函数
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::showChildBotton()
{auto *childDialog=new QDialog(this);childDialog->show();
}

上面介绍的是Qt4风格的,但是推荐使用Qt5风格:

//Qt5方式信号与槽connect(ui->showChildBotton,&QPushButton::clicked,this,&MainWindow::showChildBotton);

子界面向主界面发showMainSig信号,主界面收到信号后子界面做隐藏,主界面做显示

转变模态框

创建对话框后,调用exec()函数返回只有两种,QDialog::Accepted和QDialog::Rejected

再ui界面退出程序:点击Edit Signal/Slots 信号槽的按钮,鼠标按住退出程序按钮不松开拖动,将另一端连接到MyDialog对话框,QPushbutton这边信号选择clicked(), MyDialog信号选择reject,这样就将两个信号连接起来了,我们点击退出程序按钮,会触发MyDialog发送reject信号。
进入主界面:点击Edit Widget 按钮, 然后右键点击键入主界面按钮,点击进入槽,在Qt 为我们生成的槽函数里添加accetp()信号发送逻辑,在childDialog.cpp生成的方法里写accept();

主界面返回子界面:
退出程序方法如上;返回子界面需要根据上面方法转到槽函数之后先关闭主界面,再实例化子界面,判断子界面的exec()函数是否为Accepted,是的话显示子界面,不是直接return;

常用对话框

颜色对话框

void MainWindow::on_pushButton_clicked()
{
//    QColorDialog colorDlg(Qt::blue, this);
//    colorDlg.setOption(QColorDialog::ShowAlphaChannel);
//    colorDlg.exec();
//    QColor color = colorDlg.currentColor();
//    qDebug() << "color is " << color;QColor color = QColorDialog::getColor(Qt::blue, this,tr("选择颜色"), QColorDialog::ShowAlphaChannel );qDebug() << "color is " << color;
}

文本对话框

void MainWindow::on_textBtn_clicked()
{//先设置打开目录QString path=QDir::currentPath();//返回当前路径QString title=tr("文件对话框");QString filter=tr("文本文件(*.txt);;图片文件(*.jpg *.jpge *.png *.gif);;所有文件(*.*)");QString aFileName=QFileDialog::getOpenFileName(this,title,path,filter);qDebug()<<"当前文件"<<aFileName<<Qt::endl;
}

整型输入对话框

//整型输入对话框
void MainWindow::on_pushButton_clicked()
{bool ok =false;auto intdata=QInputDialog::getInt(this,tr("整型输入对话框"),tr("请输入"),200,-1000,1000,10,&ok);if(ok){qDebug()<<intdata<<Qt::endl;}
}

条目对话框

//条目对话框
void MainWindow::on_pushButton_3_clicked()
{QStringList items;//类似线性访问,C++里的vectoritems<<tr("条目一")<<("条目二");bool ok=false;auto itemData=QInputDialog::getItem(this,tr("条目对话框"),tr("请选择条目"),items,0,true,&ok);if(ok){qDebug()<<"item is"<<itemData<<Qt::endl;}
}

提问对话框

//提问对话框
void MainWindow::on_pushButton_4_clicked()
{auto ret=QMessageBox::question(this,tr("提问对话框"),tr("你是人?"));if(ret==QMessageBox::Yes){qDebug()<<"ret is"<<ret<<Qt::endl;}else{return;}auto ret2=QMessageBox::information(this,tr("通知对话框"),tr("你是个人"),QMessageBox::Yes);if(ret2==QMessageBox::Yes){qDebug()<<"ret2 is"<<ret2<<Qt::endl;}auto ret3=QMessageBox::warning(this,tr("警告对话框"),tr("你确定你是人?"),QMessageBox::Yes);if(ret3==QMessageBox::Yes){qDebug()<<"ret3 is"<<ret3<<Qt::endl;}else{return;}auto ret4=QMessageBox::critical(this,tr("关键提示对话框"),tr("你不是人"),QMessageBox::Ok);if(ret4==QMessageBox::Ok){qDebug()<<"ret4 is"<<ret4<<Qt::endl;return;}
}

进度对话框

void MainWindow::on_pushButton_5_clicked()
{// QProgressDialog progressDialog(tr("正在复制"),tr("取消"),0,50000,this);// progressDialog.setWindowTitle(tr("文件复制进度"));// progressDialog.setWindowModality(Qt::ApplicationModal);//设置对话框为应用程序模态,无法交互直到结束// progressDialog.show();// for(int i=0;i<50000;i++){//     progressDialog.setValue(i);//     QApplication::processEvents();//     if(progressDialog.wasCanceled()){//         break;//     }// }// progressDialog.setValue(50000);//循环结束,当到达5w时任务完成//定时器_progressDialog=new QProgressDialog(tr("正在复制"),tr("取消"),0,5000,this);_progressDialog->setWindowTitle(tr("复制进度条"));_progressDialog->setWindowModality(Qt::ApplicationModal);_timer=new QTimer(this);connect(_timer,&QTimer::timeout,this,&MainWindow::on_updateProgressDialog);//计时器每次即使都会触发on_updateProgressDialog槽函数,以刷新进度connect(_progressDialog,&QProgressDialog::canceled,this,&MainWindow::on_cancelProgressDialog);//绑定取消函数_timer->start(2);//启动定时器
}void MainWindow::on_updateProgressDialog(){//更新定时器_counter++;if(_counter>5000){_timer->stop();//停止定时器之后删除,并将指针指向空delete _timer;_timer=nullptr;delete _progressDialog;_progressDialog=nullptr;_counter=0;return;}_progressDialog->setValue(_counter);//更新进度条
}
void MainWindow::on_cancelProgressDialog(){_timer->stop();delete _timer;_timer=nullptr;delete _progressDialog;_progressDialog=nullptr;_counter=0;return;
}

向导对话框

#include<QWizard>
#include<QLabel>
#include<QVBoxLayout>
#include<QComboBox>
void MainWindow::on_pushButton_6_clicked()
{//创建QWizard对象QWizard wizard(this);wizard.setWindowTitle(tr("Fall in LOVE"));//向导标题// 第一页:欢迎页QWizardPage* page1 = new QWizardPage();//创建第一页page1->setTitle(tr("婚恋向导"));QLabel* label1 = new QLabel(tr("该程序帮助您找到人生伴侣"));//创建label控件QVBoxLayout* layout1 = new QVBoxLayout();//创建垂直布局layout1->addWidget(label1);//将label标签加入到布局中page1->setLayout(layout1);//将布局给到page1wizard.addPage(page1);//用addPage方法将page1加入到向导中// 第二页:心动类型QWizardPage* page2 = new QWizardPage();page2->setTitle(tr("心动类型"));QLabel* label2 = new QLabel(tr("请选择你心仪的对象类型:"));QComboBox* comboBox = new QComboBox();//下拉列表comboBox->addItems({tr("文艺青年"), tr("理工直男"), tr("职场精英"), tr("温柔女生")});QVBoxLayout* layout2 = new QVBoxLayout();//垂直布局layout2->addWidget(label2);layout2->addWidget(comboBox);page2->setLayout(layout2);wizard.addPage(page2);// 第三页:确认信息(示例)QWizardPage* page3 = new QWizardPage();page3->setTitle(tr("确认信息"));QLabel* label3 = new QLabel(tr("请确认您的信息是否正确。"));QVBoxLayout* layout3 = new QVBoxLayout();layout3->addWidget(label3);page3->setLayout(layout3);wizard.addPage(page3);// 显示向导wizard.exec();
}

QLineEdit

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QRegularExpressionValidator>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//邮箱,设置正则表达式123@123.comui->emailLineEdit->setEchoMode(QLineEdit::Normal);QRegularExpression regx("[a-zA-Z0-9_-]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+");QValidator* validator=new QRegularExpressionValidator(regx,ui->emailLineEdit);//密码(不可见)ui->passwordLineEdit->setEchoMode(QLineEdit::Password);QString ip_mask="000.000.000.000;";ui->ipLineEdit->setInputMask(ip_mask);QString mac_mask="HH:HH:HH:HH;";ui->macLineEdit->setEchoMode(QLineEdit::Normal);ui->macLineEdit->setInputMask(mac_mask);
}MainWindow::~MainWindow()
{delete ui;
}

Qt主窗口和菜单栏

主窗口添加图标

添加现有文件选到icon,

创建悬浮Docker Widget

MdiArea

这是在新建文件的转到槽,然后添加

#include<QTextEdit>
#include<QMdiSubWindow>
void MainWindow::on_actionNew_N_triggered()
{QTextEdit* textedit=new QTextEdit(this);auto childWindow=ui->mdiArea->addSubWindow(textedit);childWindow->setWindowTitle(tr("文本编辑子窗口"));childWindow->show();
}

太杂了。。。

后面直接进项目

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

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

相关文章

《汇编语言:基于X86处理器》第2章 x86处理器架构

本章重点是与 x86 汇编语言相关的底层硬件。有说法认为&#xff0c;汇编语言是直接与机器交流的理想软件工具。如果是真的&#xff0c;那么汇编程序员就必须非常熟悉处理器的内部结构与功能。本章将讨论指令执行时处理器内部发生的一些基本操作&#xff0c;以及操作系统如何加载…

最小生成树算法的解题思路与 C++ 算法应用

一、最小生成树算法针对问题类型及概述 先来简要陈述一下树的概念&#xff1a;一个由 N N N 个点和 N − 1 N-1 N−1 条边组成的无向连通图。由此&#xff0c;我们可以得知生成树算法的概念&#xff1a;在一个 N N N 个点的图中找出一个由 N − 1 N-1 N−1 条边组成的树。…

feign.FeignException$NotFound: [404 ] during [POST] to [http://ti/ti/v1/i/se

feign.FeignException$NotFound: [404 ] during [POST] to [http://ti/ti/v1/i/send 原因&#xff1a;多个地方注册 FeignClient(name “ti”, path “/ti/v1/i/send/repeat”) 解决&#xff1a;删除一个即可

Mac m1 通过docker镜像安装kafka

kafka依赖zookeeper&#xff0c;因此需要使用docker同时安装zookeeper和kafka。 macOS的docker在容器和宿主之间无法通过ip直接通信&#xff0c;因此在安装的时候需要特殊注意与ip相关的设置。当容器需要访问宿主ip时&#xff0c;需要使用docker.for.mac.host.internal或者host…

01初始uni-app+tabBar+首页

初始uni-apptabBar首页 1. uni-app1.1 新建uni-app项目1.2 目录结构1.3 把项目配置运行到微信开发者工具 2. tabBar3.1 首页3.1 配置网络请求3.2 轮播图区域3.3 分类导航区域3.4 楼层区域 1. uni-app ​ uni-app 是使用 Vue.js 开发前端应用的框架。开发者编写一套代码&#x…

微信小程序,微信授权手机号码

uniapp中index.vue: <template><view class"content"><button open-type"getPhoneNumber" getphonenumber"getPhoneNumber"type"primary">授权手机号登录 </button></view></template><scrip…

数据结构 学习 图 2025年6月14日 12点57分

搜索算法 深度优先搜索 一种用于遍历或搜索树或图的算法。它沿着树的深度遍历树的节点&#xff0c;尽可能深的搜索树的分支。 DFS核心思想 深度优先&#xff1a;尽可能深地搜索树的分支 回溯思想&#xff1a;当节点v的所在边都已被探寻过&#xff0c;搜索将回溯到发现节点v的…

H3C路由器使用PBR 实现两条互联网专线互为备份

实验拓扑 图 1-1 注&#xff1a;如无特别说明&#xff0c;描述中的 R1 或 SW1 对应拓扑中设备名称末尾数字为 1 的设备&#xff0c;R2 或 SW2 对应拓扑中设备名称末尾数字为 2 的设备&#xff0c;以此类推&#xff1b;另外&#xff0c;同一网段中&#xff0c;IP 地址的主机位为…

深化信创生态布局!聚铭网络与海量数据完成产品兼容性互认证

近日&#xff0c;聚铭网络成功与海量数据完成了一系列产品的兼容性互认证&#xff0c;并获得了由海量数据颁发的产品兼容互认证书。这一成就标志着双方在技术整合方面迈出了重要一步。 经过全面严格的测试&#xff0c;聚铭网络自主研发的安全系列产品&#xff0c;包括聚铭下一…

Unity AR+ 百度AI 实现 物体识别与对应英文翻译

一、前言 我目前实现了拍照保存到手机的功能 我想进一步优化&#xff0c;实现通过手机摄像头实时识别眼前的物体&#xff0c;显示对应的英文的功能。 1.项目技术栈&#xff1a;Unity 2022.3.53 Vuforia 11 百度物体识别API 百度翻译API 2.功能目标&#xff1a;使用手机摄像…

Vue.js第二节

计算属性、事件绑定、条件判断、遍历循环 计算属性&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

从开源代码入场无人机学术研究到商业化市场的全路径指南-优雅草卓伊凡

从开源代码入场无人机学术研究到商业化市场的全路径指南-优雅草卓伊凡 引言&#xff1a;开源代码在无人机研究中的重要性 优雅草卓伊凡在这里告诉大家&#xff0c;如果真的要开始进入无人机领域&#xff0c;我们需要一步步开始研究。目前先去看看开源无人机代码是尤为重要的&…

window11中开启ubuntu22.04子系统

一、启用Windows子系统 打开控制面板 选择程序然后点击“启用或关闭Windows功能” 勾选如下2项&#xff0c;点击确定 二、安装内核升级包 打开链接https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi下载内核升级包&#xff0c;打开后安装、重启电脑…

80Qt窗口_对话框

目录 5. 对话框 5.1 对话框介绍 用例1&#xff1a; 用例2&#xff1a; 用例3&#xff1a; 用例4&#xff1a; 5.2 对话框的分类 5.2.1 模态对话框 5.2.2 ⾮模态对话框 5. 对话框 5.1 对话框介绍 对话框是 GUI 程序中不可或缺的组成部分。⼀些不适合在主窗⼝实现的功…

Pyenv 跟 Conda 还有 Poetry 有什么区别?各有什么不同?

pyenv、Conda 和 Poetry 是 Python 生态中常用的工具&#xff0c;但它们的核心功能和用途不同&#xff0c;通常可以结合使用。以下是它们的区别和特点&#xff1a; 1. pyenv 用途&#xff1a;管理多个 Python 解释器版本。 核心功能&#xff1a; 安装不同版本的 Python&#x…

数学符号和标识中英文列表(含义与示例)

数学符号和标识的参考&#xff0c;涵盖了数学的各个主要分支&#xff0c;并提供清晰的定义和示例&#xff0c;方便快速查找和学习收藏。 目录 基础数学符号几何符号代数符号线性代数符号概率与统计符号集合论符号逻辑符号微积分与分析符号数字与字母符号 特点 中英对照&…

「Java流程控制」switch结构

知识点解析 1.switch结构的核心概念 switch语句是一种多分支选择结构,它根据表达式的值来选择执行不同的代码块。与if-else结构相比,switch更适合处理离散的、有限个值的比较。 2.switch结构的基本语法 switch (表达式) {case 值1:// 代码块1[break;]case 值2:// 代码块…

从0开始学习R语言--Day27--空间自相关

有的时候&#xff0c;我们在数据进行分组时&#xff0c;会发现用正常的聚类分析的方法和思维&#xff0c;分组的情况不是很理想。其实这是因为我们常常会忽略一个问题&#xff1a;假设我们正在分析的数据是真实的&#xff0c;那么它也肯定在一定程度上符合客观规律。而如果我们…

Excel将表格文件由宽数据转为长数据的方法

本文介绍基于Excel软件的Power Query模块&#xff0c;实现表格数据由宽数据转为长数据的具体方法。 长数据和宽数据是数据分析中的2种基本数据组织形式&#xff0c;二者在结构、用途、适用场景等方面各有特点。其中&#xff0c;宽数据 &#xff08;Wide Format&#xff09;以“…

SpringAI + DeepSeek大模型应用开发 - 入门篇

三、SpringAI Spring AILangChain4jChat支持支持Function支持支持RAG支持支持对话模型1515向量模型1015向量数据库1520多模态模型51JDK178 1. 对话机器人 1.1 快速入门 步骤①&#xff1a;引入依赖&#xff08;先去掉openai的starter依赖&#xff0c;因为要配置API_KEY&#…