当前位置: 首页 > news >正文

QT--控件篇四

一、对话框

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

二、布局

  1. 在Qt中进行布局是一个非常常见的任务,通常使用布局管理器(Layout Managers)来组织和管理窗口部件的位置和大小。
  2. 它们之间是可以嵌套使用的
1.vertical layout
  1. 垂直布局(QVBoxLayout)是Qt中的一个布局管理器,用于将控件垂直排列在窗口或其他容器中。其主要作用是方便地管理和组织窗口部件的位置和大小,使界面看起来更加整洁和易于调整。
  2. 在这里插入图片描述
2. horizontal layout
  1. 水平布局(QHBoxLayout)是Qt中的一个布局管理器,用于将控件水平排列在窗口或其他容器中。
  2. 在这里插入图片描述
3. grid layout
  1. 网格布局(QGridLayout)是Qt中的一个布局管理器,用于将控件按照网格形式排列在窗口或其他容器中
  2. 特点:
  • 网格排列:控件可以按照指定的行和列放置,每个控件可以占据一个或多个网格单元。
  • 灵活性:可以方便地添加、删除或重新排列布局中的控件,而不会影响到其它部分的布局。
  • 自适应调整:当窗口大小改变时,网格布局会自动调整控件的位置和大小,以适应新的窗口尺寸。
    3.示例
    在这里插入图片描述
4. Horizontal spacer和vertical spacer
  1. 用于在布局中创建空白空间或者弹性空间:QSpacerItem 和 QSizePolicy::Expanding。它们可以帮助实现在布局中控制部件之间的间距或者使部件在布局中扩展以填充空白区域。
  2. 在这里插入图片描述

三、菜单

  1. Qt中的菜单栏(QMenuBar)是一个用于在应用程序中创建和管理菜单的控件。它通常位于窗口的顶部,并包含多个菜单项。每个菜单项可以包含多个子项(动作),这些动作可以触发特定的功能或操作。菜单栏在用户界面设计中起着重要作用,提供了对应用程序功能的结构化访问。
  2. 使用ui设计器时,选择QMainWindows,会在ui界面多一行菜单栏
    在这里插入图片描述
  3. setContextMenuPolicy()
  • setContextMenuPolicy() 函数是 Qt 中用于设置控件上下文菜单策略的方法。它决定了当用户在控件上执行右键单击时如何处理和显示上下文菜单。
  • 括号内参数有Qt::NoContextMenu / Qt::preventContextMenu / Qt::CustomContextMenu/Qt::DefaultContextMenu ,分别代表:没有右击菜单,阻止右击菜单产生,允许右击事件产生,默认值
  • 如果设置为 Qt::DefaultContextMenu,则会显示控件默认的上下文菜单,这通常由 Qt 框架根据控件类型和平台决定。
  • 允许右击菜单产生,将会发出customContextMenuRequested(const QPoint&)信号,传递的参数是右键单击事件发生时的鼠标指针位置,属于高级用法。
  1. QMenu *pMenu;,指向 QMenu 类型的指针变量,用于管理菜单,在Widget.h中创建,可以在定义的槽函数里面使用,但要注意的是在构造函数里面实例化时候是pMeu = new QMenu;,而不是QMenu *pMenu = new QMenu;,它属于没有在Widget.h中定义,在构造函数中实例化的方法。一定要注意,因为这样写错了,代码不会报错,但是会运行时出错。
  2. ACtion
  • QAction 是 Qt 中用于表示用户界面中的动作或命令的类。它通常用于菜单、工具栏、快捷键等场景,用来定义用户可以执行的操作。QAction *action = new QAction("动作名称", this);
  • 加入到菜单里面使用函数addAction;pMenu->addAction(pCut);
  • 它的信号为triggered()
pActDel = new QAction("Del");connect(pActDel,SIGNAL(triggered()),this,SLOT( pActDelTriggeredSlotFun() ));
  1. QCursor::pos();,它的返回值为当前鼠标光标的全局位置坐标。通过调用 move() 函数将 pMenu 移动到鼠标光标的位置。
  • move() 函数用于移动窗口或控件到指定的坐标位置。
pMenu->move(QCursor::pos());//移动位置
pMenu->show();//使菜单显示出来
这两行代码的作用是确保在哪里右击,就在哪里显示右击菜单栏
  1. 示例代码
#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--控件篇四

一、对话框 在软件开发中&#xff0c;对话框&#xff08;Dialog&#xff09;是一种常见的用户界面元素&#xff0c;用于与用户进行交互和获取信息。它通常以模态或非模态的形式出现&#xff0c;模态对话框会阻止用户与应用程序的其他部分交互&#xff0c;直到对话框关闭为止&a…...

opencv—常用函数学习_“干货“_2

目录 五、矩阵计算函数 归一化矩阵 (normalize) 转置矩阵 (transpose) 求矩阵的逆 (invert) 翻转矩阵 (flip) 旋转矩阵 (rotate) 求矩阵的行列式 (determinant) 求矩阵的迹 (trace) 求矩阵的特征值和特征向量 (eigen) 六、代数运算 矩阵加法 (add) 矩阵减法 (subtra…...

解析CSS与JavaScript的使用方法及ECMAScript语法规则

一、CSS的三种使用方式 CSS&#xff08;层叠样式表&#xff09;用于定义网页的样式和布局。以下是CSS的三种使用方式&#xff1a; 1. 内联样式 内联样式是最直接的应用方式&#xff0c;它通过HTML标签的style属性来定义。 代码示例&#xff1a; <h1 style"color: …...

从零开始学习嵌入式----结构体struct和union习题回顾

一、通过结构体和自定义函数实现成绩从大到小的排序&#xff0c;要求在主函数内定义结构体数组。 #include <stdio.h> //定义一个结构体类型 typedef struct Student {int age;char name[32];float score; } STU; //定义一个函数实现成绩从小到大的排序 void fun(STU *p…...

建筑产业网元宇宙的探索与实践

在数字化浪潮的推动下&#xff0c;建筑产业网正迈入一个全新的元宇宙时代。这一变革不仅为建筑设计、施工与管理带来了革新&#xff0c;也为整个行业注入了新的活力与创造力。本文将深入探讨建筑产业网元宇宙的特点、应用及未来趋势&#xff0c;带您领略其在建筑行业中的独特魅…...

比较RMI、HTTP+JSON/XML、gRPC

RMI&#xff08;Remote Method Invocation&#xff0c;远程方法调用&#xff09;、HTTPJSON/XML、gRPC是三种不同的技术或协议&#xff0c;它们各自在远程通信、数据传输和服务交互方面有不同的特点和应用场景。以下是对这三种技术的详细比较&#xff1a; 1. RMI&#xff08;R…...

软件工程-可行性分析

一、可行性分析 可行性分析/研究目的是用最小的代价在尽可能短的时间内确定问题是否得到解决。 FVPV&#xff08;1r&#xff09;^n* FV&#xff1a;未来价值 PV&#xff1a;现值&#xff08;当前货币金额&#xff09; r&#xff1a;利率 n&#xff1a;时间期限 纯收入累计的现…...

iOS ------ 消息传递和消息转发

一&#xff0c;消息传递 在OC中&#xff0c;传递消息就是在对象上调用方法。 相对于C语言的方法就“静态绑定”的函数&#xff0c;在编译器就决定了运行时所要调用的函数。在OC中&#xff0c;如果向某对象传递消息&#xff0c;就会使用动态绑定机制来决定需要调用那个方法。调…...

计算机视觉之Vision Transformer图像分类

Vision Transformer&#xff08;ViT&#xff09;简介 自注意结构模型的发展&#xff0c;特别是Transformer模型的出现&#xff0c;极大推动了自然语言处理模型的发展。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 语言开发的分布式的消息系统&#xff0c;由阿里巴巴团队开发&#xff0c;在 2016 年底贡献给 Apache&#xff0c;成为了 Apache 的一个顶级项目。 在阿里内部&#xff0c;RocketMQ 很好地服务了集…...

学习Python的IDE功能--(一)入门导览

项目视图是主要工具窗口之一。它包含项目目录、SDK 特定的外部库和临时文件。点击带条纹的按钮可以预览演示项目。您也可以按Alt1打开。点击以打开项目视图&#xff0c;展开项目目录以查看项目文件。双击以打开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查看各个线程的调用堆栈 命令&#xff1a; 1、查看进程id ps …...

实战GraphRAG(一):初步体验GraphRAG及其与RAG的对比

🌟实战GraphRAG(一):初步体验GraphRAG及其与RAG的对比 文章目录 🌟实战GraphRAG(一):初步体验GraphRAG及其与RAG的对比📖引言🔍一、GraphRAG与RAG的区别🚀二、GraphRAG使用示例1.安装GraphRAG2.运行索引器3.配置4.自动优化提示词5.运行索引管道6.使用查询引擎7…...

37、PHP 实现一个链表中包含环,请找出该链表的环的入口结点

题目&#xff1a; 题目描述 PHP 实现一个链表中包含环&#xff0c;请找出该链表的环的入口结点。 描述&#xff1a; 一个链表中包含环&#xff0c;请找出该链表的环的入口结点。 <?php /*class ListNode{var $val;var $next NULL;function __construct($x){$this->v…...

LIMS系统对实验室管理有哪些帮助?

LIMS系统对实验室管理提供了多方面的帮助&#xff0c;具体体现在以下几个方面&#xff1a; 1. 流程标准化与自动化 LIMS系统通过定义标准化的工作流程&#xff0c;如样品接收、测试分配、数据录入、结果审核和报告生成等&#xff0c;实现了实验室工作流程的自动化。这减少了人…...

在GPU上运行PyTorch

文章目录 1、查看GPU的CUDA版本2、下载CUDA版本3、安装cuDNN4、配置CUDA环境变量5、安装配置Anaconda6、使用Anaconda7、pycharm导入虚拟环境8、安装带GPU的PyTorch⭐9、总结 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#x…...

【内网穿透】打洞笔记

文章目录 前言原理阐述公网sshfrp转发服务 实现前提第一步&#xff1a;第二步第三步第四步 补充第五步&#xff08;希望隧道一直开着&#xff09;sftp传数据&#xff08;嫌云服务器上的网太慢&#xff09; 前言 租了一个云服务器&#xff0c;想用vscode的ssh远程连接&#xff…...

第59期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…...

算法2--贪心算法

1.老鼠和猫的交易 小老鼠准备了M磅的猫粮&#xff0c;准备去和看守仓库的猫做交易&#xff0c;因为仓库里有小老鼠喜欢吃的五香豆。 仓库有N个房间&#xff1b; 第i个房间有 J[i] 磅的五香豆&#xff0c;并且需要用 F[i] 磅的猫粮去交换&#xff1b; 老鼠不必交换该房间所有的五…...

Display Driver Uninstaller:彻底解决显卡驱动问题的专业工具指南

Display Driver Uninstaller&#xff1a;彻底解决显卡驱动问题的专业工具指南 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-u…...

30天无限续杯:JetBrains IDE评估重置神器全攻略

30天无限续杯&#xff1a;JetBrains IDE评估重置神器全攻略 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否曾经在深夜coding时&#xff0c;突然被IDE弹出的"试用期已结束"提示打断思路&#xff…...

母线槽核心部件解析 —— 高纯铜导体与绝缘层的技术价值

在低压配电系统中&#xff0c;母线槽凭借大电流传输能力、高安全性及长寿命特性&#xff0c;成为大型基建、工业厂房、商业建筑等场景的核心配电设备。 扬中金展电气深耕母线槽研发生产 16 年&#xff0c;以严苛的材质标准与精密工艺&#xff0c;打造高可靠母线槽产品&#xff…...

【职场】职场里,“被喜欢“和“被重用“是两件完全不同的事

职场里&#xff0c;"被喜欢"和"被重用"是两件完全不同的事我见过太多这样的人。 在公司里人缘极好&#xff0c;谁都说他靠谱&#xff0c;谁都愿意跟他合作。 开会时第一个帮人倒水&#xff0c;群里消息第一个回复&#xff0c;同事生日永远记得&#xff0c;…...

STM32F103 平行替代方案全面分析(2026 年最新)

STM32F103 作为全球最经典的 Cortex-M3 MCU&#xff0c;凭借成熟的生态和广泛的应用基础统治了中低端嵌入式市场十余年。但近年来受国际供应链波动影响&#xff0c;其价格持续走高&#xff08;2026 年 5 月 STM32F103C8T6 批量价约 8-12 元&#xff0c;部分型号甚至超过 20 元&…...

零成本构建自己的视频切割数据集:我是如何用FFmpeg和TransNet V2训练专属模型的

零成本构建视频切割数据集&#xff1a;FFmpeg与TransNet V2实战指南 在视频内容爆炸式增长的今天&#xff0c;自动检测视频中的镜头切换点&#xff08;cuts&#xff09;和渐变过渡&#xff08;dissolves&#xff09;成为内容分析的基础需求。无论是影视制作团队需要自动化剪辑&…...

NoFences桌面整理工具:5步打造高效整洁的Windows桌面

NoFences桌面整理工具&#xff1a;5步打造高效整洁的Windows桌面 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 还在为Windows桌面上杂乱无章的图标而烦恼吗&#xff1f;NoF…...

用GEE和Landsat 8数据,5步搞定城市生态健康“体检报告”(附完整代码)

城市生态健康体检实战&#xff1a;用GEE和Landsat 8生成可视化评估报告 城市规划师和环保工作者常常需要快速评估城市生态状况&#xff0c;但传统方法耗时费力。Google Earth Engine&#xff08;GEE&#xff09;平台结合Landsat 8数据&#xff0c;为我们提供了一种高效解决方案…...

Hertz.dev多模态应用探索:结合WebRTC的浏览器端音频处理

Hertz.dev多模态应用探索&#xff1a;结合WebRTC的浏览器端音频处理 【免费下载链接】hertz-dev first base model for full-duplex conversational audio 项目地址: https://gitcode.com/gh_mirrors/he/hertz-dev Hertz-dev是一款开源的全双工对话音频基础模型&#xf…...

微生物网络分析终极指南:NetCoMi如何帮你3步构建复杂关联网络

微生物网络分析终极指南&#xff1a;NetCoMi如何帮你3步构建复杂关联网络 【免费下载链接】NetCoMi Network construction, analysis, and comparison for microbial compositional data 项目地址: https://gitcode.com/gh_mirrors/ne/NetCoMi 想揭开微生物群落中隐藏的…...