首页 > 其他分享 >QT学习之QMainWindow详解

QT学习之QMainWindow详解

时间:2023-01-15 18:07:39浏览次数:62  
标签:QMainWindow const QT 文件 工具条 部件 详解 添加 Qt


文章目录

  • ​​1、菜单栏​​
  • ​​2、工具栏​​
  • ​​3、状态栏​​
  • ​​4、铆接部件​​
  • ​​5、核心部件(中心部件)​​
  • ​​6、资源文件​​

有关QT的学习我们会采取连载更新,传送门:

​有C++基础如何直接上手QT?​​​​最适合新手的第一个Qt小程序​

今天更新内容为QMainWindow相关学习介绍。

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

QT学习之QMainWindow详解_开发语言

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对象添加到菜单,就显示成一个菜单项,添加到工具栏,就显示成一个工具按钮。用户可以通过点击菜单项、点击工具栏按钮、点击快捷键来激活这个动作。

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)//工具条不可移动, 只能停靠在初始化的位置上

3、状态栏

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

状态栏也只能最多有一个

//添加小部件
void addWidget(QWidget * widget, int stretch = 0)
//插入小部件
int insertWidget(int index, QWidget * widget, int stretch = 0)
//删除小部件
void removeWidget(QWidget * widget)

4、铆接部件

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

QDockWidget * dock = new QDockWidget("标题",this);
addDockWidget(Qt::LeftDockWidgetArea,dock);
dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea |
Qt::TopDockWidgetArea); 设置区域范围

5、核心部件(中心部件)

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

QTextEdit * edit = new QTextEdit(this);
setCentralWidget(edit);

6、资源文件

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

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

QT学习之QMainWindow详解_资源文件_02

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

QT学习之QMainWindow详解_资源文件_03

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

QT学习之QMainWindow详解_Qt_04

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

QT学习之QMainWindow详解_Qt_05

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

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

QT学习之QMainWindow详解_qt_06

这样,我们可以直接使用:/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++ 代码。


标签:QMainWindow,const,QT,文件,工具条,部件,详解,添加,Qt
From: https://blog.51cto.com/u_8238263/6008844

相关文章

  • [disruptor详解]01-disruptor原理
    ​​disruptor详解​​​​disruptorCpp-IPC​​disruptor原理使用循环队列,且要求队列大小为2的N次方,以满足位运算快速计算索引的要求(比取模速度快)使用原子变量记录生产者......
  • win10 vmware虚拟机蓝屏怎么办 win10 vmware虚拟机蓝屏解决方法【详解】
    原文地址:https://product.pconline.com.cn/itbk/software/dnyw/1562/15626723.html注:按照第一种方法已解决蓝屏问题最近有朋友出现win10vmware虚拟机蓝屏的情况应该怎么......
  • upload-labs通关详解
    upload-labs通关详解一、Pass-01查看源码,发现变量前有var,可以代码语言是JSsubstring():裁剪字符串lastIndexOf():返回某个子字符串在字符串中最后出现的位置varext_name=......
  • git add 命令详解
    1.前言2.gitadd基本操作3.gitadd命令参数4.gitadd背后做了什么1.前言众所周知,git中有工作区、暂存区、版本库三大组成部分工作区:电脑中能看到的目录,也就是......
  • git checkout 命令详解
    1.前言2.创建分支3.切换分支4.撤销更改1.前言gitcheckout命令用于创建、切换分支或恢复工作树文件。最常用的两种用法​​#切换分支​​​​gitcheckout<bra......
  • git merge 命令详解
    1.前言2.合并场景之Fast-forward(快速合并)3.合并场景之threewaymerge(三路合并之正常合并)4.合并场景之threewaymerge(三路合并之冲突合并)5.中止合并1.前言将......
  • git stash 命令详解
    1.应用场景2.添加储藏3.查看储藏4.删除储藏5.使用储藏6.常见用法1.应用场景gitstash命令用于将工作区中的更改和暂存区中的内容储存起来日常开发中,会经常遇到......
  • git switch 命令详解
    1.前言2.switch创建分支3.switch切换分支1.前言checkout命令具有 ​​分支的管理​​​ 和 ​​文件的恢复​​ 两个核心功能,功能较多、不够准确。在git2.23......
  • git clean 命令详解
    1.gitclean介绍2.gitclean使用3.clean和reset命令1.gitclean介绍gitclean命令用于删除工作目录中没有被tracked的文件这个命令很多人都不知道,也不去用它,而......
  • lsof命令详解
    说明​lsof是关于文件打开信息的标准输出工具输出标题COMMAND:进程的名称PID:进程标识符USER:进程所有者FD:文件描述符,应用程序通......