Qt窗口介绍

Qt窗口

  • 一、Qt窗口
  • 二、菜单栏
    • 创建菜单栏
    • 在菜单栏中添加菜单
    • 创建菜单项
    • 在菜单项之间添加分割线
    • 综合练习
  • 三、工具栏
    • 创建工具栏
    • 设置停靠位置
    • 设置浮动属性
    • 设置移动属性
    • 综合练习
  • 四、状态栏
    • 状态栏的创建
    • 在状态栏中显示实时消息
    • 在状态栏显示永久的消息
  • 五、浮动窗口
    • 浮动窗口的创建
    • 设置停靠位置
  • 六、对话框
    • 对话框介绍
    • 对话框分类
      • 模态对话框
      • 非模态对话框
      • 混合属性对话框
    • Qt 内置对话框
      • 消息对话框QMessageBox
      • 颜色对话框QColorDialog
      • 文件对话框QFileDialog
      • 字体对话框 QFontDialog
      • 输⼊对话框 QInputDialog

一、Qt窗口

Qt窗口是通过QMainWidget类来实现的,这个类继承自QWidget,然后在QWidget类上进行了更多的扩展,比如:菜单栏、多个工具栏、多个浮动窗口、状态栏和中心部件,它是许多应用的基础;

QMainWidget各个部件所处位置:在这里插入图片描述

二、菜单栏

Qt中的菜单栏是通过QMenuBar这个类来实现的。一个主窗口最多只有一个菜单栏。位于主窗口顶部、主窗口标题栏下面;

菜单栏中主要包含:菜单,而每个菜单中又包含一个个菜单项,同时菜单中也可嵌套菜单;
在这里插入图片描述

创建菜单栏

  1. 使用Qt Design(这个不细说);
  2. 使用代码的方式来创建:
    2.1 通过menuBar()来获取:
    在这里插入图片描述
    通过这种方式获取菜单栏,可以保证一定能够获取到有效的菜单栏,因为menuBar会保证如果菜单栏不存在的话,那么会自动创建然后再返回,如果存在就不用了;
    2.2 自己手动创建:
    在这里插入图片描述

在上述中我们强烈建议使用setMenuBar来完成菜单栏的挂载,不推荐使用QMenuBar*menu=new QMenuBar(this);的方式,因为这种方式就是单纯的将菜单栏挂载到主窗口的对象树下,而并没有真正的将其设置进主窗口,也就相当于主窗口并没有菜单栏这个控件!
这一点验证,我们可以通过以下实验来进行:
在这里插入图片描述
通过实验我们可以发现,仅仅通过在new的时候挂载到this对象上,是并没有真正的将菜单栏设置进主窗口的,因为如果设置进去了,那么两次打印的菜单栏地址应该一样,结果显然没有;
接着我们又来看看使用setMenuBar()的表现:
在这里插入图片描述
通过输出的结果我们可以看到,完全一致;

在菜单栏中添加菜单

创建菜单栏,并设置进主窗口,并且在菜单栏中添加几个菜单选项,其中菜单栏中的每个菜单元素在Qt中使用QMenu来表示:
在这里插入图片描述

创建菜单项

在Qt中每个菜单下面的菜单项元素是通过QAction来表示的:
在这里插入图片描述
运行结果:
在这里插入图片描述

在菜单项之间添加分割线

添加分割线是通过QMenu类提供的addSeparator来实现的;
使用如下:
在这里插入图片描述
运行结果:
在这里插入图片描述

综合练习

通过图形化界面来进行读取和写入文件:
在这里插入图片描述
运行结果:
在这里插入图片描述

三、工具栏

工具栏是应用程序中集成各种功能实现快捷键使用的一个区域。可以有多个,也可以没有,他并不是应用程序中必须存在的组件。他是一个可以移动的组件,它的元素可以是各种窗口组件,它的元素通常以图标按钮的方式存在。说白了工具栏就是将菜单中的使用率高的菜单项单独拿出来,方便用户使用,因此工具栏中的元素也可以用QAction来表示;
在这里插入图片描述

创建工具栏

  1. 使用Qt Design来创建(不演示)
  2. 使用代码的方式:
    在这里插入图片描述
    运行结果:在这里插入图片描述

设置停靠位置

  1. 在创建⼯具栏的同时指定停靠的位置
  2. 通过QToolBar类 提供的 setAllowedAreas()函数 来设置。
  1. Qt::LeftToolBarArea停靠在左侧
  2. Qt::RightToolBarArea停靠在右侧
  3. Qt::TopToolBarArea停靠在顶部
  4. Qt::BottomToolBarArea 停靠在底部
  5. Qt::AllToolBarAreas以上四个位置都可停靠
  1. 在创建⼯具栏的同时指定停靠的位置

在这里插入图片描述
2. 通过QToolBar类 提供的 setAllowedAreas()函数 来设置。
在这里插入图片描述

注意: 在创建⼯具栏的同时指定其停靠的位置,指的是程序运⾏时⼯具栏默认所在的位置;⽽使⽤setAllowedAreas()函数设置停靠位置,指的是⼯具栏允许其所能停靠的位置。

设置浮动属性

工具栏的浮动属性可以通过QToolBar类提供的setFloatable函数来设置;

void setFloatable (bool floatable)
true: 允许浮动
false: 不允许浮动

设置移动属性

⼯具栏的移动属性可以通过 QToolBar类 提供的 setMovable()函数 来设置

void setMovable(bool movable)
true: 允许移动
false: 不允许移动

注意: 若设置⼯具栏为不移动状态,则设置其停靠位置的操作就不会⽣效,所以设置⼯具栏
的移动属性类似于总开关的效果。

综合练习

在这里插入图片描述
运行结果:
在这里插入图片描述

四、状态栏

状态栏是应⽤程序中输出简要信息的区域。⼀般位于主窗⼝的最底部,⼀个窗⼝中最多只能有⼀个状
态栏。在 Qt 中,状态栏是通过 QStatusBar类 来实现的。

在状态栏中可以显⽰的消息类型有:

  1. 实时消息:如当前程序状态
  2. 永久消息:如程序版本号,机构名称
  3. 进度消息:如进度条提⽰,百分百提示

状态栏的创建

在这里插入图片描述

两种方式即可,与菜单栏原理一样;

在状态栏中显示实时消息

在状态栏中显⽰实时消息是通过 showMessage() 函数来实现,⽰例如下:
在这里插入图片描述

在状态栏显示永久的消息

在状态栏中可以显⽰永久消息,此处的永久消息是通过 标签 来显⽰的:
在这里插入图片描述

运行结果:
在这里插入图片描述

使用addPermanentWidget可以从右添加;

五、浮动窗口

在 Qt 中,浮动窗⼝也称之为铆接部件。浮动窗⼝是通过 QDockWidget类 来实现浮动的功能。浮动窗
⼝⼀般是位于核⼼部件的周围,可以有多个。

浮动窗口的创建

浮动窗⼝的创建是通过 QDockWidget类 提供的构造⽅法 QDockWidget()函数 动态创建的;

在这里插入图片描述
在这里插入图片描述

设置停靠位置

浮动窗⼝是位于中⼼部件的周围。可以通过 QDockWidget类 中提供 setAllowedAreas() 函数设置其
允许停靠的位置。其中可以设置允许停靠的位置有:

  1. Qt::LeftDockWidgetArea停靠在左侧
  2. Qt::RightDockWidgetArea停靠在右侧
  3. Qt::TopDockWidgetArea停靠在顶部
  4. Qt::BottomDockWidgetArea 停靠在底部
  5. Qt::AllDockWidgetAreas以上四个位置都可停靠

在这里插入图片描述

六、对话框

对话框介绍

对话框是 GUI 程序中不可或缺的组成部分。⼀些不适合在主窗⼝实现的功能组件可以设置在对话框
中。对话框通常是⼀个顶层窗⼝,出现在程序最上层,⽤于实现短期任务或者简洁的⽤⼾交互。

Qt内置对话框有:

  1. QFiledialog(文件对话框)
  2. QColorDialog(颜⾊对话框)
  3. QFontDialog(字体对话框)
  4. QInputDialog(输⼊对话框)
  5. QMessageBox(消息框)

对话框分类

  1. 模态对话框
  2. 非模态对话框

模态对话框

模态对话框的意思就是:显示后无法与父窗口进行交互,是一种阻塞式的对话框。
例如:
在这里插入图片描述
使用QDialog::exec()函数调用
在这里插入图片描述
当然对于模态窗口来说,也可以在栈上创建,他不会出现一闪而过的现象;

运行结果:
在这里插入图片描述

非模态对话框

非模态对话框就是: 显示后独立存在,能够同时与父窗口进行交互,是一种非阻塞的对话框;
例如:
在这里插入图片描述
使用QDiglog::show()函数调用;
⾮模态对话框⼀般在堆上创建,这是因为如果创建在栈上时,弹出的⾮模态对话框就会⼀闪⽽过。同时还需要设置 Qt:WA_DeleteOnClose 属性,⽬的是:当创建多个⾮模态对话框时(如打开了多个⾮模态窗⼝),为了避免内存泄漏要设置此属性。
在这里插入图片描述
运行结果:
在这里插入图片描述

混合属性对话框

混合属性对话框同时具有模态对话框和⾮模态对话框的属性,对话框的⽣成和销毁具有⾮模态对话框
属性,功能上具有模态对话框的属性。
使⽤ QDialog::setModal() 函数 可以创建混合特性的对话框。通常,创建对话框时需要指定对话框的
⽗组件。
在这里插入图片描述
运行结果:
在这里插入图片描述

经过测试,混合对话框具有模态对话框的属性,只有与对话框先交互过后,才能对后面的父窗口进行交互;但是在窗口生成是用的是show()函数,这一点是非模态对话框的属性;

Qt 内置对话框

Qt 提供l多种可以复用的对话框类型,即Qt标准对话框。Qt标准对话框全部继承于QDialog类。常用标准对话框如下:
在这里插入图片描述

消息对话框QMessageBox

消息对话框是应用程序中最常用的界面元素了。消息对话框主要用于为用户提供重要信息,强制用户进行操作;

QMessageBox中定义了静态成员函数,可以直接调用创建不同风格的消息对话框:

  1. Question:用于正常操作过程中的提问;
  2. Infomation:用于报告正常运行信息;
  3. Warning:用于报告非关键信息;
  4. 用于报告严重错误;

eg1: 创建一个问题提示消息框,并获取用户点击的对话框上的那个按钮:
核心代码:
在这里插入图片描述

运行结果:
在这里插入图片描述

实际上我们如果想要快速的创建一个对话框,不用那么麻烦,直接使用QMesageBox作用域下的静态函数即可:

在这里插入图片描述
运行结果:
在这里插入图片描述
只不过这么做的话,只能得到一个临时对话框,我们无法获取到该对话框,同理自然的我们也就无法获取到用户基于对话框做出的选择;

当然,消息对话框中按钮的类型不止OK或Cancle,还有以下这些类型:
在这里插入图片描述

颜色对话框QColorDialog

类似于Windows下的画图软件中的颜色板:
在这里插入图片描述

顾名思义,颜色对话框的功能就是允许用户选择颜色。继承自QDialog类;

常用方法:

常用方法说明
QColorDialog(QWidget *parent = nullptr)创建一个颜色对话框,并且设置父对象
QColorDialog(const QColor &initial, QWidget *parent = nullptr)创建一个颜色对话框,并指定对话框初始颜色
void setCurrentColor(const QColor &color)设置当前颜色对话框的颜色
QColor currentColor() const获取当前颜色对话框的颜色
QColor getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString
&title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions())静态函数,生成一个颜色对话框
void QColorDialog::open(QObject *receiver, const char *member)打开颜⾊对话框

eg1:
核心代码:
在这里插入图片描述
运行结果:
在这里插入图片描述

文件对话框QFileDialog

⽂件对话框⽤于应⽤程序中需要打开⼀个外部⽂件或需要将当前内容存储到指定的外部⽂件。

常用方法:

常用方法说明
QString getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), constQString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr,QFileDialog::Options options = Options())打开文件(一次打开一个)
QStringList getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(),const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr,QFileDialog::Options options = Options())打开文件(一次打开多个)
QString getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), constQString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr,QFileDialog::Options options = Options())保存文件

eg:
在这里插入图片描述
运行结果:
在这里插入图片描述

字体对话框 QFontDialog

Qt 中提供了预定义的字体对话框类 QFontDialog,⽤于提供选择字体的对话框部件

eg:
在这里插入图片描述
运行结果:
在这里插入图片描述

输⼊对话框 QInputDialog

Qt 中提供了预定义的输⼊对话框类:QInputDialog,⽤于进⾏临时数据输⼊的场合。

常用方法说明
double getDouble (QWidget *parent, const QString &title, const QString &label, doublevalue = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok= nullptr, Qt::WindowFlags flags = Qt::WindowFlags())双精度浮点型输⼊数据对话框
int getInt (QWidget *parent, const QString &title, const QString &label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool *ok = nullptr, Qt::WindowFlagsflags = Qt::WindowFlags());整型输⼊数据对话框
QString getItem (QWidget *parent, const QString &title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok = nullptr,Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints =Qt::ImhNone)选择条⽬型输⼊数据框

eg:
在这里插入图片描述
在这里插入图片描述

运行结果:
在这里插入图片描述

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

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

相关文章

Pytorch实现图像分类-水果数据集分类--深度学习大作业

目录 1.概述 2.设计 3.实现 4.实验 5.总结 1.概述 本次深度学习大作业,我使用AlexNet模型对"Fruits-360"数据集中的两部分水果和蔬菜图片进行分类 2.设计 模型设计:Alexnet网络 卷积层部分:构建了一系列卷积层、激活函数…

【等保测评】服务器——Windows server 2012 R2

文章目录 **身份鉴别****访问控制****安全审计****入侵防范****恶意代码防范****可信验证****测评常用命令** Windows服务器安全计算环境测评 测评对象:Windows server 2012 R2 身份鉴别 (高风险)应对登录的用户进行身份标识和鉴别&#x…

【爱上C++】list用法详解、模拟实现

文章目录 一:list介绍以及使用1.list介绍2.基本用法①list构造方式②list迭代器的使用③容量④元素访问⑤插入和删除⑥其他操作image.png 3.list与vector对比 二:list模拟实现1.基本框架2.节点结构体模板3.__list_iterator 结构体模板①模板参数说明②构…

【无人机】低空经济中5G RedCap芯片的技术分析报告

1. 引言 图一. 新基建:低空经济 低空经济作为一种新兴的经济形态,涵盖了无人机、电动垂直起降飞行器(eVTOL)、低空物流、空中交通管理等多个领域。随着5G网络的普及和演进,5G RedCap(Reduced Capability&a…

Typora 1.5.8 版本安装下载教程 (轻量级 Markdown 编辑器),图文步骤详解,免费领取(软件可激活使用)

文章目录 软件介绍软件下载安装步骤激活步骤 软件介绍 Typora是一款基于Markdown语法的轻量级文本编辑器,它的主要目标是为用户提供一个简洁、高效的写作环境。以下是Typora的一些主要特点和功能: 实时预览:Typora支持实时预览功能&#xff0…

腾讯云简单部署MYSQL 8.0

1.安装MySQL8.0资源库 yum localinstall https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm2.安装MySQL8.0 yum -y install mysql-community-server --nogpgcheck . yum -y install mysql-community-server --nogpgcheck 3.启动MySQL并配置开机自启 sys…

【效率提升】程序员常用Shell脚本

文章目录 常用Shell脚本一. 定期更新分区数据二、获取系统资源的使用情况 常用Shell脚本 一. 定期更新分区数据 在某些场景下,我们需要对N年前某一分区的数据进行删除,并添加今年该对应分区的数据,实现数据的流动式存储。 #!/bin/bash dt$…

【devops】ttyd 一个web版本的shell工具 | web版本shell工具 | web shell

一、什么是 TTYD ttyd是在web端一个简单的服务器命令行工具 类似我们在云厂商上直接ssh链接我们的服务器输入指令一样 二、安装ttyd 1、macOS Install with Homebrew: brew install ttydInstall with MacPorts: sudo port install ttyd 2、linux Binary version (recommend…

神经网络中如何优化模型和超参数调优(案例为tensor的预测)

总结: 初级:简单修改一下超参数,效果一般般但是够用,有时候甚至直接不够用 中级:optuna得出最好的超参数之后,再多一些epoch让train和testloss整体下降,然后结果就很不错。 高级:…

Redis集群部署Windows版本

Redis集群 之前因为数据量的原因,并没有进行Redis集群的配置需要,现在由于数据量大,需要进行集群部署。 最初在windows系统部署,需要Redis的windows版本,但官方没有windows版本,所以需要去gitHub上找由民…

【STM32】MPU内存保护单元

注:仅在F7和M7系列上使用介绍 功能: 设置不同存储区域的存储器访问权限(管理员、用户) 设置存储器(内存和外设)属性(可缓冲、可缓存、可共享) 优点:提高嵌入式系统的健壮…

Bash 学习摘录

文章目录 1、变量和参数的介绍(1)变量替换$(...) (2)特殊的变量类型export位置参数shift 2、引用(1)引用变量(2)转义 3、条件判断(1)条件测试结构&#xff08…

Qt+OpenCascade开发笔记(一):occ的windows开发环境搭建(一):OpenCascade介绍、下载和安装过程

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140604141 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

[C++进阶]模板进阶

此篇是学完stl后对于模板的补充 建议先看看这个[C初阶]模板初阶-CSDN博客 一、类模板 此处是对初阶讲过的 1. 类模板的定义格式 template<class T1, class T2, …, class Tn> class 类模板名 {}; 例如我们之前学习过的vector类&#xff1a; template<class T>…

C++中的多路转接技术之epoll

epoll 是干什么的&#xff1f;举个简单的例子 epoll的相关系统调用**epoll_create**和epoll_create1区别 epoll_ctl参数解释 **epoll_wait**参数说明返回值 epoll的使用 **epoll**工作原理epoll的优点(和 **select** 的缺点对应)epoll工作方式**水平触发**Level Triggered 工作…

Springboot 启动时Bean的创建与注入(一)-面试热点-springboot源码解读-xunznux

Springboot 启动时Bean的创建与注入&#xff0c;以及对应的源码解读 文章目录 Springboot 启动时Bean的创建与注入&#xff0c;以及对应的源码解读构建Web项目流程图&#xff1a;堆栈信息&#xff1a;堆栈信息简介堆栈信息源码详解1、main:10, DemoApplication (com.xun.demo)2…

HashMap与ConcurrentHashMap

文章目录 HashMap1.1 HashMap 的数据结构&#xff1f;1.2 HashMap 的动态扩容1.3 Hash实现方法1.4 如何解决Hash冲突 ConcurrentHashMap HashMap 1.1 HashMap 的数据结构&#xff1f; 哈希表结构&#xff08;链表散列&#xff1a;数组链表&#xff09;实现&#xff0c;结合数…

详细分析Springboot自定义启动界面(附Demo)

目录 前言1. banner.text1.1 配置文件关闭1.2 启动类关闭1.3 命令行关闭 2. 自定义Banner类3. 自动配置类4. 总结 前言 实现自定义启动动画是一项有趣的任务&#xff0c;虽然Spring Boot本身不提供内置的动画功能&#xff0c;但可以通过一些技巧来实现 以下主要以Demo的形式展…

三字棋游戏(C语言详细解释)

hello&#xff0c;小伙伴们大家好&#xff0c;算是失踪人口回归了哈&#xff0c;主要原因是期末考试完学校组织实训&#xff0c;做了俄罗斯方块&#xff0c;后续也会更新&#xff0c;不过今天先从简单的三字棋说起 话不多说&#xff0c;开始今天的内容 一、大体思路 我们都知…

MongoDB教程(十三):MongoDB覆盖索引

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言什么是覆盖…