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() << "取消删除操作";}
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

8月贵阳学术会议:第二届机器人与软件工程前沿国际会议(FRSE 2024)

随着科技的飞速发展&#xff0c;机器人与软件工程作为两大前沿领域&#xff0c;正在不断地推动着人类社会的进步。在这样的背景下&#xff0c;第二届机器人与软件工程前沿国际会议&#xff08;FRSE 2024&#xff09;的召开&#xff0c;无疑为专家学者们提供了一个交流与合作的宝…

C4D各版本软件下载+自学C4D 从入门到精通【学习视频教程全集】+【素材笔记】

下载链接&#xff1a; 迅雷网盘https://pan.xunlei.com/s/VO1tydOxEo-Az_QCM-Jz2R4RA1?pwdvxg4# 夸克网盘https://pan.quark.cn/s/fe7450b02d80 百度网盘https://pan.baidu.com/s/1Omj4WL93F1DNdA2iP4SiMQ?pwdwmb8

Linux 下 redis 集群部署

目录 1. redis下载 2. 环境准备 3. redis部署 3.1 修改系统配置文件 3.2 开放端口 3.3 安装 redis 3.4 验证 本文将以三台服务器为例&#xff0c;介绍在 linux 系统下redis的部署方式。 1. redis下载 下载地址&#xff1a;Index of /releases/ 选择需要的介质下载&am…

【UDS刷写章节】

目录 一、UDS刷写的两种方式&#xff1a; 1.1普通刷写原理&#xff1a; 1.2强制刷写&#xff1a; 二、刷写流程图 2.1 刷写前(设置刷写网络) 2.1.1 切换到扩展模式(10 03) 2.1.2 检查刷写前提条件(31 01 XX XX) 2.1.3 停用故障码存储功能(85 02) 2.1.4 停止发送一般通…

3.Kafka生产者api实践

目录 概述实践代码命令行消费端代码 效果代码优化 概述 生产者API使用实践 官网&#xff1a;producerapi 实践 代码 命令行消费端 代码 public class KafkaProducerApp {public static void main(String[] args) {Properties props new Properties();props.put("boot…

【数据结构】探索排序的奥秘

若有不懂地方&#xff0c;可查阅我之前文章哦&#xff01; 个人主页&#xff1a;小八哥向前冲~_csdn博客 所属专栏&#xff1a;数据结构_专栏 目录 排序的概念 几种排序方法介绍 冒泡排序 选择排序 插入排序 堆排序 向上调整建堆排序 向下调整建堆排序 希尔排序 快速…

CPU指令仿真模拟器设计

整体设计 模拟器软件可被细分为多个关键模块&#xff0c;包括但不限于&#xff1a;程序指令序列执行器模块&#xff0c;内存模拟模块&#xff0c;寄存器模拟模块&#xff0c;反汇编模块&#xff0c;以及一套详尽的调试模块&#xff08;包含单步执行、连续运行、暂停以及断点设置…

如何通过网络快速搜寻到自己的STM32设备

目录 一、问题概述 二、解决思路 三、代码实现 1.创建任务 2.UDP广播接收 一、问题概述 以前一直用RS232串口修改设备配置信息&#xff0c;但是现场施工人员的232线太细&#xff0c;经常容易断掉&#xff0c;这次准备用网口去修改&#xff0c;遇到了一个问题&#xff0c;…

深入理解PostgreSql域类型(Domain),灵活定义数据约束,让表结构设计更加严谨

在PostgreSQL中&#xff0c;域&#xff08;Domain&#xff09;是一种用户定义的数据类型&#xff0c;它基于系统内已存在的数据类型&#xff0c;并可以附加约束条件。使用域可以增强数据的完整性和一致性&#xff0c;因为它允许开发者对特定列设定更为具体的规则&#xff0c;比…

Java爬虫安全策略:防止TikTok音频抓取过程中的请求被拦截

摘要 在当今互联网时代&#xff0c;数据采集已成为获取信息的重要手段。然而&#xff0c;随着反爬虫技术的不断进步&#xff0c;爬虫开发者面临着越来越多的挑战。本文将探讨Java爬虫在抓取TikTok音频时的安全策略&#xff0c;包括如何防止请求被拦截&#xff0c;以及如何提高…

【银河麒麟操作系统】虚机重启lvs丢失现象分析及处理建议

了解银河麒麟操作系统更多全新产品&#xff0c;请点击访问麒麟软件产品专区&#xff1a;https://product.kylinos.cn 环境及现象描述 40台虚机强制重启后&#xff0c;其中8台虚机找不到逻辑卷导致启动异常&#xff0c;后续通过pvcreate 修复重建pv&#xff0c;激活vg和lv并修复…

minIO集成springboot

问题 minIO与spring集成。 步骤 创建桶 创建key 找到创建账号页面&#xff0c;如下图&#xff1a; 点击创建&#xff0c;如下图&#xff1a; 设置如下权限&#xff1a; {"Version": "2012-10-17","Statement": [{"Effect": &q…

聚焦 Navicat 17 新特性 | 数据字典提升数据结构清晰度

随着 Navicat 17 的发布&#xff0c;在业界引起了广泛的共鸣与热议。我们曾深入剖析其众多革新特性&#xff0c;包括模型设计创新与优化、高效的查询与配置、用户界面交互体验再升级&#xff0c;以及它如何原生适配国产 Linux ARM 平台和麒麟操作系统等&#xff0c;这些新特性实…

团体程序设计天梯赛-练习集

L2-002 链表去重 #include <bits/stdc.h> #define ios ios::sync_with_stdio(0),cin.tie(0) #define PII pair<int,int> typedef long long ll; const int N1e610; const int inf0x3f3f3f3f;using namespace std; struct node{int data,next; }a[N]; vector<int…

django-vue-admin项目运行

文本主要对django-vue-admin项目进行了简要介绍&#xff0c;并且对前后端进行了源码安装和运行。在此基础上可作为管理系统二次开发的基础框架。 一.django-vue-admin简介和安装 1.简介 django-vue-admin项目是基于RBAC模型权限控制的中小型应用的基础开发平台&#xff0c;采…

陪玩系统小程序模式APP小程序H5系统搭建开发

随着移动互联网的营及和游戏行业的蓬轨发展&#xff0c;陪玩服务应远而生并迅速唱起&#xff0c;陪玩系统小程序作为连接游戏玩家与陪玩师的桥梁&#xff0c;其模式系统的搭建与开发是得尤为重要&#xff0c;本文将洋细凰述陪玩系统小程宗模式系统的搭建开发流程&#xff0c;包…

yolov8训练数据警告检查

在yoloV8训练过程中&#xff0c;你应该也遇到过如图上的数据问题。 这里提供一个简单的提取脚本&#xff0c;可供检查。 首先&#xff0c;你需要将这些警告内容自行复制到一个新建的空白txt里&#xff0c;如下图 通过观察&#xff0c;大致发现会存在以下几种警告&#xff1a;…

Python用Pyqt5制作音乐播放器

具体效果如下 需要实现的功能主要的几个有&#xff1a; 1、搜索结果更新至当前音乐的列表&#xff0c;这样播放下一首是搜素结果的下一首 2、自动播放 3、滚动音乐文本 4、音乐进度条 5、根据实际情况生成音乐列表。我这里的是下面的情况&#xff0c;音乐文件的格式是 歌…

【Chatgpt大语言模型医学领域中如何应用】

随着人工智能技术 AI 的不断发展和应用&#xff0c;ChatGPT 作为一种强大的自然语言处理技术&#xff0c;无论是 自然语言处理、对话系统、机器翻译、内容生成、图像生成&#xff0c;还是语音识别、计算机视觉等方面&#xff0c;ChatGPT 都有着广泛的应用前景。特别在临床医学领…

PHP短视频去水印+影视小程序微信去水印小程序自主开发对接流量主

短视频去水印影视小程序新商机&#xff1a;微信去水印小程序对接流量主全攻略&#x1f4bc; &#x1f3ac;【短视频去水印&#xff0c;内容创作新助力】 在短视频风靡的今天&#xff0c;每一个创意都值得被完整呈现。但恼人的水印常常破坏了这份完美。现在&#xff0c;有了专…