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://www.mzph.cn/pingmian/47147.shtml

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

相关文章

Pod亲和性、Pod反亲和性、污点与容忍度、API资源对象PV和PVC和本地存储

一、Pod亲和性 pod亲和性的对象为Pod&#xff0c;目的是实现&#xff0c;新建Pod和目标Pod调度到一起&#xff0c;在同一个Node上。 示例&#xff1a; 1.部署一个nginx的pod [rootaminglinux01 ~]# cat testpod01.yaml apiVersion: v1 kind: Pod metadata:name: testpod01la…

【14】水仙花数

水仙花数 题目描述 打印出所有的“水仙花数”。 所谓“水仙花数”是指一个三位数&#xff0c;其各位数字立方和等于该数本身。 例如&#xff1a;153是“水仙花数”&#xff0c;因为&#xff1a;153 1的3次方 5的3次方 3的3次方 输入格式 无需输入输出格式 输出所有水仙…

硕博电子智能控制器、触摸显示屏在集装箱跨运车上的应用

港口跨运车&#xff0c;又称跨运车或轮胎式龙门吊(RTG)&#xff0c;专门用于集装箱码头的装卸和搬运作业&#xff0c;能够迅速完成集装箱在码头前沿、堆场区域以及仓库之间的运输和堆垛&#xff0c;大幅度缩短了装卸周期&#xff0c;提高了港口物流周转效率。 现代跨运车往往配…

Web 安全之 VAPT (漏洞评估与渗透测试)详解

目录 VAPT 的基本概念 VAPT 的重要性 VAPT 的实施步骤 小结 VAPT&#xff08;Vulnerability Assessment and Penetration Testing&#xff0c;漏洞评估与渗透测试&#xff09;是网络安全领域中的一种评估方法&#xff0c;结合了漏洞评估和渗透测试两种紧密相连但又有所区别…

java中的原子性和实现

原子性&#xff1a;不可中断的一系列指令 处理器如何实现原子性 处理器基于对总线加锁和缓存加锁的方式来实现多处理器之间的原子操作。 总线加锁&#xff1a;只有一个处理器能处理这个内存&#xff0c;其他处理器的所有请求都被阻塞&#xff0c;该处理器独占共享内存。 缓…

C++笔试强训4

文章目录 一、选择题1-5题6-10题 二、编程题题目一题目二 一、选择题 1-5题 %o就是输出八进制的无符号数&#xff0c;0123&#xff0c;&#xff0c;以0开头&#xff0c;本来就是八进制&#xff0c;所以输出为123&#xff0c;123是十进制&#xff0c;转化为八进制就是173. 故选…

【Python基础教程】制作一个宿舍管理系统,数据库宿舍管理系统代码!(完整版,附源码)

今天我们一起学习一个新的小案例——宿舍管理系统。主要涉及列表、字典的初始化、增加、删除、修改和查询操作&#xff0c;以及函数的定义和调用。 一、需求&#xff1a; 有操作指引界面&#xff0c;显示操作号 能添加一个新的入住学生信息&#xff0c;包括学生姓名、宿舍号床…

如何让员工在培训后持续应用六西格玛工具?

要让员工在培训后持续应用六西格玛工具&#xff0c;首先需要明确六西格玛的核心价值及其在企业中的应用意义。六西格玛是一种数据驱动的管理方法论&#xff0c;旨在通过减少变异和浪费&#xff0c;提高流程效率和质量&#xff0c;进而提升企业的竞争力。然而&#xff0c;仅仅通…

git 想要创建一个新的本地分支并检出远程分支的内容

如果你想要创建一个新的本地分支并检出远程分支的内容&#xff1a; git checkout -b feature-branch origin/feature-branch feature-branch 是你在本地创建的新分支名&#xff0c;origin/feature-branch 是远程分支的引用。 根据你检出的远程分支的名字而定 不知道名称的时…

JRebelXRebel在线激活(亲测可用)

包含所有新旧版本&#xff0c;包括2023.4.2、2023.4.1、2023.4.0、2023.3.2、2023.3.1、2023.3.0、2023.2.2、2023.2.1、2023.2.0、2023.1.2、2023.1.1 等以及所有2022版本 JRebel&XRebel激活服务器地址 激活服务器地址&#xff08;路线1,推荐&#xff09;&#xff0c;可…

走进NoSql

一、引入 1.1什么是NoSql NoSQL&#xff08;Not Only SQL&#xff09;是一组非关系型数据库&#xff08;或称为非SQL数据库&#xff09;的统称&#xff0c;它们提供了与传统的关系型数据库不同的数据存储和检索方式。NoSQL数据库通常用于处理大量的、分布式的、非结构化或半结…

JAVA--->抽象类接口详解(3)

Object类 1.概念:Object是Java默认提供的一个类。Java里面除了Object类&#xff0c;所有的类都是存在继承关系的。默认会继承Object父类。即所有类的对象都可以使用Object的引用进行接收。 2.获取对象信息(toString方法) // Object类中的toString()方法实现&#xff1a; pub…

数据精度丢失

js数据精度丢失 最近看面试题想到了之前在开发钟遇到过的问题&#xff0c;现总结一下 在开发过程中&#xff0c;发现从后台返回的数据结构中的id字段在前端显示为不正确的值。经过排查&#xff0c;怀疑是JavaScript中Number类型精度丢失的问题。通过将id字段的类型从Number改为…

Docker 三剑客

文章目录 Docker 三剑客1. Docker Engine功能与特点&#xff1a;工作原理&#xff1a;示例命令&#xff1a; 2. Docker Compose功能与特点&#xff1a;工作原理&#xff1a;示例文件 (docker-compose.yml)&#xff1a;示例命令&#xff1a; 3. Docker Swarm功能与特点&#xff…

快手开源LivePortrait,实现表情姿态极速迁移,GitHub 6.5K Star

近日&#xff0c;快手可灵大模型团队开源了名为LivePortrait的可控人像视频生成框架&#xff0c;能够准确、实时地将驱动视频的表情、姿态迁移到静态或动态人像视频上&#xff0c;生成极具表现力的视频结果。如下动图所示&#xff1a; 来自网友测试LivePortrait 来自网友测试Li…

2.I/O口

I/O输出(点灯) 分析电路 看电路图&#xff0c;元器件形成电压差&#xff0c;即可点亮LED灯 代码编写 使用不同操作进行LED控制 #include "reg52.h" //51单片机头文件 #include <intrins.h> sbit LED1 P1^0; //引脚初始化&#xff1a;P1^0&#xff1a;对应引脚…

【TypeDB 】机器学习和符号 AI 在机器人技术中的作用

机器学习和符号 AI 在机器人技术中的作用 煤油灯科技2022-06-29 14:23前言 机器人学是计算机科学中的一个多学科领域,致力于机器人的设计和制造,机器人在制造、太空探索和国防等行业都有应用。虽然该领域已经存在了 50 多年,但随着科幻小说成为现实,波士顿动力公司的Spot和…

Linux的进程和权限的基本命令

目录 基本命令 man find date cal du ln exit grep 基本命令-帮助查询&#xff1a; wc cat more less head tail echo alias unalias 基本命令-进程管理&#xff1a; ps kill top 操作系统负载查看 用户分类&#xff1a; 程序用户 普通用户&#x…

<Rust>egui部件学习:如何在窗口及部件显示中文字符?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析&#xff0c;主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统&#xff1a;windows 平台&#xff1a;visual studio code 语言&#xff1a;rust 库&#xff1a;egui、eframe 概述 本文是本专栏的第一篇博…

探索Java设计模式:构建高效、可维护的软件架构

在软件开发中&#xff0c;设计模式是一种经过验证的解决方案&#xff0c;用于解决常见的设计问题。设计模式不仅提高了代码的可维护性和可重用性&#xff0c;还能帮助开发者遵循最佳实践&#xff0c;构建高效且灵活的软件架构。本文将带你深入了解几种常见的Java设计模式&#…