【Qt开发流程】之程序主窗口

描述

就目前的应用程序而言,一般包含菜单栏、工具栏、状态栏、中央区域等。
qt窗口部件类图如下:
在这里插入图片描述
一个主窗口提供了一个构建应用程序用户界面的框架。
Qt有QMainWindow及其相关类来管理主窗口。
QMainWindow有自己的布局,可以向其中添加QToolBars、QDockWidgets、QMenuBar和QStatusBar。布局有一个中心区域,可以被任何类型的小部件占用。
可以看到以下布局的图像。
在这里插入图片描述

菜单栏

菜单栏(QMenu)是一个包含下拉菜单的列表,由QAction动作类实现。
Qt在QMenu中实现菜单,而QMainWindow将它们保留在QMenuBar中。将QActions添加到菜单中,它们会显示为菜单项。
可以通过调用menuBar()来向主窗口的菜单栏添加新菜单,该函数返回窗口的QMenuBar,然后使用QMenuBar::addMenu()添加菜单。
QMainWindow带有默认的菜单栏,但也可以使用setMenuBar()自己设置一个菜单栏。如果希望实现自定义菜单栏(即不使用QMenuBar小部件),则可以使用setMenuWidget()进行设置。
以下是创建菜单的示例:

void MainWindow::createMenus()
{fileMenu = menuBar()->addMenu(tr("&File"));fileMenu->addAction(newAct);fileMenu->addAction(openAct);fileMenu->addAction(saveAct);
}

createPopupMenu()函数在主窗口接收上下文菜单事件时创建弹出菜单。默认实现会生成一个包含停靠窗口和工具栏的可选操作的菜单。可以为自定义菜单重新实现createPopupMenu()。
可以在设计师直接输入菜单
在这里插入图片描述
可以在动作区添加动作,可以添加图标,动作可以复用,在菜单栏和工具栏添加。
在这里插入图片描述

工具栏

工具栏在QToolBar类中实现。可以使用addToolBar()将工具栏添加到主窗口中。
通过将工具栏分配到特定的Qt::ToolBarArea,可以控制工具栏的初始位置。可以通过使用addToolBarBreak()或insertToolBarBreak()插入工具栏断点来分割一个区域,类似于文本编辑中的换行符。还可以使用QToolBar::setAllowedAreas()和QToolBar::setMovable()限制用户在何处放置工具栏。
可以使用iconSize()检索工具栏图标的大小。这些大小取决于平台;可以使用setIconSize()设置固定大小。可以使用setToolButtonStyle()更改工具栏中所有工具按钮的外观。
以下是创建工具栏的示例:

void MainWindow::createToolBars()
{fileToolBar = addToolBar(tr("File"));fileToolBar->addAction(newAct);
}

在这里插入图片描述

状态栏

可以使用setStatusBar()设置状态栏,但是第一次调用statusBar()(返回主窗口的状态栏)时会自动创建一个状态栏。

ui->statusBar->showMessage("helloworld");

在这里插入图片描述

中央区域

一个主窗口可以放置一个中心部件。使用setCentralWidget(QWidget *widget)方法设置。

setCentralWidget(new QTextEdit);

在这里插入图片描述

dock区域

Dock widgets是使用QDockWidget类实现的。dock widget是一个可以停靠在主窗口的窗口。可以使用addDockWidget()将dock widget添加到主窗口中。
根据Qt :: DockWidgetArea枚举,有四个dock widget区域:左、右、上和下。可以使用setCorner()指定应占用区域重叠处角落的dock widget区域。默认情况下,每个区域只能包含一个dock widget行(垂直或水平),但如果使用setDockNestingEnabled()启用嵌套,则dock widget可以沿任一方向添加。
两个dock widget也可能堆叠在一起。然后使用QTabBar选择应显示哪个窗口部件。
下面是一个创建和添加dock widget到主窗口的示例代码:

    QDockWidget *dockWidget = new QDockWidget(tr("Dock Widget"), this);dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);dockWidget->setWidget(dockWidgetContents);addDockWidget(Qt::LeftDockWidgetArea, dockWidget);

工具栏添加弹出式菜单

    QMenu* pM = new QMenu();pM->addAction(new QAction("123", this));pM->addAction(new QAction("123", this));QToolButton* pT = new QToolButton;pT->setMenu(pM);pT->setPopupMode(QToolButton::MenuButtonPopup);ui->mainToolBar->addWidget(pT);

在这里插入图片描述

状态栏显示永久消息

ui->statusBar->addPermanentWidget(new QLabel("helloworld"));

显示在右侧,不会被左侧的临时消息覆盖。
在这里插入图片描述

自定义菜单

通过QWidgetAction类可以创建自定义菜单。
QWidgetAction类通过接口扩展了QAction,用于将自定义小部件插入到基于操作的容器(例如工具栏)中。
应用程序中的大多数操作都表示为菜单中的项目或工具栏中的按钮。但是,有时需要更复杂的小部件。例如,文字处理器中的缩放操作可以使用QToolBar中的QComboBox实现,以呈现不同缩放级别的范围。QToolBar提供了QToolBar :: insertWidget()作为方便函数,用于插入单个小部件。但是,如果想要实现使用自定义小部件在多个容器中进行可视化的操作,则必须子类化QWidgetAction。
例如,如果在将QWidgetAction添加到QToolBar中,则将调用QWidgetAction :: createWidget()。该函数的重新实现应该使用指定的父项创建一个新的自定义小部件。
如果从容器小部件中删除操作,则调用QWidgetAction :: deleteWidget(),并将先前创建的自定义小部件作为参数。默认实现隐藏小部件,并使用QObject :: deleteLater()将其删除。
如果只有一个单独的自定义小部件,则可以使用setDefaultWidget()设置为默认小部件。
如果将操作添加到QToolBar中,或者通常将其添加到支持QWidgetAction的操作容器中,则将使用该部件。
如果在同一时间将只有默认小部件的QWidgetAction添加到两个工具栏中,则默认小部件仅显示在添加操作的第一个工具栏中。
QWidgetAction接管了默认小部件的所有权。
请注意,激活操作取决于小部件,例如通过重新实现鼠标事件处理程序并调用QAction :: trigger()来激活操作。

QWidget* MyAction::createWidget(QWidget *parent)
{QWidget* pW = new QWidget(parent);QLabel* pLabel = new QLabel("哈哈");QLineEdit* pLE = new QLineEdit();QHBoxLayout* pHB = new QHBoxLayout();pHB->addWidget(pLabel);pHB->addWidget(pLE);pW->setLayout(pHB);return pW;
}

在这里插入图片描述

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

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

相关文章

归并排序知识总结

归并排序思维导图: 知识点:如果原序列中两个数的值是相同的,它们在排完序后,它们的位置不发生变化,那么这个排序是稳定的。快速排序是不稳定的,归并排序是稳定的。 快排变成稳定的>使快排排序数组中的每…

24 - 内存持续上升,我该如何排查问题?

我想你肯定遇到过内存溢出,或是内存使用率过高的问题。碰到内存持续上升的情况,其实我们很难从业务日志中查看到具体的问题,那么面对多个进程以及大量业务线程,我们该如何精准地找到背后的原因呢? 1、常用的监控和诊断…

Python - Wave2lip 环境配置与 Wave2lip x GFP-GAN 实战 [超详细!]

一.引言 前面介绍了 GFP-GAN 的原理与应用,其用于优化图像画质。本文关注另外一个相关的项目 Wave2lip,其可以通过人物视频与自定义音频进行适配,改变视频中人物的嘴型与音频对应。 二.Wave2Lip 简介 Wave2lip 研究 lip-syncing 以达到视频…

基于Springboot的地方美食分享网站(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的地方美食分享网站(有报告)。Javaee项目,springboot项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 项目介绍: 采用…

常见树种(贵州省):009楠木、樟木、桂木种类

摘要:本专栏树种介绍图片来源于PPBC中国植物图像库(下附网址),本文整理仅做交流学习使用,同时便于查找,如有侵权请联系删除。 图片网址:PPBC中国植物图像库——最大的植物分类图片库 一、楠木 …

【腾讯云云上实验室-向量数据库】探索腾讯云向量数据库:全方位管理与高效利用多维向量数据的引领者

目录 前言1 腾讯云向量数据库介绍2 向量数据库信息及设置2.1 向量数据库实例信息2.2 实例监控2.3 密钥管理2.4 安全组2.5 Embedding2.6 可视化界面 3 可视化界面4 Embedding4.1 embedding_coll精确查询4.2 unenabled_embedding_coll精确查询 5 数据库5.1 创建数据库5.2 插入数据…

NTLM 认证支持的添加与实现

我在psf/requests项目中报告了bug #932,并提出了一个关于支持HTTP NTLM认证的问题。这篇文章将详细介绍问题背景和解决方案。 HTTP NTLM认证是一种用于验证用户身份的协议。在某些场景下,用户可能需要使用NTLM认证才能访问某些网站或资源。然而&#xff…

SpringCloud 微服务全栈体系(十五)

第十一章 分布式搜索引擎 elasticsearch 五、RestClient 操作文档 为了与索引库操作分离,再次参加一个测试类,做两件事情: 初始化 RestHighLevelClient酒店数据在数据库,需要利用 IHotelService 去查询,所以注入这个接…

Linux shell编程学习笔记28:脚本调试 set命令

0 引入 在Linux Shell 脚本编程的过程中,编写简单功能的脚本,代码不多,一般阅读起来没什么难度,有问题也比较有查出原因和修正。但是当脚本要实现的功能较多,代码变得较为复杂时,阅读起来就不那么容易看明…

一道简单的积分题目

题目如下图&#xff1a; 解法1&#xff1a; 解法2&#xff1a; 解法3&#xff1a; 错误做法&#xff1a; 在 x ∈ ( 0 , ∞ ) 上有 ln ⁡ x < x &#xff0c;令 f ( x ) ln ⁡ x 1 x 2 &#xff0c; g ( x ) &#xff1d; x 1 x 2 ∴ f ( x ) < g ( x ) &#x…

Qt按钮大全续集(QCommandLinkButton和QDialogButtonBox )

## QCommandLinkButton 控件简介 QCommandLinkButton 控件中文名是“命令链接按钮”。QCommandLinkButton 继承QPushButton。CommandLinkButton 控件和 RadioButton 相似,都是用于在互斥选项中选择一项。表面上同平面按钮一样,但是 CommandLinkButton 除带有正常的按钮上的文…

SpringCloud之Feign

文章目录 前言一、Feign的介绍二、定义和使用Feign客户端1、导入依赖2、添加EnableFeignClients注解3、编写FeignClient接口4、用Feign客户端代替RestTemplate 三、自定义Feign的配置1、配置文件方式全局生效局部生效 2、java代码方式 四、Feign的性能优化连接池配置 五、Feign…

代码随想录算法训练营第六十天丨 单调栈03

84.柱状图中最大的矩形 思路 单调栈 本地单调栈的解法和接雨水的题目是遥相呼应的。 为什么这么说呢&#xff0c;42. 接雨水 (opens new window)是找每个柱子左右两边第一个大于该柱子高度的柱子&#xff0c;而本题是找每个柱子左右两边第一个小于该柱子的柱子。 这里就涉…

从入门到精通,mac电脑录屏软件使用教程!

“mac电脑怎么录屏呀&#xff0c;刚买了一台mac电脑&#xff0c;用了几个月感觉挺流畅的&#xff0c;最近因为工作原因&#xff0c;需要用到录屏功能&#xff0c;但是我不会操作&#xff0c;想问问大家有没有简单易懂的录屏教程&#xff0c;谢谢啦。” 在日常生活中&#xff0…

几个强力的nodejs库

几个强力的nodejs库 nodejs被视为许多Web开发人员的理想运行时环境。 nodejs的设计是为了在运行时中使用JavaScript编写的代码&#xff0c;它是世界上最流行的编程语言之一&#xff0c;并允许广泛的开发者社区构建服务器端应用程序。 nodejs提供了通过JavaScript库重用代码的…

FastJsonAPI

maven项目 pom.xml <dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.26</version></dependency><dependency><groupId>junit</groupId>&l…

Java读写Jar

Java提供了读写jar的类库Java.util.jar&#xff0c;Java获取解析jar包的工具类如下&#xff1a; import java.io.File; import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; import java.util.Enumeration; import java.util.HashMap; import …

【图像分类】【深度学习】【Pytorch版本】ResNet模型算法详解

【图像分类】【深度学习】【Pytorch版本】 ResNet模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】 ResNet模型算法详解前言ResNet讲解Deep residual learning framework(深度残差学习框架)残差结构(Residuals)ResNet模型结构 ResNet Pytorch代码完整代码总结 前…

【练习】检测U盘并自动复制内容到电脑的软件

软件作用&#xff1a; 有U盘插在电脑上后&#xff0c;程序会检测到U盘的路径。 自己可以提前设置一个保存复制文件的路径或者使用为默认保存的复制路径&#xff08;默认为桌面&#xff0c;可自行修改&#xff09;。 检测到U盘后程序就会把U盘的文件复制到电脑对应的…

PyTorch微调终极指南1:预训练模型调整

如今&#xff0c;在训练深度学习模型时&#xff0c;通过根据自己的数据微调预训练模型来进行迁移学习&#xff08;transfer learning&#xff09;已成为首选方法。 通过微调这些模型&#xff0c;我们可以利用他们的专业知识并使它们适应我们的特定任务&#xff0c;从而节省宝贵…