Qt界面编程(四)—— QMainWindow(一个菜单栏、多个工具栏、多个停靠部件、一个状态栏、一个中心部件)、资源文件

这篇具有很好参考价值的文章主要介绍了Qt界面编程(四)—— QMainWindow(一个菜单栏、多个工具栏、多个停靠部件、一个状态栏、一个中心部件)、资源文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1. 菜单栏

2. 工具栏

3. 状态栏

4. 停靠部件(也称为铆接部件、浮动窗口)

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

6. 使用UI文件创建窗口

6.1 UI设计窗口介绍

6.2 菜单栏

6.2.1 添加/删除菜单栏

6.2.2 添加菜单

6.2.3 添加菜单项

6.2.4 添加多级菜单

6.3 工具栏

6.3.1 添加/删除工具栏

6.3.2 工具栏添加动作

6.4 状态栏 

6.5 停靠部件

6.6 核心部件

7. UI文件原理

8. UI文件下使用信号和槽

8.1 转到槽

8.2 信号槽编辑器

9. 资源文件


【上一篇】Qt界面编程(三)—— 父子关系、对象树、信号和槽(自定义信号和槽、Qt5与Qt4的写法)

 

        QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个停靠部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等。qt中嵌入winform界面混全编程,【C++成长之路】,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. 工具栏

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

  • 调用QMainWindowd对象的成员函数addToolBar(),该函数每次调用都会创建一个新的工具栏,并且返回该工具栏的指针。
  • 插入属于工具条的项,这时工具条上添加项也是用QAction。通过QToolBar类的addAction函数添加。
  • 工具条是一个可移动的窗口,它的停靠区域由QToolBar的allowAreas决定,包括(以下值可以通过查帮助文档allowAreas来索引到):
    • Qt::LeftToolBarArea             停靠在左侧
    • Qt::RightToolBarArea           停靠在右侧
    • Qt::TopToolBarArea              停靠在顶部
    • Qt::BottomToolBarArea        停靠在底部
    • Qt::AllToolBarAreas              以上四个位置都可停靠

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

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

        使用setFloatable(trueOrFalse)函数来设定工具栏可否浮动

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

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

3. 状态栏

        一个QMainWindow的程序最多只有一个状态栏。QMainWindow中可以有多个的部件都使用add…名字的函数,而只有一个的部件,就直接使用获取部件的函数,如menuBar。同理状态栏也提供了一个获取状态栏的函数statusBar(),没有就自动创建一个并返回状态栏的指针。

QMenuBar *	menuBar() const;
  • 添加小部件(从状态栏左侧添加)
        void addWidget(QWidget * widget, int stretch = 0);
        //插入小部件
        int	insertWidget(int index, QWidget * widget, int stretch = 0);
        //删除小部件
        void removeWidget(QWidget * widget);
    
  • 添加小部件(从状态栏右侧添加)
    void addPermenentWidget (QWidget *widget, int stretch = 0);

4. 停靠部件(也称为铆接部件、浮动窗口)

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

QDockWidget * dock = new QDockWidget("标题",this);
//添加停靠部件到mainWindow中,并且设定默认停靠在左边
addDockWidget(Qt::LeftDockWidgetArea,dock);
//设定停靠部件允许停靠的范围
dock->setAllowedAreas(Qt::LeftDockWidgetArea |
    Qt::RightDockWidgetArea | Qt::TopDockWidgetArea); 

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

        除了以上几个部件,中心显示的部件都可以作为核心部件,例如一个记事本程序中,就是一个QTextEdit(编辑框控件)做核心部件。

QTextEdit * edit = new QTextEdit(this);
//设置mainWindow的核心部件
setCentralWidget(edit);

6. 使用UI文件创建窗口

        创建工程的时候把UI文件留着。

6.1 UI设计窗口介绍

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

6.2 菜单栏

6.2.1 添加/删除菜单栏

        默认情况下QMainWindow项目一创建就自带了菜单栏,可以在对象树窗口中,右键菜单栏对象,移除菜单栏:

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

        删除后也可以创建菜单栏,此时在对象树中右键MainWindow对象,菜单里边会多了创建菜单栏的功能:

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

6.2.2 添加菜单

        点击菜单栏的“在这里输入”可以输入一个菜单名字创建一个菜单。

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

6.2.3 添加菜单项

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

         在UI界面中添加菜单项只能用英文,因为此时会创建一个QAction对象,会用输入的值作为对象名,所以不能用中文,得添加后再属性窗口改中文。

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

6.2.4 添加多级菜单

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

6.3 工具栏

6.3.1 添加/删除工具栏

        删除工具栏方法和删除菜单栏方法一样,不过工具栏可以有多个,所以每次右键MainWindow对象,都可以看到添加工具栏的选项。

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

6.3.2 工具栏添加动作

        新添加的QAction对象会在动作编辑器里找到(Action Editor),可以直接拖拽上来添加到工具栏里。

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

可以对工具栏设定停靠区域、能否浮动、能否移动等

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

6.4 状态栏 

        添加和删除状态栏的方法和添加删除菜单栏方法一样。

        状态栏添加左侧控件、右侧控件只能通过代码来添加。

6.5 停靠部件

        从工具箱中拖出一个停靠部件就行。也可以像设定工具栏停靠范围一样,在停靠部件的属性窗口中设定他可以停靠的范围。

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

6.6 核心部件

        UI窗口中默认核心部件就是一个widget 。

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

7. UI文件原理

        使用UI文件创建界面很轻松很便捷,他的原理就是每次我们保存UI文件的时候,QtCreator就自动帮我们将UI文件翻译成C++的图形界面创建代码。可以通过以下步骤查看代码:

        到工程编译目录,一般就是工程同级目录下会生成另一个编译目录,会找到一个带ui_前缀跟ui文件同名的.h文件,这就是代码

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

        在项目MainWindow的构造函数中会调用这个函数来初始化窗口,其实这里边就是初始化我们的各个控件。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //如果想要使用ui里边的控件对象
    //代码必须写在setupUi之下
    //否则ui各个控件没有初始化时使用会出问题
    ui->pushButton->setText("Hello");
}

8. UI文件下使用信号和槽

8.1 转到槽

        在UI编辑界面中使用信号和槽很方便,比如,拖出一个Button到窗口上,右键这个button,选择转到槽:

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

        此时会出现这个控件(QPushButton)可以连接的各个信号,我们可以根据具体需求选中信号来创建一个连接这个信号的槽函数:

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

         以click(bool)信号为例,创建了一个槽函数:

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

        这个槽函数是QtCreator自动帮我们创建的,而且也使用生成C++代码的方式帮我们做好了连接,我们可以直接在这个函数体内实现功能就行。很方便,比使用Lambda表达式还方便。

8.2 信号槽编辑器

        可以使用动作编辑器旁边的信号槽编辑器,里边也可以添加信号和槽的连接,比如添加actionQuit的triggered信号和窗口close槽的连接:

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

9. 资源文件

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

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

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

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

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

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

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

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

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

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

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

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

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

        Qrc文件只是记录了我们要用到的资源文件在项目路径哪个位置的一个信息,如果我们使用文本编辑器打开 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>

        当我们编译工程之后,我们可以在构建目录中找到 qrc_res.cpp 文件。

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

        这就是 Qt 将我们的资源编译成了 C++ 代码:

qt中嵌入winform界面混全编程,【C++成长之路】,qt,开发语言,QMainWindow

       可以看出Qt帮我们将资源文件内容一个字节一个字节的读出来最终放到了代码里,使用字符数组的形式保存着,所以程序启动的时候这些资源就会以数组的形式占用到程序内存里。当我们使用qt的qrc资源文件时要考虑内存占用的问题,如果Qt程序资源很多,而且并不是每次运行程序都会加载所有的资源,比如制作一个游戏,所需要的图片声音资源量很大,可能超过了机器内存大小,这时候使用qrc加载资源的方式很不合适。

       可以考虑动态加载资源的方式,当切入到某个游戏场景的时候才加载场景相关的图片声音资源。Qt有提供rcc的方式动态加载资源,不过不常用,所以一般游戏资源都放在可执行文件exe所在目录或者子目录下,程序运行的时候就从游戏exe文件路径去搜寻资源。

【上一篇】Qt界面编程(三)—— 父子关系、对象树、信号和槽(自定义信号和槽、Qt5与Qt4的写法) 文章来源地址https://www.toymoban.com/news/detail-816007.html

到了这里,关于Qt界面编程(四)—— QMainWindow(一个菜单栏、多个工具栏、多个停靠部件、一个状态栏、一个中心部件)、资源文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt6入门教程 10:菜单栏、工具栏和状态栏

    目录 一.菜单栏 1.Qt Designer 1.1添加菜单和菜单项 1.2添加二级菜单 1.3给菜单和菜单项添加图标 1.4给菜单项添加功能 2.纯手写 二.工具栏 1.Qt Designer 1.1添加工具栏按钮 1.2工具栏的几个重要属性 2.纯手写 三.状态栏 1.Qt Designer 2.纯手写 用Qt Creator新建基于QMainWindow的项目时,会自带菜

    2024年02月19日
    浏览(51)
  • Qt之菜单栏、工具栏、状态栏介绍及工具栏QAction的动态增删显示实现方式

    目的 端应用程序或者编辑器基本都支持工具栏快捷功能的动态增删,即通过在菜单栏上打钩就可以在工具栏上看到相应功能的快捷按钮,取消打钩则在工具栏上就移除了该功能的快捷按钮。那么Qt如何实现这个功能,本篇目的就是记录实现此功能的方法及思路。 效果 先看下

    2024年02月08日
    浏览(52)
  • autojs一个经典的飘浮工具栏界面源码

    autojs一般的项目都会有一个全屏界面,点击按钮,弹出个小悬浮窗。 但是也有的时候只需要直接弹出小窗就够用了。这时候就用到了。 运行后,会弹出基本全功能的悬浮窗来。可以开始,停止。以及拖动。 自己加上,实际需要运行的代码就行了 还不收藏起来??

    2024年02月12日
    浏览(47)
  • Qt编程基础 | 第六章-窗体 | 6.1、主窗体QMainWindow类

    QMainWindow是为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,其界面布局如下图所示 注意:主窗口QMainWindow有自己的布局管理器,因

    2024年02月06日
    浏览(44)
  • 怎么移除WordPress后台工具栏“新建”菜单?如何添加“新建文章”菜单?

    默认情况下,WordPress后台顶部管理工具栏有左侧有一个“+新建”菜单,而且还有下拉菜单文章、媒体、链接、页面和用户等,不过我们平时用得最多的就是“新建文章”,虽然可以直接点击“+新建”,或点击“新建 – 文章”,但是总感觉有点复杂。 我们能不能将整个“+新

    2024年01月24日
    浏览(54)
  • 怎么移除WordPress后台工具栏的查看站点子菜单?如何改为一级菜单?

    默认情况下,我们在WordPress后台想要访问前端网站,需要将鼠标移动到左上角的站点名称,然后点击下拉菜单中的“查看站点”才行,而且还不是新窗口打开。那么有没有办法将这个“查看站点”子菜单变成一级菜单并显示在顶部管理工具栏中,而且还是新窗口打开前端站点

    2024年01月22日
    浏览(51)
  • Idea 2023.1 主菜单、工具栏不见了怎么找回

    Idea 2023.1 主菜单、工具栏不见了怎么找回 点击右上角横条,file-setting-取消new UI的勾选,restart就可以回到旧版本的UI 

    2024年02月07日
    浏览(46)
  • 在WInform开发中实现工具栏/菜单的动态呈现

    在Winform系统开发中,为了对系统的工具栏/菜单进行动态的控制,我们对系统的工具栏/菜单进行动态配置,这样可以把系统的功能弹性发挥到极致。通过动态工具栏/菜单的配置方式,我们可以很容易的为系统新增所需的功能,通过权限分配的方式,可以更有效的管理系统的菜

    2024年02月04日
    浏览(49)
  • ​WordPress顶部管理工具栏怎么添加一二级自定义菜单?

    默认情况下,WordPress前端和后台页面顶部都有一个“管理工具栏”,左侧一般就是站点名称、评论、新建,右侧就是您好,用户名称和头像。那么我们是否可以在这个管理工具栏中添加一些一二级自定义菜单呢? 其实,我们想要在顶部管理工具栏中添加自定义菜单,只需要使

    2024年01月23日
    浏览(56)
  • QT之多个界面相互切换 (stackedWidget控件)

    stackedWidget控件:   可以自由在多个widget切换,可以通过点击顶部菜单,显示不同界面,在实际开发中应用很广泛。 1. 添加控件, 在设计界面左侧添加 stackedWidget控件 2. 增加几个  widget 界面  3. 将这几个 widget 插入到 stackedWidget 首先定义 一个枚举量, 存放每个界面的编号

    2024年02月11日
    浏览(93)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包