5、 QT基础——QMainWindow

简介: 5、 QT基础——QMainWindow

QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等。


tt.png5.1 菜单栏

一个主窗口最多只有一个菜单栏。位于主窗口顶部、主窗口标题栏下面。


创建菜单栏,通过QMainWindow类的menubar()函数获取主窗口菜单栏指针

QMenuBar *    menuBar() const


创建菜单,调用QMenu的成员函数addMenu来添加菜单

QAction* addMenu(QMenu * menu)


QMenu* addMenu(const QString & title)


QMenu* addMenu(const QIcon & icon, const QString & title)


创建菜单项,调用QMenu的成员函数addAction来添加菜单项

QAction* activeAction() const


QAction* addAction(const QString & text)


QAction* addAction(const QIcon & icon, const QString & text)


QAction* addAction(const QString & text, const QObject * receiver,


const char * member, const QKeySequence & shortcut = 0)


QAction* addAction(const QIcon & icon, const QString & text,


const QObject * receiver, const char * member,


const QKeySequence & shortcut = 0)


Qt 并没有专门的菜单项类,只是使用一个QAction类,抽象出公共的动作。当我们把QAction对象添加到菜单,就显示成一个菜单项,添加到工具栏,就显示成一个工具按钮。用户可以通过点击菜单项、点击工具栏按钮、点击快捷键来激活这个动作。


5.2 工具栏

主窗口的工具栏上可以有多个工具条,通常采用一个菜单对应一个工具条的的方式,也可根据需要进行工具条的划分。


直接调用QMainWindow类的addToolBar()函数获取主窗口的工具条对象,每增加一个工具条都需要调用一次该函数。

插入属于工具条的动作,即在工具条上添加操作。

通过QToolBar类的addAction函数添加。


工具条是一个可移动的窗口,它的停靠区域由QToolBar的allowAreas决定,包括:

Qt::LeftToolBarArea      停靠在左侧

Qt::RightToolBarArea     停靠在右侧

Qt::TopToolBarArea       停靠在顶部

Qt::BottomToolBarArea   停靠在底部

Qt::AllToolBarAreas      以上四个位置都可停靠

使用setAllowedAreas()函数指定停靠区域:


setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea)


使用setMoveable()函数设定工具栏的可移动性:


setMoveable(false)//工具条不可移动, 只能停靠在初始化的位置上


5.3 状态栏

派生自QWidget类,使用方法与QWidget类似,QStatusBar类常用成员函数:

状态栏也只能最多有一个

//添加小部件


void addWidget(QWidget * widget, int stretch = 0)


//插入小部件


int    insertWidget(int index, QWidget * widget, int stretch = 0)


//删除小部件


void removeWidget(QWidget * widget)



5.4 铆接部件

铆接部件 QDockWidget,也称浮动窗口,可以有多个。


QDockWidget * dock = new QDockWidget("标题",this);


   addDockWidget(Qt::LeftDockWidgetArea,dock);


dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::TopDockWidgetArea);  设置区域范围


5.5 核心部件(中心部件)

除了以上几个部件,中心显示的部件都可以作为核心部件,例如一个记事本文件,可以利用QTextEdit做核心部件


QTextEdit * edit = new QTextEdit(this);


   setCentralWidget(edit);


5.6 资源文件

Qt 资源系统是一个跨平台的资源机制,用于将程序运行时所需要的资源以二进制的形式存储于可执行文件内部。如果你的程序需要加载特定的资源(图标、文本翻译等),那么,将其放置在资源文件中,就再也不需要担心这些文件的丢失。也就是说,如果你将资源以资源文件形式存储,它是会编译到可执行文件内部。


使用 Qt Creator 可以很方便地创建资源文件。我们可以在工程上点右键,选择“添加新文件…”,可以在 Qt 分类下找到“Qt 资源文件”:

tt.png

点击“选择…”按钮,打开“新建 Qt 资源文件”对话框。在这里我们输入资源文件的名字和路径:

tt.png

点击下一步,选择所需要的版本控制系统,然后直接选择完成。我们可以在 Qt Creator 的左侧文件列表中看到“资源文件”一项,也就是我们新创建的资源文件:

tt.png

右侧的编辑区有个“添加”,我们首先需要添加前缀,比如我们将前缀取名为 images。然后选中这个前缀,继续点击添加文件,可以找到我们所需添加的文件。这里,我们选择 document-open.png 文件。当我们完成操作之后,Qt Creator 应该是这样子的:

tt.png

接下来,我们还可以添加另外的前缀或者另外的文件。这取决于你的需要。当我们添加完成之后,我们可以像前面一章讲解的那样,通过使用 : 开头的路径来找到这个文件。比如,我们的前缀是 /images,文件是 document-open.png,那么就可以使用:/images/document-open.png找到这个文件。


这么做带来的一个问题是,如果以后我们要更改文件名,比如将 docuemnt-open.png 改成 docopen.png,那么,所有使用了这个名字的路径都需要修改。所以,更好的办法是,我们给这个文件去一个“别名”,以后就以这个别名来引用这个文件。具体做法是,选中这个文件,添加别名信息:

tt.png

这样,我们可以直接使用:/images/doc-open引用到这个资源,无需关心图片的真实文件名。


如果我们使用文本编辑器打开 res.qrc 文件,就会看到一下内容:


<RCC>


            <qresource prefix="/images">


                <file alias="doc-open">document-open.png</file>


            </qresource>


            <qresource prefix="/images/fr" lang="fr">


                <file alias="doc-open">document-open-fr.png</file>


            </qresource>


</RCC>


我们可以对比一下,看看 Qt Creator 帮我们生成的是怎样的 qrc 文件。当我们编译工程之后,我们可以在构建目录中找到 qrc_res.cpp 文件,这就是 Qt 将我们的资源编译成了 C++ 代码。





tt.png

目录
相关文章
|
7月前
|
存储 C++
14 QT - QMainWindow
14 QT - QMainWindow
30 0
|
1月前
Qt6学习笔记三(QMainWindow、菜单栏、工具栏、状态栏、铆接部件、核心部件)
Qt6学习笔记三(QMainWindow、菜单栏、工具栏、状态栏、铆接部件、核心部件)
80 0
|
1月前
|
存储
QT基础入门——QMainWindow与对话框QDialog(三)
QT基础入门——QMainWindow与对话框QDialog(三)
91 0
QT基础入门——QMainWindow与对话框QDialog(三)
|
1月前
|
容器
QT基础教学(QMainWindow)
QT基础教学(QMainWindow)
48 0
|
10月前
|
存储 C++
QT基础教程之四QMainWindow
QT基础教程之四QMainWindow
|
存储 C++
C/C++ Qt 基础通用组件的应用
QT 是一个跨平台C++图形界面开发库,利用QT可以快速开发跨平台窗体应用程序,在QT中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率。
320 0
C/C++ Qt 基础通用组件的应用
|
JavaScript 大数据
Qt+ECharts开发笔记(五):ECharts的动态排序柱状图介绍、基础使用和Qt封装Demo
上一篇的demo使用隐藏js代码的方式,实现了一个饼图的基本交互方式,并预留了Qt模块对外的基础接口。   本篇的demo实现了自动排序的柱状图,实现了一个自动排序柱状图的基本交互方式,即Qt调用js脚本操作html。   本篇demo使用Qt定时器方式,实现数据定时刷新自增,并预留出了定时器间隔参数。   像大数据网页常看的人口增长时间图,收入年度增长时间图等都是这一类。
Qt+ECharts开发笔记(五):ECharts的动态排序柱状图介绍、基础使用和Qt封装Demo
|
JavaScript
Qt+ECharts开发笔记(四):ECharts的饼图介绍、基础使用和Qt封装百分比图Demo
前一篇介绍了横向柱图图。本篇将介绍基础饼图使用,并将其封装一层Qt。本篇的demo使用隐藏js代码的方式,实现了一个饼图的基本交互方式,并预留了Qt模块对外的基础接口。
Qt+ECharts开发笔记(四):ECharts的饼图介绍、基础使用和Qt封装百分比图Demo
|
缓存 JavaScript 编译器
Qt+ECharts开发笔记(三):ECharts的柱状图介绍、基础使用和Qt封装Demo
上一篇成功是EChart随着Qt窗口变化而变化,本篇将开始正式介绍柱状图介绍、基础使用,并将其封装一层Qt。   本篇的demo实现了隐藏js代码的方式,实现了一个条形图的基本交互方式,即Qt调用js脚本操作html。
Qt+ECharts开发笔记(三):ECharts的柱状图介绍、基础使用和Qt封装Demo
|
Web App开发 数据可视化 JavaScript
Qt+ECharts开发笔记(一):ECharts介绍、下载和Qt调用ECharts基础柱状图Demo
使用Qt开发大数据可视化看板,基于Qt使用QWidget或者QML是很难达到ECharts大数据看板的效果,所以使用Qt来制作。
Qt+ECharts开发笔记(一):ECharts介绍、下载和Qt调用ECharts基础柱状图Demo