【Qt】QMainWindow应用程序窗口类简单介绍

news2024/9/20 20:38:52

QMainWindow介绍

QMainWindow是一个为用户提供主窗口程序的类,是许多应用程序的基础,包含的组件有:

  • 菜单栏QMenuBar,一个主窗口最多只能有一个菜单栏;包含一个下拉菜单项的列表,这些菜单项由QAction动作类实现,位于主窗口的顶部。

    •     QMenuBar *menubar = menuBar();  // 创建一个菜单栏,主窗口最多只能有一个菜单栏
      
          // 创建菜单 File
          QMenu *fileMenu = menubar->addMenu(tr("&File"));
          // 创建菜单项
          QAction *newAction = fileMenu->addAction(tr("&New"));
          fileMenu->addSeparator();  // 添加分隔线
          // 将菜单栏放入窗口中
          setMenuBar(menubar);
      
  • 工具栏QToolBar,一个主窗口可以有多个工具栏;工具栏一般用于显示一些常用的菜单项目,也可以插入其它窗口部件,可以移动。

    •     // 创建工具栏
          QToolBar *toolbar = new QToolBar(this);
          // 设置只允许左右停靠
      //    toolbar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
          // 设置浮动操作
          toolbar->setFloatable(false);
          // 设置移动,如果设置为false表示工具栏不会再移动,是固定的
      //    toolbar->setMovable(false);
          //addToolBar(toolbar);  // 工具栏放入窗口中
          addToolBar(Qt::ToolBarArea::TopToolBarArea,toolbar);  // 设置工具栏在窗口的左侧
      
          // 在工具栏中添加动作
          toolbar->addAction(newAction);
          toolbar->addSeparator();
      
          // 工具栏中添加控件
          QPushButton *button = new QPushButton(tr("aaa"),this);
          toolbar->addWidget(button);
      
  • 中心部件Central Widget,一个主窗口只能有一个中心部件;在主窗口的中心区域可以放入一个窗口部件作为中心部件,是应用程序的主要功能实现区域。

    •     // 设置中心部件
          QTextEdit *textEdit = new QTextEdit(this);
          setCentralWidget(textEdit);  // 设置中心部件到窗口中
      
  • 锚接部件QDockWidget,一个主窗口可以有多个Dock部件;也被称为停靠窗口,可以停靠在中心部件的四周,用来防止一些部件实现一些功能,类似工具箱。

    •     QDockWidget *dockWidget = new QDockWidget(tr("Dock部件"),this);  // 创建dock控件
          addDockWidget(Qt::DockWidgetArea::BottomDockWidgetArea,dockWidget);  // dock控件放到窗口中
          // 设置停靠区域
          dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
      
  • 状态栏QStatusBar,一个主窗口只能有一个状态栏;用于显示程序的一些状态信息,在主窗口的最底部。

    •     // 创建状态栏
          QStatusBar *statusbar = statusBar();
          // 设置到窗口中
          setStatusBar(statusbar);
      
          // 放置QLabel控件到状态栏
          QLabel *label = new QLabel(tr("Ready1"),this);
          statusbar->addWidget(label);
      
          // 放置控件到右侧
          QLabel *label2 = new QLabel(tr("Ready2"),this);
          statusbar->addPermanentWidget(label2);  // 状态栏信息放到右侧
      

在这里插入图片描述

代码实现创建窗口的各个部件:

void MainWindow::createMenu()
{
    QMenuBar *menubar = menuBar();  // 创建一个菜单栏,主窗口最多只能有一个菜单栏

    // 创建菜单 File
    QMenu *fileMenu = menubar->addMenu(tr("&File"));
    // 创建菜单项
    QAction *newAction = fileMenu->addAction(tr("&New"));
    QAction *openAction =fileMenu->addAction(tr("&Open"));
    fileMenu->addSeparator();  // 添加分隔线
    QAction *saveAction =fileMenu->addAction(tr("&Save"));
    QAction *saveAsAction =fileMenu->addAction(tr("Save &As"));
    fileMenu->addSeparator();  // 添加分隔线
    QAction *exitAction =fileMenu->addAction(tr("&Exit"));
    connect(exitAction,&QAction::triggered,this,&MainWindow::close);

    // 创建菜单 Edit
    QMenu *editMenu = menubar->addMenu(tr("Edit"));
    // 创建菜单 About
    QMenu *aboutMenu = menubar->addMenu(tr("About"));

    // 将菜单栏放入窗口中
    setMenuBar(menubar);

    // 创建工具栏
    QToolBar *toolbar = new QToolBar(this);
    // 设置只允许左右停靠
    toolbar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
    // 设置浮动操作
    toolbar->setFloatable(false);
    // 设置移动,如果设置为false表示工具栏不会再移动,是固定的
//    toolbar->setMovable(false);
    //addToolBar(toolbar);  // 工具栏放入窗口中
    addToolBar(Qt::ToolBarArea::LeftToolBarArea,toolbar);  // 设置工具栏在窗口的左侧

    // 在工具栏中添加动作
    toolbar->addAction(newAction);
    toolbar->addAction(openAction);
    // 工具栏中添加控件
    QPushButton *button = new QPushButton(tr("aaa"),this);
    toolbar->addWidget(button);
}

void MainWindow::createStatusBar()
{
    // 创建状态栏
    QStatusBar *statusbar = statusBar();
    // 设置到窗口中
    setStatusBar(statusbar);

    // 放置QLabel控件到状态栏
    QLabel *label = new QLabel(tr("Ready1"),this);
    statusbar->addWidget(label);

    // 放置控件到右侧
    QLabel *label2 = new QLabel(tr("Ready2"),this);
    statusbar->addPermanentWidget(label2);  // 状态栏信息放到右侧

}

void MainWindow::createDockWidget()
{
    QDockWidget *dockWidget = new QDockWidget(tr("Dock部件"),this);  // 创建dock控件
    addDockWidget(Qt::DockWidgetArea::BottomDockWidgetArea,dockWidget);  // dock控件放到窗口中
    // 设置停靠区域
    dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);

}

void MainWindow::createCentralWidget()
{
    // 设置中心部件
    QTextEdit *textEdit = new QTextEdit(this);
    setCentralWidget(textEdit);  // 设置中心部件到窗口中
}

将部件设置到窗口中的函数一个容易记的方法,只能有一个的部件是set开头的,可以有多个的部件是add开头的。

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

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

相关文章

【git版本控制】| git版本控制操作命令(全)

文章目录一、简介二、工作模式1 集中式(CVS、SVN)2 分布式Git三、Git1 工作模式2 git工作流程3 工作区和版本库4 注意事项5 基本操作5.1 创建本地版本库5.2 初始化本地版本库5.3 .git目录的作用5.4 创建用户5.5 其他操作6 git分支7 常见警告8 免密登录9 …

interface接口--GO面向对象编程思想

一、interface接口 interface 是GO语言的基础特性之一。可以理解为一种类型的规范或者约定。它跟java,C# 不太一样,不需要显示说明实现了某个接口,它没有继承或子类或“implements”关键字,只是通过约定的形式,隐式的…

【C语言进阶】自定义类型:结构体,枚举,联合体

目录 1、结构体的声明 1.1 结构体基础知识 1.2 结构体的声明 1.3 特殊的声明 1.4 结构体的自引用 1.5 结构体变量的定义和初始化 1.6 结构体内存对齐 ​编辑1.7 修改默认对齐数 1.8 结构体传参 2. 位段 2.1 什么是位段 2.2 位段的内存分配 2.3 位段的跨平台问…

【owt-server】代码结构及新增一个agent

owt server 官方 5.0 仓库:代码结构 manage console manage api portal sip portal 与agent 并列 agent又有很多种类。 启动脚本 启动一个新的agent 比如streaming-agent streaming-agent )cd ${OWT_HOME}/s

分布式id

分布式id一 什么是分布式系统唯一ID二 分布式系统唯一ID的特点三 分布式系统唯一ID的实现方案3.1 基于UUID3.2 基于数据库自增id3.3 基于数据库集群模式3.4 基于Redis模式3.5 基于雪花算法(Snowflake)模式3.6 百度(uid-generator)…

Python爬虫数据到sqlite实例

参考链接:https://blog.csdn.net/qq_45775027/article/details/115319253最近需要使用到爬虫数据库,原文中作者有些没补齐,略作修改之后跑通了。主要修改:1.调整了数据获取的正则表达式;2. 改了一下数据库的table名和定义名字&…

基于Java+SpringBoot+vue+element实现前后端分离牙科诊所管理系统详细设计

基于JavaSpringBootvueelement实现前后端分离牙科诊所管理系统详细设计 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目…

【Linux】虚拟地址空间 --- 虚拟地址、空间布局、内存描述符、写时拷贝、页表…

该吃吃,该喝喝,遇事儿别往心上隔😎 文章目录一、虚拟地址空间1.虚拟地址的引出(看不到物理地址,只能看看虚拟地址喽)2.虚拟地址空间布局(五个段)3.感性理解一下虚拟地址空间&#xf…

【C++修炼之路】C++入门(上)

👑作者主页:进击的安度因 🏠学习社区:进击的安度因(个人社区) 📖专栏链接:C修炼之路 文章目录一、前言二、第一个 C 程序三、C 关键字(C98)四、命名空间1、命名空间的定义2、命名空间…

C++ Prime课后习题第一章编程

编程一个C程序&#xff0c;它显示您的姓名和地址。#include <iostream>int stonetolb(int); int main() {using namespace std;cout << "zzz ";cout << "闵行"<<endl;return 0; }编写一个程序&#xff0c;要求用户输入一个以long…

3台机器配置hadoop集群_Hadoop+Hbase 分布式集群架构

安装搭建Hadoop1、 配置说明本次集群搭建共三台机器&#xff0c;具体说明下&#xff1a;主机名IP说明nn01192.168.1.51DataNode、NodeManager、ResourceManager、NameNodedn01192.168.1.52DataNode、NodeManager、SecondaryNameNodedn02192.168.1.53DataNode、NodeManager2 、安…

基于浏览器的 PDF 编辑器:RAD PDF for ASP.NET

版本 3.34 改进的 PDF 收藏/投资组合支持和服务器 API 改进 Ω578867473功能更新 为更基本的 PDF 文件损坏/语法错误添加了更正添加了 PdfButtonField.NamedAction 属性添加了 PdfButtonField.IsNamedAction 属性添加 PdfButtonField() 构造函数 - PdfButtonFields 可以由服…

unity-常用组件实操案例

文章目录transform摄像机cameraskybox相机权重&#xff08;depth&#xff09;Audio sourcevideo playertransform 不但控制着组件的旋转、位置、缩放并且还控制着组件间的父子关系 using System; using System.Collections; using System.Collections.Generic; using UnityEn…

不锈钢企业如何利用APS排程软件提升管理效益?

保温杯一般是由陶瓷或不锈钢加上真空层做成的盛水容器&#xff0c;顶部有盖&#xff0c;密封严实&#xff0c;真空绝热层能使装在内部的水等液体延缓散热&#xff0c;以达到保温的目的。保温杯从保温瓶发展而来的&#xff0c;保温原理与保温瓶一样&#xff0c;只是人们为了方便…

Collection

面向对象语言对事物的体现都是以对象的形式&#xff0c;所以为了方便对多个对象的操作&#xff0c;就对对象进行存储&#xff0c;集合就是存储对象最常用的一种方式 数组和集合的不同&#xff1a; 数组长度是固定的&#xff1b;集合长度是可变的。 数组中可以存储基本数据类…

C#在控制台中打印进度条【同步和异步】

使用控制台打印进度条的简单方法。 有现成的IProgress接口进行操作&#xff1a; 实例&#xff1a; var prog new Progress<double>((theV > {Console.WriteLine($"Now the Progress&#xff1a;" COUNT / 10.0 * 100 "%" new string(#, COUN…

社科院与杜兰大学金融管理硕士---授人以鱼不如授人以渔,培养全新金融人才

古人云&#xff1a;“授人以鱼&#xff0c;三餐之需&#xff1b;授人以渔&#xff0c;终身之用”。都说职场入战场&#xff0c;一入职场就如履薄冰。走的每一步可能都影响着自己的职业生涯。在职场无烟的战争中&#xff0c;会慢慢发现差距一点点的被拉开了。金融是现代经济的血…

开发工具(二)基于Source Insight与Samba共享在windows中开发Linux工程

layout: post title: 开发工具&#xff08;二&#xff09;基于Source Insight与Samba共享在windows中开发Linux工程 description: 开发工具&#xff08;二&#xff09;基于Source Insight与Samba共享在windows中开发Linux工程 tag: 开发工具 文章目录资源共享流程说明Source In…

2023,让RFID固定资产管理系统助力企业降本增效

随着企业规模的不断扩大&#xff0c;企业的固定资产管理成为一个关键的问题。因为面临这不断增多的员工、固定资产种类和固定资产数量&#xff0c;企业管理者开始慢慢重视固定资产的管理&#xff0c;纷纷采取不同的方法加强对固定资产的管理。由于管理方法的不同&#xff0c;其…

C++ 智能指针 : auto_ptr 、unique_ptr、 shared_ptr、 weak_ptr

1、智能指针设计初衷&#xff1a; 智能指针实际是类&#xff0c;超过类的作用域后&#xff0c;析构函数会自动回收资源&#xff0c;为程序员管理申请的堆内存&#xff0c;避免内存泄漏 2、C 智能指针种类&#xff1a; auto_ptr &#xff08;C98 的⽅案&#xff0c;C11 已抛…