Qt 应用程序主界面

news2024/11/13 21:40:05


主要窗口类的概述
这些类提供了典型现代主应用程序窗口所需的一切,如主窗口本身、菜单和工具栏、状态栏等。

QAction

可以插入小部件的抽象用户界面操作

QActionGroup

将动作组合在一起

QDockWidget

小部件,可以停靠在QMainWindow中,也可以作为桌面的顶层窗口浮动

QMainWindow

主应用程序窗口

QMdiArea

显示MDI窗口的区域

QMdiSubWindow

qmediarea的子窗口类

QMenu

菜单小部件,用于菜单栏、上下文菜单和其他弹出式菜单

QMenuBar

水平菜单栏

QSizeGrip

调整顶级窗口大小的句柄

QStatusBar

适合显示状态信息的水平条

QToolBar

包含一组控件的可移动面板

QWidgetAction

通过一个接口扩展QAction,将自定义小部件插入到基于操作的容器中,比如工具栏

主窗口类

Qt提供了下列类来管理主窗口和相关的用户界面组件:

  • QMainWindow是可以围绕它构建应用程序的中心类。与配套的QDockWidget和QToolBar类一起,它表示应用程序的顶级用户界面。
  • QDockWidget提供了一个小部件,可用于创建可拆卸的工具面板或辅助窗口。停靠窗口组件会记录自己的属性,它们可以作为外部窗口被移动、关闭和浮动。
  • QToolBar提供了一个通用的工具栏小部件,它可以容纳许多不同的操作相关小部件,例如按钮、下拉菜单、组合框和微调框。Qt强调统一的操作模型,这意味着工具栏与菜单和键盘快捷键可以很好地配合。

示例代码

使用QMainWindow很简单。通常,我们子类化QMainWindow,并在QMainWindow构造函数中设置菜单、工具栏和停靠部件。

要在主窗口中添加菜单栏,只需创建菜单,并将它们添加到主窗口的菜单栏。注意,QMainWindow::menuBar()函数会在第一次被调用时自动创建菜单栏。也可以调用QMainWindow::setMenuBar()在主窗口中使用自定义菜单栏。

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    ...
    newAct = new QAction(tr("&New"), this);
    newAct->setShortcuts(QKeySequence::New);
    newAct->setStatusTip(tr("Create a new file"));
    connect(newAct, &QAction::triggered, this, &MainWindow::newFile);

    openAct = new QAction(tr("&Open..."), this);
    openAct->setShortcuts(QKeySequence::Open);
    openAct->setStatusTip(tr("Open an existing file"));
    connect(openAct, &QAction::triggered, this, &MainWindow::open);
    ...
}

一旦创建了操作,我们就可以将它们添加到主窗口组件中。首先,我们将它们添加到弹出菜单中:

    fileMenu = menuBar()->addMenu(tr("&File"));
    fileMenu->addAction(newAct);
    fileMenu->addAction(openAct);
    ...
    fileMenu->addSeparator();
    ...

QToolBar和QMenu类使用Qt的action系统来提供一致的API。在上面的代码中,使用QMenu::addAction()函数将一些现有的操作添加到file菜单中。QToolBar也提供了这个功能,使得在主窗口的不同部分重用操作变得很容易。这避免了不必要的重复工作。

我们创建一个工具栏,作为主窗口的一个子窗口,并在其中添加所需的操作:

fileToolBar = addToolBar(tr("File"));
fileToolBar->addAction(newAct);
fileToolBar->addAction(openAct);
    ...
fileToolbar->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);
addToolBar(Qt::TopToolBarArea, fileToolbar);

在这个示例中,工具栏被限制在主窗口的顶部和底部工具栏区域,并且最初被放置在顶部工具栏区域。我们可以看到newAct和openAct指定的操作将同时显示在工具栏和文件菜单中。
QDockWidget的使用方式与QToolBar类似。我们创建一个dock小部件作为主窗口的子窗口,并添加widget作为dock小部件的子窗口:

    contentsWindow = new QDockWidget(tr("Table of Contents"), this);
    contentsWindow->setAllowedAreas(Qt::LeftDockWidgetArea
                                  | Qt::RightDockWidgetArea);
    addDockWidget(Qt::LeftDockWidgetArea, contentsWindow);

    headingList = new QListWidget(contentsWindow);
    contentsWindow->setWidget(headingList);

在本例中,dock小部件只能放置在左侧和右侧dock区域中,并且它最初被放置在左侧dock区域中。
QMainWindow API允许程序员自定义哪个停靠小部件区域占据停靠小部件区域的四个角。如果需要,可以使用QMainWindow::setCorner()函数更改默认值:

setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea);
setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea);
setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);

下图显示了由上述代码生成的配置。请注意,在此布局中,左侧和右侧的dock小部件将占据主窗口的顶部和底部角落。

设置完所有主窗口组件后,使用类似于以下的代码创建和安装中心小部件:

QWidget *centralWidget = new QWidget(this);
setCentralWidget(centralWidget);

Application Main Window | Qt Widgets 5.15.17

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

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

相关文章

springboot+vue+mybatis计算机毕业设计音乐播放系统+PPT+论文+讲解+售后

音乐播放系统的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品,体验高科技时代带给人们的方便,同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓,iOS相比较起来,音乐…

【JVM】JVM简介|运行流程|内存划分

目录 一、JVM简介 二、JVM运行流程 三、JVM运⾏时数据区(内存划分) 3.1 堆(线程共享) 3.2 栈 3.3 元数据区(方法区)(线程共享) 3.4 程序计数器(线程私有&#xff0…

【学习笔记】5G-A时代物联网应用及策略研究

摘要 海量物联网通信是5G典型应用场景之一,为了实现蜂窝网的全场景物联能力,需要更多的场景化技术,5G-A引入了RedCap(5G Reduced Capability)和Passive IoT。其中,RedCap降低了设备复杂性及成本&#xff0…

js混淆保护在线工具开源项目大全

具体前往:js代码混淆加密保护工具&开源项目大全

指针复习--(笔记整理)

之前出的有指针合集在博客,最近要备考计算机二级,所以复习了一下,有一些容易遗忘的点整理了一下,大家可以有针对性的看一看,后续刷二级真题的时候也会进行题目代练,可以下收藏起来。记得先赞,祝…

力扣96-不同的二叉搜索树(Java详细题解)

题目链接:96. 不同的二叉搜索树 - 力扣(LeetCode) 前情提要: 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 dp五部曲。 1.确定dp数组和i下标的含义。 2.确定递推公式。 3.dp初始化。 4.确定dp的遍历顺序。 …

高并发内存池(一):项目介绍与定长内存池的实现

目录​​​​​​​ 项目介绍 池化技术 内存池 内存碎片 malloc工作原理 定长内存池 申请内存 释放内存 定位new VirtualAlloc函数 封装VirtualAlloc 定长内存池的最终代码 项目介绍 项目原型:goole的开源项目tcmalloc(Thread-Caching Mal…

一种极简的余弦定理证明方法

余弦定理的证明方法有很多种,这里介绍一种极简的证明方法。该方法是本人在工作中推导公式,无意中发现的。证明非常简单,下面简单做下记录。   如上图为任意三角形ABC,以点C为原点,建立直角坐标系(x轴方向…

【网络编程通关之路】 Udp 基础回显服务器(Java实现)及你不知道知识原理详解 ! ! !

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人…

vue3中ref自动解包

1.模板中使用 ref 类型的数据&#xff0c;会自动解包&#xff0c;注意需要是顶级的ref <template> <!-- 自动解包--><div>{{ name }}</div> </template><script setup> import { ref} from vue const name ref(hello) </script>下…

com.alibaba.fastjson.JSONArray循环引用导致{“$ref“:“$[0]“}

发一个库存~ 在for循环中将对象add到.JSONArray中&#xff0c;arr.toJSONString()&#xff0c;输出的结果如下&#xff1a; [{"sex":"男","age":"10","name":"张三"},{"$ref":"$[0]"},{&quo…

Java synchronized 原理

Synchronized使用 synchronized关键字可使用在方法上或代码块上表示一段同步代码块&#xff1a; public class SyncTest {public void syncBlock(){synchronized (this){System.out.println("hello block");}}public synchronized void syncMethod(){System.out.pr…

小白入门LLM大模型最牛X教程------上交《动手学大模型应用开发》!

本项目是一个面向小白开发者的大模型应用开发教程&#xff0c;旨在结合个人知识库助手项目&#xff0c;通过一个课程完成大模型开发的重点入门&#xff0c;涵盖了大模型应用开发的方方面面&#xff0c;主要包括&#xff1a; 教程一共有七章内容&#xff1a; 《动手学大模型》…

13.5 告警静默

本节重点介绍 : 静默应用场景页面创建api接口创建查看 静默 作用 先告警后静默&#xff1a;持续发送的告警停止发送先配置静默&#xff1a;上线或者运维操作会导致触发一大波告警&#xff0c;提前创建静默消息。防止告警风暴 静默接口 /api/v2/silences 调用静默的代码 …

Leetcode8.字符串转换整数 -codetop

代码&#xff08;首刷看解析 2024年9月5日&#xff09; class Solution { public:int myAtoi(string str) {unsigned long len str.length();// 去除前导空格int index 0;while (index < len) {if (str[index] ! ) {break;}index;}if (index len) {return 0;}int sign …

idea插件开发之bean复制插件

背景 周末在家无事做&#xff0c;顺手开发了一个之前一直想要做的插件&#xff0c;那就是bean复制插件。 在项目中&#xff0c;由于代码分层设计&#xff0c;对于同样一个数据我们通常会定义不同层的实体&#xff0c;例如xxxEntity、xxxDTO、xxxVO等&#xff0c;这些不同的实…

echarts地图绘制并实现下钻功能

本文参考网址 使用echarts地图需要先准备好echarts地图渲染需要的json数据&#xff0c;数据可以从阿里云地址中下载自己需要的&#xff0c;下载之后直接引入即可使用&#xff0c;本文针对全国地图做一个简单的demo 阿里云界面如图 // 1、准备echarts地图容器<div class&…

如何借助AI快速筛选和整理文献?

AIPaperGPT&#xff0c;论文写作神器~ https://www.aipapergpt.com/ 在撰写毕业论文时&#xff0c;文献综述是必不可少的部分。它不仅为你的研究提供理论背景&#xff0c;还展示了你对研究领域的深入理解。然而&#xff0c;文献综述的撰写过程常常让学生感到头疼&#xff0c;…

基于JAVA+SpringBoot+Vue的大学校园回忆录系统

基于JAVASpringBootVue的大学校园回忆录系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; …

ElasticSearch-聚合操作

聚合的分类 aggsMetric Aggregation min, max, avg, sumstats, cardinality Bucket Aggregation terms ordertext -> fielddatarangehistogramtop_hits Pipeline Aggregation min_bucketstats_bucketpercentiles_bucketcumulative_sum 聚合的作用范围 Filter, Post Filter,…