QT基础:QMainWindow学习小结
简述
普通的桌面应用程序有个共同的特性,有菜单栏、工具栏、状态栏、中央窗口等部件。菜单栏其实可以看成是一个窗口,菜单栏中的每一个菜单也可以看成一个窗口,每个部件基本都可以认为是一个窗口。那么这些典型的桌面应用可以认为是一些QWidget的组合,通过QWidget派生的方式也确实能够完成这样的窗口。
但是如果每次都自己去设计,重复这些工作,想想都有些麻烦,于是Qt帮我们实现这样的窗口,叫做QMainWindow,QMainWindow已经布置好菜单栏、工具栏、状态栏等窗口,我们只需要懂得如何去应用就行了。
QMainWindow的布局
QMainWindow类创建一个主应用程序的窗口,类似于MFC中中的单文档/多文档,其基本布局如下:
注:MenuBar是菜单栏,toolbars是工具栏,Dock Widgets是停口窗口,Central Widget是中央窗口,Status Bar是状态栏。中央窗口是必须的,即使它只是一个占位符也必须存在。
创建一个QMainWindow工程
初始化的QMainWindow窗口就具有以下控件:QMenuBar-菜单栏、QToolBar-工具栏、QStatusBar-状态栏
中央窗口
一个中央窗口是一个典型的QT部件,例如QTextEdit或者QGraphicsView,可以自定义部件用于高级应用。可以使用setCentralWidget()函数来设置中央窗口。
主窗口可以是一个单文档或者多文档界面,可以使用QMdiArea作为中心部件。
QMainWindow的中央窗口可以使用QMainWindow::CentralWidget来设置一个QWidget对象或者派生类对象作为主窗口的中央窗口。
QTextEdit * edit = new QTextEdit(this);
this->setCentralWidget(edit);
菜单
在Qt中菜单栏类是QMenuBar,它也是继承至QWidget,菜单栏是一个长条状窗口,可以是横向也可以是纵向的,菜单栏上可以布置菜单。这个大家好像都知道~
可以在QT Designer中添加,菜单栏的Action被点击时会发出triggered()信号,然后在代码中将之和槽函数连接起来,便实现了一个一个功能。
采用Qt Designer设计UI界面时,在编辑菜单时,输入菜单名称前面需要加"&",例如在菜单栏添加菜单"File"时,需要双击"在此处输入"的地方输入"&File",并且按下"Enter"键,这样才能保证File创建成功。
新建好后,在下面建立子菜单"New"
在"Action Editor"中右键,选择"转到槽"…
选择"triggered()"信号,点击[OK]…
通过QMainWindow::MenuBar() 来获取一个QMenuBar对象的指针, 如果该对象不存在, 就新建一个对象。
可以通过new一个QMenuBar对象,然后通过QMainWindow::setMenuBar来设置主窗口的菜单栏。
创建完菜单栏之后,就可以在菜单栏上面布置菜单了,菜单类叫作QMenu,QMenu也是继承至QWidget。
菜单中的诸如打开、保存、关闭等,都是一个个动作,在Qt里面对应的类是QAction,它不是窗口类,它是继承至QObject。可以使用QMenu::addAction来添加动作,QMenu::addAction有多个重载的函数,都是返回一个新建的QAction对象。
分隔符可以起到修饰的作用,使用QMenu::addSeparator()添加分割符号。
工具栏
工具栏类是QToolbar,QToolbar对象中可以布置一些QAction动作,QToolbar继承至QWidget,主窗口可以使用QMainWindow::addToolBar来添加工具栏。
采用Qt Designer设计UI界面时,在编辑工具栏时,现在"Action Editor"中新建Action,然后将新建好的Action拖动到Toolbar上面去即可。
状态栏
Qt中的状态栏类是QStatusBar,也是继承至QWidget,状态栏用来显示程序的运行状态,比如"就绪、编辑中"。
QStatusBar::showMessage函数可以用来设置状态栏的显示信息
ui->statusBar->setSizeGripEnabled(false);
);
停靠窗口
Qt中停靠窗口类为QDockWidget,QDockWidget继承至QWidget,这种窗口可以停靠在主窗口的停靠区域。
QDockWidget*dock= new QDockWidget("dock", this);
QTextEdit*edit= new QTextEdit("dock", dock);
dock->setWidget(edit);
this->addDockWidget(Qt::LeftDockWidgetArea, dock);
QT基础:QMainWindow学习小结的更多相关文章
- objective-c基础教程——学习小结
objective-c基础教程——学习小结 提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...
- JavaWeb基础—XML学习小结
一.概述 是什么? 指可扩展标记语言 能干什么? 传输和存储数据 怎么干? 需要自行定义标签. XML 独立于硬件.软件以及应用程序 通常.建立完xml文件后首要的任务是:引入约束文件! 二.XML简 ...
- JavaWeb基础—JS学习小结
JavaScript是一种运行在浏览器中的解释型的编程语言 推荐:菜鸟教程一.简介js:javascript是基于对象[哪些基本对象呢]和和事件驱动[哪些主要事件呢]的语言,应用在客户端(注意与面向对 ...
- JavaWeb基础—CSS学习小结
重点记忆:四种结合方式 三种基本选择器 1.CSS:层叠样式表 相当于皮肤 提高了可维护性.样式与内容分离(注释格式/* */) 2.CSS与HTML结合的四种方式:内联式.嵌入式.外部式 1.每个 ...
- 题解 P3870 【[TJOI2009]开关】/基础分块学习小结
直接进入正题: 分块: 分块分块,就是把一个长串东西,分为许多块,这样,我们就可以在操作一个区间的时候,对于在区间里面完整的块,直接操作块,不完整的直接操作即可,因为不完整,再加上一个块本身就不大,复 ...
- 学习nodejs部分基础内容入门小结
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Node.js 的包管理器 n ...
- 基于C/S架构的3D对战网络游戏C++框架_04客户端详细设计与OpenGL、Qt基础
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- 点滴的积累---J2SE学习小结
点滴的积累---J2SE学习小结 什么是J2SE J2SE就是Java2的标准版,主要用于桌面应用软件的编程:包括那些构成Java语言核心的类.比方:数据库连接.接口定义.输入/输出.网络编程. 学习 ...
- QT中QMainWindow、QWidget、QDialog
QT中QMainWindow.QWidget.QDialog 简述 在分享所有基础知识之前,很有必要在这里介绍下常用的窗口-QWidget.QDialog.QMainWindow. 熟悉Qt的同学都应 ...
随机推荐
- Cacti的库表结构-Data
cacti 的数据都是存放在rrdtool 中的,数据库存放的其实只是配置数据,cacti 的逻辑对象主要分为三种,data (数据).graph (图片).host (设备),这在它的表设计中也能很 ...
- PostgreSQL ALTER TABLE中改变数据类型时USING的用法<转>
在修改表字段类型的时候使用Using来进行显示的转换类型. 原文说明: SET DATA TYPE This form changes the type of a column of a table ...
- EF code First数据迁移学习笔记
准备工作 1.新建一个控制台项目, 在"程序包管理控制台"执行 Install-package EntityFramework //安装EF环境 2.在项目下新建类(Paper) ...
- 更快的方式实现 PHP 数组去重
概述 使用PHP的array_unique()函数允许你传递一个数组,然后移除重复的值,返回一个拥有唯一值的数组.这个函数大多数情况下都能工作得很好.但是,如果你尝试在一个大的数组里使用array_u ...
- webpack2--webpack 4.X 快速创建demo
准备工作 1.新建文件夹:webpack-demo(下面我们简称该文件夹为根目录),在根目录下面建两个文件夹,分别为src和dist. 1).src文件夹:用来存放我们编写的javascript代码, ...
- php 超时 解决办法 (Maximum execution time of 30 seconds exceeded)这个问题?
1. 修改是APACHE设置,在PHP.INI中找到一个参数: max_execution_time 将后面的值调大,然后重新启动APACHE服务(centos: service httpd rest ...
- android尺子的自定义view——RulerView
项目中用到自定义尺子的样式: 原代码在github上找的,地址:https://github.com/QQabby/HorizontalRuler 原效果为 因为跟自己要使用的view稍有不同 所以 ...
- keep or remove data frame columns in R
You should use either indexing or the subset function. For example : R> df <- data.frame(x=1:5 ...
- 路由策略和策略路由 & route-map
今天,这个专题应用下route-map,在这个之前,有很多内容需要掌握,不是简单的制定一个路由图就可以了. -------- 本次专题理论的东西居多,但是不是复制黏贴,是加上自己的理解思想. 第一个要 ...
- String直接赋值和使用new的区别
String str1 = "ABC"; String str2 = new String("ABC"); String str1 = “ABC”;可能创建一个 ...