Qt窗口介绍

news2024/12/24 2:28:59

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.coloradmin.cn/o/1939468.html

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

相关文章

达梦数据库系列—29. DTS迁移ORACLE到DM

目录 1.ORACLE源端信息 2.DM目的端信息 3.DTS 迁移评估 4.数据库迁移 4.1 Oracle 源端数据库准备 4.2 目的端达梦数据库准备 初始化参数设置 兼容性参数设置 表空间规划 用户规划 创建迁移用户和表空间 4.3迁移步骤 创建迁移 配置数据源 配置迁移对象及策略 开…

Vue3 --- 路由

路由就是一组key-value的对应关系;多个路由,需要经过路由器的管理。 1. 基本切换效果 安装路由器 npm i vue-router /router/index.ts // import { createRouter, createWebHistory } from vue-router import Home from /components/Home.vue import…

[Armbian] 部署Docker版Home Assistent,安装HACS并连接米家设备

title: [Armbian] 部署Docker版Home Assistent,安装HACS并连接米家设备 date: 2024-07-21T10:51:23Z lastmod: 2024-07-21T11:40:39Z [Armbian] 部署Docker版Home Assistent,安装HACS并连接米家设备 官网:Home Assistant (home-assistant.i…

算法——滑动窗口(day6)

1004.最大连续1的个数 ||| 1004. 最大连续1的个数 III - 力扣(LeetCode) 题目解析: 这道题如果能转化为滑动窗口的话就会很简单,因为我们如果尝试去把0翻转为1再计数的话等到第2轮又得重新翻转回来,费时费力~ 那么我…

gihub导入gitee仓库实现仓库同步

昨天在GitHub里导入了gitee仓库,但是在仓库同步这里卡了很久,因为网上大多数都是从github导入gitee,然后github生成token放入实现同步,但是我找到一种更为方便的! 1.首先找到项目文件下的.git文件里的config文件 2.在…

linux 下将文件安装的mysql.server服务添加到systemctl中管理

1、找到mysql 的 mysql.server/ 文件位置 find / -name mysql.server 2、编辑mysql.server脚本,并将mysql.server脚本添加到linux服务 3、将mysql.server 复制到etc/init.d/mysqld 目录 cp /app/db/mysql/support-files/mysql.server /etc/init.d/mysqld 4、授权…

08 B端产品业务调研的流程(1)

业务调研是掌握业务情况的有效方法。一般核心流程如下图: 明确调研目标:即调研的目标,解决为什么要做业务调研,期望解决什么问题,达到什么样效果,定向。 选取调研对象:涉及多角色,一…

【吊打面试官系列-ZooKeeper面试题】zookeeper 负载均衡和 nginx 负载均衡区别?

大家好,我是锋哥。今天分享关于 【zookeeper 负载均衡和 nginx 负载均衡区别? 】面试题,希望对大家有帮助; zookeeper 负载均衡和 nginx 负载均衡区别? zk 的负载均衡是可以调控,nginx 只是能调权重,其他需要可控的都…

heic文件怎么转换成jpg?上百份文件转换3秒就能搞定(办公必备)

heic和jpg是两种不同的图片格式,平时整理图片素材时,如果需要将heic转为jpg格式,那么可以使用相关的heic图片转换工具。 ​ 为什么要将heic文件转换成jpg?虽然HEIC格式具有很多优点,但是目前并不是所有设备和应用程序…

IAR环境下STM32+IAP方案的实现

--基于STM32F103ZET6的UART通讯实现 一、什么是IAP,为什么要IAP IAP即为In Application Programming(在应用中编程),一般情况下,以STM32F10x系列芯片为主控制器的设备在出厂时就已经使用J-Link仿真器将应用代码烧录了,如果在设备使…

【Qt】按钮的属性相关API

目录 一. QPushButton 二. QRadioButton 按钮组 三. QCheckBox Qt中按钮的继承体系如下图 QAbstractButton是一个抽象类,集成了按钮的核心属性和API 按钮说明QPushButton(普通按钮)最常见的按钮,用于触发操作或者事件。可以设…

【Git命令】git rebase之合并提交记录

使用场景 在本地提交了两个commit,但是发现根本没有没必要分为两次,需要想办法把两次提交合并成一个提交;这个时候可以使用如下命令启动交互式变基会话: git rebase -i HEAD~N这里 N 是你想要重新调整的最近的提交数。 如下在本地…

27.js实现鼠标拖拽

e.offsetX是鼠标距离准确事件源的左上角距离 e.clientX是鼠标距离浏览器可视窗口左上角的距离 e.pageX是鼠标距离文档左上角的距离 /* 当鼠标点击div时开始挪动,当鼠标抬起,div静止——事件源是div 当鼠标点击后,鼠标在移动——事件源…

视频汇聚,GB28181,rtsp,rtmp,sip,webrtc,视频点播等多元异构视频融合,视频通话,视频会议交互方案

现在视频汇聚,视频融合和视频互动,是视频技术的应用方向,目前客户一般有很多视频的业务系统,如已有GB28181的监控(GB现在是国内主流,大量开源接入和商用方案),rtsp设备,音…

Spring Boot 笔记1(启动类与控制器)

采用Spring Tool Suit 4 java jdk 17 学习启动类与控制器 创建Spring Starter Project 如果https://start.spring.io链接无效,可以选择https://start.aliyun.com 项目结构 启动类 启动类是程序的执行入口 例子1 Demo1Application.java package com.example.dem…

从0开始的STM32HAL库学习6

外部时钟源选择 配置环境 选择TIM2 配置红色框图中的各种配置 时钟源选择外部时钟 2 1. 预分频器 Prescaler ,下面填0,不分频 2. 计数模式 CounterModer ,计数模式选择为向上计数 3. 自动重装寄存器 CouterPeriod ,自动重…

记录些MySQL题集(17)

一、MySQL索引为何使用B树结构? MySQL的索引机制中,默认使用BTree作为底层的数据结构,但为什么要选择B树呢?有人会说树结构是以二分法查找数据,所以会在很大程度上提升检索性能,这点确实没错,但…

企业邮件系统管理(一)掌握企业邮件系统管理:从Exchange Server 2010的安装到高可用性配置

👍 个人网站:【洛秋资源小站】 掌握企业邮件系统管理:从Exchange Server 2010的安装到高可用性配置 在当今的企业环境中,电子邮件系统是不可或缺的通信工具。为了确保企业邮件系统的稳定运行和高效管理,系统管理员需要…

WEB前端08-综合案例(动态表格)

使用 HTML、CSS 和 JavaScript 创建动态表格 在本教程中,我们将创建一个动态表格,允许用户添加行、选择项目,并执行批量操作,如全选或删除选中的行。我们将通过 HTML、CSS 和 JavaScript 来实现这一功能。让我们逐步了解每个部分…

分类预测 | Matlab实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多特征分类预测/故障诊断

分类预测 | Matlab实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多特征分类预测/故障诊断 目录 分类预测 | Matlab实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多特征分类预测/故障诊断分类效果基本介绍程序设计参考资料 分类效果 基本介绍 Matlab实现BES-LSSVM秃鹰算法优化最…