一、简介:

1、QMainFrame类提供了应用程序的主窗口,因为它可以添加菜单、工具条、状态栏和停靠窗口,同时也支持单文档窗口和多文档窗口,这是它和其他窗口不一样的地方。

2、QMainFrame窗口必须添加中心组件,即调用setCentralWidget (self, QWidget widget)函数添加中心组件,否则该窗口无法正常显示。

二、添加菜单:

QMainFrame内部有一个QMenuBar属性,通过self.menuBar()获取,要添加菜单,就是在这个属性中添加

代码:

menuFile=self.menuBar().addMenu('文件')

action=QAction()

menuFile.addAction(action)

如果要添加自定义的菜单,可以调用setMenuBar (self, QMenuBar menubar)、setMenuWidget (self, QWidget menubar)两个函数添加,此时,窗口自带的菜单控件会被替换成自定义菜单控件。

三、添加工具栏:

由于窗口可以拥有多个工具栏,因此窗口提供了

  • addToolBar (self, Qt.ToolBarArea area, QToolBar toolbar)
  • addToolBar (self, QToolBar toolbar)
  • QToolBar addToolBar (self, QString title)

三个函数添加工具栏,这些函数返回一个QToolBar对象,调用addAction()添加工具栏项目。

Qt.ToolBarArea:

Constant Value
Qt.LeftToolBarArea 0x1
Qt.RightToolBarArea 0x2
Qt.TopToolBarArea 0x4
Qt.BottomToolBarArea 0x8
Qt.AllToolBarAreas ToolBarArea_Mask
Qt.NoToolBarArea 0

默认情况下,多个工具条是一行显示,函数QMainWindow.addToolBarBreak (self, Qt.ToolBarArea area = Qt.TopToolBarArea)可以使工具栏段行显示。

四、添加状态栏:

setStatusBar (self, QStatusBar statusbar) 构造一个QStatusBar,通过该函数添加状态栏

五、添加停靠窗口:

  • addDockWidget (self, Qt.DockWidgetArea area, QDockWidget dockwidget)
  • addDockWidget (self, Qt.DockWidgetArea area, QDockWidget dockwidget, Qt.Orientation orientation)

参数二Qt.DockWidgetArea表示停靠的位置,有六个值

Qt.LeftDockWidgetArea 0x1
Qt.RightDockWidgetArea 0x2
Qt.TopDockWidgetArea 0x4
Qt.BottomDockWidgetArea 0x8
Qt.AllDockWidgetAreas DockWidgetArea_Mask
Qt.NoDockWidgetArea 0

参数三表示水平还是垂直停靠:Qt.Horizontal Qt.Vertical

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

六、保存状态与恢复状态:

saveState()与restoreState():

在某些情况,我们想暂时的改变窗口的布局,在另外一种情况下又想恢复原始状态,此时这两个函数就用上了。

保存状态时保存主窗口停靠面板,状态栏、工具栏等位置信息,比如pycharm软件里有恢复默认窗口可能会用到这两个函数。

七、其他函数:

1.virtual QMenu *QMainWindow::createPopupMenu() 该函数

该函数用于创建上下文菜单。上下文菜单即右键点击主菜单、工具栏或者停靠窗口所生成的菜单,该菜单的菜单项可用于设置是否显示当前已经存在的工具条和停靠窗口。
该函数是虚函数,可重写以改变右键点击后出现的菜单。重写的时候,将函数内重生成的菜单返回出来,即可覆盖默认的上下文菜单。

2.void setIconSize(const QSize &iconSize)

该函数用于设置工具栏上图标的尺寸,由于工具栏图标尺寸只能比图标实际尺寸小或者相等,不能放大图标,因此该函数设定的图标尺寸不能大于图标的实际尺寸。

3.void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle)

该函数设置工具栏上按钮的样式

Constant Value Description
Qt::ToolButtonIconOnly 0 Only display the icon.
Qt::ToolButtonTextOnly 1 Only display the text.
Qt::ToolButtonTextBesideIcon 2 The text appears beside the icon.
Qt::ToolButtonTextUnderIcon 3 The text appears under the icon.
Qt::ToolButtonFollowStyle 4 Follow the style.

4.setWindowIcon(const QIcon &) 设置窗口的图标

5.setIconSize(&QSize) 设置窗口图标尺寸

QMainFrame类的更多相关文章

  1. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  2. C++ 可配置的类工厂

    项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...

  3. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  4. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  5. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  6. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  7. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  8. PHP-解析验证码类--学习笔记

    1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1  定义变量 //随机因子 private $char ...

  9. C# 多种方式发送邮件(附帮助类)

    因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...

随机推荐

  1. KVM和QEMU的关系(转载)

    From:http://blog.sina.com.cn/s/blog_605f5b4f0102uyjv.html KVM是一种基于CPU硬件辅助的全虚拟化技术,没有CPU硬件虚拟化的支持,KVM无法 ...

  2. Hadoop学习笔记(二)——zookeeper使用和分析

    分布式架构是中心化的设计.就是一个主控机连接多个处理节点,因此保证主控机高可用性十分关键.分布式锁是解决该问题的较好方案,多主控机抢一把锁.Zookeeper就是一套分布式锁管理系统,用于高可靠的维护 ...

  3. 简洁的一键SSH脚本

    这里发一个自己图省事搞的一个批量打通SSH的脚本,可能对于好多朋友也是实用的,是expect+python的一个组合实现,原理非常easy, 使用起来也不复杂,在此还是简单贴出来说说. noscp.e ...

  4. ios 动画 创建一个UIImageView并将其属性设置animationImages为UIImages 的数组

    NSArray *animationFrames = [NSArray arrayWithObjects: [UIImage imageWithName:@"image1.png" ...

  5. Android 适配(drawable文件夹)图片适配(二)

    参考自(https://blog.csdn.net/myoungmeng/article/details/54090891) Android资源文件存放: android的drawable文件一共可以 ...

  6. 1. lvs+keepalived 高可用群集

    一. keepalived 工具介绍 1.专为lvs 和HA 设计的一款健康检查工具 2.支持故障自动切换 3.支持节点健康状态检查 二.  keepalived 实现原理剖析 keepalived ...

  7. Eight(经典题,八数码)

    Eight Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  8. 详解Maven项目利用java service wrapper将Java程序生成Windows服务

    在项目的开发中,有时候需要将Java应用程序打包成Windows服务,我们就直接可以通过windows的服务来启动和关闭java程序了. 本博文将通过有两种方法实现该功能,手动创建法和Maven自动打 ...

  9. 九度OJ 1350:二叉树的深度 (二叉树)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1044 解决:614 题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长 ...

  10. zookeeper snowflake 实战

    目录 写在前面 1.1.1. 集群节点的命名服务 1.1.2. snowflake 的ID算法改造 SnowFlake算法的优点: SnowFlake算法的缺点: 写在最后 疯狂创客圈 亿级流量 高并 ...