QT--控件篇四
一、对话框
- 在软件开发中,对话框(Dialog)是一种常见的用户界面元素,用于与用户进行交互和获取信息。它通常以模态或非模态的形式出现,模态对话框会阻止用户与应用程序的其他部分交互,直到对话框关闭为止,而非模态对话框允许用户在对话框打开的同时与应用程序的其他部分交互。
- 在UI界面就是Dialog Button Box控件,包含所有对话框,具体使用特定的对话框时,需要包含其特定的头文件。
- 父对象可以填写this,表示必须先处理该对话框才能在父对象上操作,填写nullptr,则不用,可能导致父对象,关闭,而对话框不关闭
- 检查用户是否取消了对话框操作,并适当处理这种情况。例如,在文件选择对话框中,如果返回的路径为空,表示用户取消了操作。
1.输入对话框Input Dialog
- 使用输入对话框,先包含头文件<QInputDialog>
- QString txt = QInputDialog::getText(父对象,QString 标题,QString 内容描述。
例如QString date = QInputDialog::getText(this,"星期","请输入星期几");getText的返回值就是你输入的内容,它属于QString类。
2.消息对话框
- 使用消息对话框,先包含头文件<\QMessageBox>
- 如你所见,是Box->盒子,即它也多种类型。不过使用方法一样,就是提醒图片略有不同。包含information、warning、critical、question对话框。
- 按键值 = QMessageBox::information(父对象,QString 标题,QString 提示,按键组合,默认按键);
information可以替换为:warning、critical、question - 举例
QMessageBox::StandardButton btn;//存储用户的选择结果。是枚举类型喔
btn = QMessageBox::information(this,"标题:告示","今天食堂不营业",QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);然后可以根据用户的选择进行相应的操作如,if,Switch等。
3.文件对话框
- 文件对话框是一个标准的对话框,允许用户选择一个或多个文件来打开、保存或选择目录。在 Qt 中,QFileDialog 类提供了丰富的功能来处理这些需求。
- 使用文件对话框,先包含头文件<\QFileDialog>
QFileDialog::getOpenFileName是 Qt 中用于显示文件打开对话框的方法。它允许用户选择一个文件并返回所选文件的路径。
使用方法
原型:QString QFileDialog::getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = QFileDialog::Options())QString filename = QFileDialog::getOpenFileName(父对象,标题,默认路径,筛选器);
筛选器: 通常以后缀来进行筛选,如*.txt,*.png等等。但是“;;”的左边和右边是互斥选择的。
filename存储的你所选择的路径,即getOpenFileName的返回值。举例代码
QString filename = QFileDialog::getOpenFileName(this,"标题:请选择一个文件","./", "*.txt ;; *.c *.h " );
if(filename.isEmpty() ){qDebug()<<"you select none";return;
}
qDebug()<<"you will open "<<filename;注意
getOpenFileNames只需要将接受返回值的类型改为QStringList类型即可。
- QFileDialog::getSaveFileName 是 Qt 中用于显示保存文件对话框的方法。它允许用户选择保存文件的位置和名称,并返回所选文件的路径。格式与getOpenFileName差不多
QString fn = QFileDialog::getSaveFileName(this,"标题:请输入保存的文件名",".","*.png ;; *.jpeg *.jpg");qDebug()<<"you will save "<<fn;
- QFileDialog::getExistingDirectory 是 Qt 中用于显示目录选择对话框的方法。它允许用户选择一个目录,并返回所选目录的路径。
QFileDialog::getExistingDirectory(父对象,"标题:选择路径","默认路径");*/QString fn = QFileDialog::getExistingDirectory(this,"标题:选择路径",".");
- 代码


二、布局
- 在Qt中进行布局是一个非常常见的任务,通常使用布局管理器(Layout Managers)来组织和管理窗口部件的位置和大小。
- 它们之间是可以嵌套使用的
1.vertical layout
- 垂直布局(QVBoxLayout)是Qt中的一个布局管理器,用于将控件垂直排列在窗口或其他容器中。其主要作用是方便地管理和组织窗口部件的位置和大小,使界面看起来更加整洁和易于调整。

2. horizontal layout
- 水平布局(QHBoxLayout)是Qt中的一个布局管理器,用于将控件水平排列在窗口或其他容器中。

3. grid layout
- 网格布局(QGridLayout)是Qt中的一个布局管理器,用于将控件按照网格形式排列在窗口或其他容器中
- 特点:
- 网格排列:控件可以按照指定的行和列放置,每个控件可以占据一个或多个网格单元。
- 灵活性:可以方便地添加、删除或重新排列布局中的控件,而不会影响到其它部分的布局。
- 自适应调整:当窗口大小改变时,网格布局会自动调整控件的位置和大小,以适应新的窗口尺寸。
3.示例

4. Horizontal spacer和vertical spacer
- 用于在布局中创建空白空间或者弹性空间:QSpacerItem 和 QSizePolicy::Expanding。它们可以帮助实现在布局中控制部件之间的间距或者使部件在布局中扩展以填充空白区域。

三、菜单
- Qt中的菜单栏(QMenuBar)是一个用于在应用程序中创建和管理菜单的控件。它通常位于窗口的顶部,并包含多个菜单项。每个菜单项可以包含多个子项(动作),这些动作可以触发特定的功能或操作。菜单栏在用户界面设计中起着重要作用,提供了对应用程序功能的结构化访问。
- 使用ui设计器时,选择QMainWindows,会在ui界面多一行菜单栏

- setContextMenuPolicy()
- setContextMenuPolicy() 函数是 Qt 中用于设置控件上下文菜单策略的方法。它决定了当用户在控件上执行右键单击时如何处理和显示上下文菜单。
- 括号内参数有
Qt::NoContextMenu / Qt::preventContextMenu / Qt::CustomContextMenu/Qt::DefaultContextMenu,分别代表:没有右击菜单,阻止右击菜单产生,允许右击事件产生,默认值 - 如果设置为 Qt::DefaultContextMenu,则会显示控件默认的上下文菜单,这通常由 Qt 框架根据控件类型和平台决定。
- 允许右击菜单产生,将会发出
customContextMenuRequested(const QPoint&)信号,传递的参数是右键单击事件发生时的鼠标指针位置,属于高级用法。
- QMenu *pMenu;,指向 QMenu 类型的指针变量,用于管理菜单,在Widget.h中创建,可以在定义的槽函数里面使用,但要注意的是在构造函数里面实例化时候是
pMeu = new QMenu;,而不是QMenu *pMenu = new QMenu;,它属于没有在Widget.h中定义,在构造函数中实例化的方法。一定要注意,因为这样写错了,代码不会报错,但是会运行时出错。 - ACtion
- QAction 是 Qt 中用于表示用户界面中的动作或命令的类。它通常用于菜单、工具栏、快捷键等场景,用来定义用户可以执行的操作。
QAction *action = new QAction("动作名称", this); - 加入到菜单里面使用函数addAction;
pMenu->addAction(pCut); - 它的信号为triggered()
pActDel = new QAction("Del");connect(pActDel,SIGNAL(triggered()),this,SLOT( pActDelTriggeredSlotFun() ));
- QCursor::pos();,它的返回值为当前鼠标光标的全局位置坐标。通过调用 move() 函数将 pMenu 移动到鼠标光标的位置。
- move() 函数用于移动窗口或控件到指定的坐标位置。
pMenu->move(QCursor::pos());//移动位置
pMenu->show();//使菜单显示出来
这两行代码的作用是确保在哪里右击,就在哪里显示右击菜单栏
- 示例代码
#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox> // 包含 QMessageBox 类头文件
#include <QDebug> // 包含 qDebug() 函数的头文件Widget::Widget(QWidget *parent): QWidget(parent), // 调用父类 QWidget 的构造函数ui(new Ui::Widget) // 初始化界面类对象 ui
{ui->setupUi(this); // 设置界面布局// 创建主菜单和子菜单pMenu1 = new QMenu("菜单11"); // 创建名称为 "菜单11" 的子菜单对象pMenu = new QMenu("菜单"); // 创建名称为 "菜单" 的主菜单对象// 创建动作(菜单项)pCut = new QAction("剪切"); // 创建名称为 "剪切" 的动作对象pCopy = new QAction("复制"); // 创建名称为 "复制" 的动作对象pPoaste = new QAction("粘贴"); // 创建名称为 "粘贴" 的动作对象pDel = new QAction("删除"); // 创建名称为 "删除" 的动作对象pIns = new QAction("子菜单"); // 创建名称为 "子菜单" 的动作对象// 设置标签控件的上下文菜单策略为自定义上下文菜单ui->label->setContextMenuPolicy(Qt::CustomContextMenu);// 连接标签控件的自定义上下文菜单请求信号到槽函数connect(ui->label, SIGNAL(customContextMenuRequested(const QPoint&)),this, SLOT(labelCustomContextMenuRequestedSlotFun(const QPoint&)));// 将子菜单添加到主菜单中pMenu->addMenu(pMenu1);// 在子菜单中添加动作(菜单项)pMenu1->addAction(pIns);// 在主菜单中添加动作(菜单项)pMenu->addAction(pCut);pMenu->addAction(pCopy);pMenu->addAction(pPoaste);pMenu->addAction(pDel);// 连接删除动作的触发信号到槽函数connect(pDel, SIGNAL(triggered()), this, SLOT(pDelTriggeredSlotFun()));
}Widget::~Widget()
{delete ui; // 释放界面类对象内存
}// 处理标签控件的自定义上下文菜单请求槽函数
void Widget::labelCustomContextMenuRequestedSlotFun(const QPoint &p)
{qDebug() << __func__ << p; // 打印函数名和鼠标右击位置坐标// 将主菜单移动到鼠标光标的位置并显示pMenu->move(QCursor::pos());pMenu->show();
}// 处理删除动作的槽函数
void Widget::pDelTriggeredSlotFun()
{// 显示删除确认对话框,并等待用户响应QMessageBox::StandardButton btn = QMessageBox::question(this,"删除","你确认要删除对象吗?",QMessageBox::Yes | QMessageBox::Cancel,QMessageBox::Cancel);if (btn == QMessageBox::Yes) {// 如果用户点击了确认按钮,执行删除操作qDebug() << "执行删除操作";} else {// 如果用户点击了取消按钮,输出取消删除操作信息qDebug() << "取消删除操作";}
}

相关文章:
QT--控件篇四
一、对话框 在软件开发中,对话框(Dialog)是一种常见的用户界面元素,用于与用户进行交互和获取信息。它通常以模态或非模态的形式出现,模态对话框会阻止用户与应用程序的其他部分交互,直到对话框关闭为止&a…...
opencv—常用函数学习_“干货“_2
目录 五、矩阵计算函数 归一化矩阵 (normalize) 转置矩阵 (transpose) 求矩阵的逆 (invert) 翻转矩阵 (flip) 旋转矩阵 (rotate) 求矩阵的行列式 (determinant) 求矩阵的迹 (trace) 求矩阵的特征值和特征向量 (eigen) 六、代数运算 矩阵加法 (add) 矩阵减法 (subtra…...
解析CSS与JavaScript的使用方法及ECMAScript语法规则
一、CSS的三种使用方式 CSS(层叠样式表)用于定义网页的样式和布局。以下是CSS的三种使用方式: 1. 内联样式 内联样式是最直接的应用方式,它通过HTML标签的style属性来定义。 代码示例: <h1 style"color: …...
从零开始学习嵌入式----结构体struct和union习题回顾
一、通过结构体和自定义函数实现成绩从大到小的排序,要求在主函数内定义结构体数组。 #include <stdio.h> //定义一个结构体类型 typedef struct Student {int age;char name[32];float score; } STU; //定义一个函数实现成绩从小到大的排序 void fun(STU *p…...
建筑产业网元宇宙的探索与实践
在数字化浪潮的推动下,建筑产业网正迈入一个全新的元宇宙时代。这一变革不仅为建筑设计、施工与管理带来了革新,也为整个行业注入了新的活力与创造力。本文将深入探讨建筑产业网元宇宙的特点、应用及未来趋势,带您领略其在建筑行业中的独特魅…...
比较RMI、HTTP+JSON/XML、gRPC
RMI(Remote Method Invocation,远程方法调用)、HTTPJSON/XML、gRPC是三种不同的技术或协议,它们各自在远程通信、数据传输和服务交互方面有不同的特点和应用场景。以下是对这三种技术的详细比较: 1. RMI(R…...
软件工程-可行性分析
一、可行性分析 可行性分析/研究目的是用最小的代价在尽可能短的时间内确定问题是否得到解决。 FVPV(1r)^n* FV:未来价值 PV:现值(当前货币金额) r:利率 n:时间期限 纯收入累计的现…...
iOS ------ 消息传递和消息转发
一,消息传递 在OC中,传递消息就是在对象上调用方法。 相对于C语言的方法就“静态绑定”的函数,在编译器就决定了运行时所要调用的函数。在OC中,如果向某对象传递消息,就会使用动态绑定机制来决定需要调用那个方法。调…...
计算机视觉之Vision Transformer图像分类
Vision Transformer(ViT)简介 自注意结构模型的发展,特别是Transformer模型的出现,极大推动了自然语言处理模型的发展。Transformers的计算效率和可扩展性使其能够训练具有超过100B参数的规模空前的模型。ViT是自然语言处理和计算…...
【深度学习】BeautyGAN: 美妆,化妆,人脸美妆
https://www.sysu-hcp.net/userfiles/files/2021/03/01/3327b564380f20c9.pdf 【深度学习】BeautyGAN: Instance-level Facial Makeup Transfer with Deep Generative Adversarial Network BeautyGAN: Instance-level Facial Makeup Transfer with Deep Generative Adversaria…...
RocketMQ~架构与工作流程了解
简介 RocketMQ 具有高性能、高可靠、高实时、分布式 的特点。它是一个采用 Java 语言开发的分布式的消息系统,由阿里巴巴团队开发,在 2016 年底贡献给 Apache,成为了 Apache 的一个顶级项目。 在阿里内部,RocketMQ 很好地服务了集…...
学习Python的IDE功能--(一)入门导览
项目视图是主要工具窗口之一。它包含项目目录、SDK 特定的外部库和临时文件。点击带条纹的按钮可以预览演示项目。您也可以按Alt1打开。点击以打开项目视图,展开项目目录以查看项目文件。双击以打开welcome.py。 切换到"学习"工具窗口继续学习本课次。…...
gdb调试多线程程序
目录 1、pstack查看各个线程的调用堆栈2、gdb调试多线程2.1 查看线程信息2.2 切换线程2.3 进入线程某层具体的调用堆栈2.4 调度器锁2.4.1 查看调度器锁模式 3、实战3.1 调试多线程崩溃3.2 调试多线程死锁 1、pstack查看各个线程的调用堆栈 命令: 1、查看进程id ps …...
实战GraphRAG(一):初步体验GraphRAG及其与RAG的对比
🌟实战GraphRAG(一):初步体验GraphRAG及其与RAG的对比 文章目录 🌟实战GraphRAG(一):初步体验GraphRAG及其与RAG的对比📖引言🔍一、GraphRAG与RAG的区别🚀二、GraphRAG使用示例1.安装GraphRAG2.运行索引器3.配置4.自动优化提示词5.运行索引管道6.使用查询引擎7…...
37、PHP 实现一个链表中包含环,请找出该链表的环的入口结点
题目: 题目描述 PHP 实现一个链表中包含环,请找出该链表的环的入口结点。 描述: 一个链表中包含环,请找出该链表的环的入口结点。 <?php /*class ListNode{var $val;var $next NULL;function __construct($x){$this->v…...
LIMS系统对实验室管理有哪些帮助?
LIMS系统对实验室管理提供了多方面的帮助,具体体现在以下几个方面: 1. 流程标准化与自动化 LIMS系统通过定义标准化的工作流程,如样品接收、测试分配、数据录入、结果审核和报告生成等,实现了实验室工作流程的自动化。这减少了人…...
在GPU上运行PyTorch
文章目录 1、查看GPU的CUDA版本2、下载CUDA版本3、安装cuDNN4、配置CUDA环境变量5、安装配置Anaconda6、使用Anaconda7、pycharm导入虚拟环境8、安装带GPU的PyTorch⭐9、总结 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主&#x…...
【内网穿透】打洞笔记
文章目录 前言原理阐述公网sshfrp转发服务 实现前提第一步:第二步第三步第四步 补充第五步(希望隧道一直开着)sftp传数据(嫌云服务器上的网太慢) 前言 租了一个云服务器,想用vscode的ssh远程连接ÿ…...
第59期|GPTSecurity周报
GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…...
算法2--贪心算法
1.老鼠和猫的交易 小老鼠准备了M磅的猫粮,准备去和看守仓库的猫做交易,因为仓库里有小老鼠喜欢吃的五香豆。 仓库有N个房间; 第i个房间有 J[i] 磅的五香豆,并且需要用 F[i] 磅的猫粮去交换; 老鼠不必交换该房间所有的五…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
