当前位置: 首页 > 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() << "取消删除操作";}
}

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • php基础: 三角形
  • Windows的包管理器Chocolatey
  • 从代理模式到注解开发
  • css实现每个小盒子占32%,超出就换行
  • 【Linux】将IDEA项目部署到云服务器上,让其成为后台进程(保姆级教学,满满的干货~~)
  • 关系型数据库和非关系型数据库
  • 1千多看图猜成语游戏ACCESS\EXCEL数据库
  • 使用Scikit-Learn决策树:分类问题解决方案指南
  • 【Js】导出 HTML 为 Word 文档
  • 【EXCELL技巧篇】使用Excel公式,获取当前 Excel的Sheet页的名字
  • FPGA笔试
  • 数据湖表格式 Hudi/Iceberg/DeltaLake/Paimon TPCDS 性能对比(Spark 引擎)
  • Ubuntu linux安装新版本go
  • 采用反相正基准电压电路的同相运算放大器(运放)
  • easyswoole/Hyperf开发的php系统 cpu超负荷定位排查
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 4. 路由到控制器 - Laravel从零开始教程
  • codis proxy处理流程
  • react 代码优化(一) ——事件处理
  • 爱情 北京女病人
  • ​你们这样子,耽误我的工作进度怎么办?
  • #if #elif #endif
  • #LLM入门|Prompt#3.3_存储_Memory
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $(selector).each()和$.each()的区别
  • (003)SlickEdit Unity的补全
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (day6) 319. 灯泡开关
  • (八)Flask之app.route装饰器函数的参数
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (算法)硬币问题
  • (转)jdk与jre的区别
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • .NET 材料检测系统崩溃分析
  • .NET 服务 ServiceController
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .net/c# memcached 获取所有缓存键(keys)
  • .net生成的类,跨工程调用显示注释
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • /etc/motd and /etc/issue
  • :中兴通讯为何成功
  • @Autowired和@Resource的区别
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @Slf4j idea标红Cannot resolve symbol ‘log‘