Qt Widget之QMainWindow

news2025/1/8 5:17:49

 

目录

一 QMainWindow整体概况

二 菜单栏

三 工具栏

四 状态栏

五 铆接部件

六 核心部件

七 总体效果


一 QMainWindow整体概况

QMainWindow是主窗口程序,由以下几个部分构成:菜单栏,状态栏,工具栏,铆接部件和核心部件。

其中菜单栏,核心部件,状态栏有且只有一个。铆接部件和工具栏可以有多个

他们大体的布局是这样子的

接下来我们分别从五个部件来进行讲解,介绍一下基本操作以及了解了这些操作之后,我们如何创建一个主窗口。

二 菜单栏

创建一个菜单栏的话,我们需要:创建一个QMenuBar的对象,并且把这个对象设置到窗口上,此时是不可见的,除非我们添加了对应的文本才能看见。就是三步:创建,设置,添加文本。

创建好了菜单栏之后我们设置对应的菜单选项。addMenu

如果还想有下拉的选项,就对之前设置的菜单选项进行addAction操作

还有一些其他的操作:比如添加分隔符 

//菜单栏
    QMenuBar* menubar=new QMenuBar();//创建一个菜单栏的对象
    setMenuBar(menubar);//绑定到窗口上
    QMenu* file=menubar->addMenu("文件(F)");
    menubar->addSeparator();//添加分隔符
    QMenu* edit=menubar->addMenu("编辑(E)");//添加菜单栏
    file->addAction("New Project");//添加菜单栏对应的选项
    file->addAction("new file");
    edit->addAction("撤销");

最后呈现的效果就是这样的

三 工具栏

工具栏可以有多个,大体的思路也是要先创建出来,并且添加上去。由于工具栏可以有多个,因此使用的是add而不是set

之后就可以对菜单栏进行设置内容,设置分隔符,设置移动,甚至可以添加控件的操作了

关于设置移动:setFloatable是允许移动 

addToolBar操作的时候,我这里进行的第一个操作是默认这个工具栏被创建的时候是放在左侧的

setMovable相当于一个总开关,如果被设置成false,那么其他的关于移动的操作就没有意义了

//工具栏 可以有多个
    QToolBar*toolbar=new QToolBar(this);//绑定到对象树上
    addToolBar(Qt::LeftToolBarArea,toolbar);//类比菜单
    toolbar->addAction("欢迎");//设置内容
    toolbar->addSeparator();
    toolbar->addAction("编辑");//添加控件
    QPushButton* b=new QPushButton("button");
    toolbar->addWidget(b);//设置移动
    toolbar->setFloatable(true);
    toolbar->setMovable(true);//总开关

四 状态栏

只允许有一个,和菜单栏是类似的操作。

我们可以添加控件,还可以自动设置位置

//状态栏 只允许有一个
    QStatusBar* statusbar=new QStatusBar(this);
    setStatusBar(statusbar);//和菜单栏的创建和设置一样
    QLabel*left_label=new QLabel("left");//添加控件
    statusbar->addWidget(left_label);//添加在左侧
    QLabel*right_laber=new QLabel("right");
    statusbar->addPermanentWidget(right_laber);//添加在右侧

五 铆接部件

这个设置是和之前的操作差不多的,对应的宏可以指定允许停靠的区域

//铆接部件 可以有多个
    QDockWidget* dockwidget=new QDockWidget("float",this);
    addDockWidget(Qt::BottomDockWidgetArea,dockwidget);//设置停靠区域(默认的
    dockwidget->setAllowedAreas(Qt::BottomDockWidgetArea|Qt::TopDockWidgetArea);//设置允许停靠的区域

六 核心部件

核心部件相当于我们平时的编辑的主页面,输入内容的东西

//核心部件
    QTextEdit* testedit=new QTextEdit();
    setCentralWidget(testedit);

七 总体效果

最后完成上述几个部分之后,是这样子的一个呈现结果

 

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

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

相关文章

Nginx优化服务和防盗链

Nginx优化服务和防盗链一、长连接1、修改主配置文件2、测试3、在主配置文件添加4、验证二、Nginx第三方模块1、开源的echo模块2、查看是否成功3、加echo模块步骤4、网页测试验证三、搭建虚拟主机1、编译安装好nginx后,对主配置文件进行修改2、创建文件3、验证四、防…

Android 源码中的 JNI,到底是如何使用的?

Linux下 JNI的使用学习 Android 其中涉及对 JNI 的使用;JNI的使用对于 Android 来说又是十分的重要和关键。那么到底 Java 到底是如何调用 C/C 的,下面是非常简单的计算器源码,只是用来熟悉JNI的基本语法,其中我自己碰到过的一个问…

Unity 使用L2Localization实现App切换多国语言

Unity 使用 L2 Localization实现App切换多国语言一、L2 Localization介绍二、使用步骤1.导入插件,新建Language和Term2.开始使用,切换语言总结提示:以下是本篇文章正文内容,会提供自己的插件下载地址 一、L2 Localization介绍 这…

day24_多线程进阶

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、线程安全的集合 三、死锁 四、线程通信 五、生产者消费者 六、线程池 零、 复习昨日 创建线程的几种方式 1) 继承 2) 实现Runnable 3) calla…

【jeecg】vue-cli-service不是内部或外部命令,也不是可运行的程序

npm run serve时,报错 vue-cli-service不是内部或外部命令,也不是可运行的程序 参考该链接 ,找到生成的log文件, 在log文件里看到了C盘的地址 找到这个地址,发现里面有 我之前下载的yarn (原来下在了这里)没…

微服务一 实用篇 - 4.1 RabbitMQ部署

《微服务一 实用篇 - 4.1 RabbitMQ部署》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《微服务一 实用篇 - 4.1 RabbitMQ部署》《微服务一 实用篇 - 4.1 RabbitMQ部署》RabbitMQ部署指南1.单机部署1.1.下载镜像1.2.安装MQ2.集群部署2.1.集群分类2.2.设…

B - Build Roads (最小生成树 + 打表)

https://vjudge.net/problem/Gym-103118B/origin 在猫的国度里,有n个城市。猫国国王想要修n -1条路来连接所有的城市。第i市有一家ai经验价值的建筑公司。要在第i市和第j市之间修建公路,两个城市的建筑公司需要相互合作。但是,在修路的过程中…

Windows安装VMware+创建Linux虚拟机

目录1:简介2:功能特点3:VM下载地址4:安装VMware5:下载iso虚拟机镜像6:创建Linux虚拟机7:配置静态ip1:简介 VMware Workstation Pro(曾用名VMware Workstation&#xff09…

供应商绩效管理指南:挑战、考核指标与管理工具

管理和优化供应商绩效既关键又具有挑战性。要知道价格并不是一切,如果你的供应商在商定的价格范围内向你开具发票,但服务达不到标准或货物不合格,你也无法达到节约成本的目标。 供应商绩效管理可以深入了解供应商可能带来的风险&#xff0c…

SpringCloud之认识微服务

文章目录一、传统项目转型二、走进 SpringCloud三、微服务项目搭建3.1 创建一个 SpringBoot 项目3.2 创建三个 Maven 子工程3.3 为子工程创建 application.yml3.4 引入依赖3.5 数据库 建库建表3.6 编写业务提示:以下是本篇文章正文内容,SpringCloud系列学…

Vim笔记

文章目录VIM四种模式命令模式编辑模式末行模式可视化模式扩展内容VIM四种模式 1、命令模式 2、编辑模式 3、末行模式 4、可视化模式 5、VIM四种模式的关系 命令模式 1、命令模式下我们能做什么:① 移动光标 ② 复制 粘贴 ③ 剪切 粘贴 删除 ④ 撤销与恢复 2、进…

【分布式】分布式唯一 ID 的 8 种生成方案

文章目录前言正文什么是分布式ID?分布式ID的特性?分布式ID的生成方案1. UUID2. 数据库自增ID3. 批量生成ID4. Redis生成ID5. Twitter的snowflake算法6. 百度UidGenerator7. 美团Leaf8.滴滴(Tinyid)小结前言 在互联网的业务系统中…

Leaflet基础入门教程(一)

leaflet是一个前端的轻量的gis框架,为什么说它轻量呢。因为相比于传统的“庞大的”GIS框架比如openlayers和mapbox,leaflet不仅代码体积小,而且API构成也极为简单。是GIS行业小白入门级别学习的最好的框架,没有之一。 那么话不多说我们首先来学习一下如何使用leaflet搭建一…

Vue3中hook的使用及使用中遇到的坑

目录前言一,什么是hook二, hook函数的使用2.1 铺垫2.2 hook函数的写法2.3 使用写好的hook函数后记前言 在学习Es6的时候,我们开始使用类与对象,开始模块化管理;在Vue中我们可以使用mixin进行模块化管理;Vu…

2023-03-03干活小计

今天见识了 归一化的重要性:归一化 不容易爆炸 深度了解了学习率:其实很多操作 最后的结果都是改变了lr 以房价预测为例:一个点一个点更新 比较 矩阵的更新: 为什么小批量梯度下降 优于随机梯度下降 优于批量梯度下降&#xff…

Kubernetes 中 Deployment 使用

Deployment的使用 之前我们了解了Replication Controller和Replica Set两种资源对象,RC和RS的功能基本上是差不多的,唯一的区别就是RS支持集合的selector。也了解到了用RC/RS来控制Pod副本的数量,也实现了滚动升级Pod的功能。现在看上去似乎…

【面试题】前端路由分类

0. 前言 在Web开发中,路由是指根据用户请求的URL地址,确定用户访问的页面资源、参数等,是前端开发中不可缺少的重要部分。Vue router中提供了两种路由模式,一种是hash模式,另一种是history模式。 1. Hash模式路由 H…

爆款升级!新系列南卡Neo最强旗舰杀到,业内首款无线充骨传导耳机!

中国专业骨传导耳机品牌NANK南卡于近日发布了全新南卡Neo骨传导运动耳机,打造一款佩戴最舒适、音质体验最好的骨传导耳机。推出第2代声学響科技技术,提供更优质的开放式骨传导听音体验,透过不一样的音质体验,打造更好的骨传导耳机…

MySQL基础(二)排序与分页、多表查询、单行函数

上接 MySQL基础(一)SQL分类、导入、SELECT语句,运算符_独憩的博客-CSDN博客 目录 排序与分页 排序 二级排序 分页 多表查询 基础多表查询 等值连接vs非等值连接 自连接vs非自连接 内连接vs外连接 自然连接 单行函数 数值函数 …

信息系统基本知识(四)新技术

大纲 信息系统与信息化信息系统开发方法常规信息系统集成技术软件工程新一代信息技术信息系统安全技术信息化发展与应用信息系统服务管理信息系统服务规划企业首席信息管及其责任 1.5 新一代技术 1.5.1 物联网 概念:(The Internet of Things&#xf…