【Qt】从QMainWindow到UI框架

2024-03-16 03:28
文章标签 qt ui 框架 qmainwindow

本文主要是介绍【Qt】从QMainWindow到UI框架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 简介
  • UI布局元素
    • Central Widget
    • Menu Bar
    • Toolbars
    • Status Bar
    • Dock Widgets
  • 参考文档

简介

如下图所示,我们常见的一些desktop软件,比如VS Code、Smart VCI等,一般都会包含顶部的菜单栏,底部的状态栏,以及一些其他UI布局元素。
在这里插入图片描述
在这里插入图片描述

新建Qt项目是以MainWindow作为显示的载体,MainWindow是继承自QMainWindow的一个子类。

如下图所示,QMainWindow本身提供了常用的UI布局元素1,包括:

  • Menu Bar 菜单栏
  • Toolbars 工具栏
  • Status Bar 状态栏
  • Dock Widgets Dock栏
  • Central Widget 页面内容区域
    在这里插入图片描述
    合理利用这几种元素,我们就可以构建出我们常见的desktop布局了:
    在这里插入图片描述

接下来我们一次介绍这些元素及其基本使用方法

UI布局元素

Central Widget

Central Widget主要用来显示页面内容,通常是自定义Widget,也就是QWidget的子类,用来展示我们App的主要内容。可以调用QMainWindowsetCentralWidget()方法来设置Central Widget。

Menu Bar

Menu Bar也就是我们常见的菜单栏,在Qt中是用QMenuBar2类创建的。
在介绍QMenuBar之前,需要先介绍另外一个类QAction3。在desktop应用中,经常通过菜单栏中的菜单、工具栏按钮或者快捷键调用一些应用中常用的功能,比如打开文件操作。对于同一个功能,不管通过什么方式调用,执行的命令应该是同一个。这种情况下把功能抽象为Action是非常有用的,在Qt中,就是QAction。也就是说QAction是某个应用功能的抽象,可以同时被添加到菜单栏、工具栏和快捷键,Qt会自动完成在不同地方的状态同步。以下面代码为例:

    // ...QAction *submenu4 = new QAction("子菜单四");submenu4->setCheckable(true);submenu4->setShortcuts(QKeySequence::Copy);// ...menubar->addAction(submenu4);toolbar->addAction(submenu4);

如果在应用中执行“Ctrl + C”, 子菜单四就会被选中,菜单栏、工具栏中的子菜单四状态都会同时发生改变:
在这里插入图片描述

接下来可以开始介绍QMenuBar了,它的功能就是创建菜单栏,容纳QMenu4。通过QMainWinowvoid setMenuBar(QMenuBar *menuBar)5功能添加菜单栏,通过QMenuBaraddMenu6方法为菜单栏添加菜单元素,通过addAction方法添加具体命令。
通过下面例子介绍具体使用:

QMenuBar *menubar = new QMenuBar();
// 创建多级菜单
QMenu *menu1 = new QMenu("菜单一");QMenu *submenu1 = new QMenu("子菜单一");
QAction *submenu11 = new QAction("二级子菜单一");
QAction *submenu12 = new QAction("二级子菜单二");
submenu1->addAction(submenu11);
submenu1->addAction(submenu12);QAction *submenu2 = new QAction("子菜单二");
menu1->addMenu(submenu1);
menu1->addAction(submenu2);// 没有子菜单的一级菜单
QAction *menu2 = new QAction("菜单二");menubar->addMenu(menu1);menubar->addAction(menu2);

效果如下图
在这里插入图片描述

Toolbars

与菜单栏类似,Qt通过QToolBar7创建工具栏,通过QMainWindowvoid addToolBar(QToolBar *toolbar)8可以为窗口添加工具栏,一个窗口中可以添加多个工具栏。
工具栏元素可以添加QAction也可以添加QWidget,对应添加方法是addAction()addWidget()QMainWindow添加工具栏时可以指定工具栏的默认位置,通过下面的例子介绍具体使用

    QAction *submenu2 = new QAction("子菜单二");QAction *submenu3 = new QAction("子菜单三");QAction *submenu4 = new QAction("子菜单四");QPushButton *btn = new QPushButton("按钮");QToolBar *toolbar = new QToolBar();toolbar->addAction(submenu2);toolbar->addAction(submenu3);toolbar->addSeparator(); // 菜单元素之间增加分割线toolbar->addWidget(btn);QToolBar *toolbar2 = new QToolBar();toolbar2->addAction(submenu4);addToolBar(toolbar);addToolBar(toolbar2);

效果如图:在这里插入图片描述
菜单栏默认会被添加在窗口上方,菜单栏默认也是可以拖动到窗口的四个边,也可以处于悬浮状态请添加图片描述
对于上述的默认值,可以手动做一些限制和调整:

  • 指定初始位置,在调用addToolBar()时指定位置,比如addToolBar(toolbar, Qt::TopToolBarArea)。位置包括LeftToolBarAreaRightToolBarAreaTopToolBarAreaBottomToolBarArea
  • 是否允许多动,通过QToolBarvoid setMovable(bool movable)
  • 指定可以拖动到的窗口位置,通过QToolBarvoid setAllowedAreas(Qt::ToolBarAreas areas),比如只允许窗口上方或者窗口下方toolbar->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);
  • 菜单栏是否可以处于悬浮状态,通过QToolBarvoid setFloatable(bool floatable)

Status Bar

通过QStatusBar9为窗口添加状态栏,位于窗口底部,一般用于显示一些通知和提示。QMainWindowsetStatusBar()函数为窗口设置状态栏。
通过statusBar()->showMessage("Message", 2000);在状态栏显示信息,并支持指定信息存在的时长。

Dock Widgets

相比于QToolBar,Dock Widgets10的内容有更多自由度,一般用于显示一些工作区域,比如文档目录这些。通过QMainWindowaddDockWidget为窗口添加Dock Widget。

和工具栏类似,Dock Widget也可以指定初始位置、是否可以拖动、允许的位置以及是否可以处于悬浮状态等。

同一个窗口同样可以添加多个Dock Widget,多个Widget还可以组合在一起,通过tab切换

通过如下示例说明:

    QDockWidget *dockWidget = new QDockWidget("Dock Widget");QLabel *dockWidgetContent = new QLabel("dock Widget内容");dockWidgetContent->setStyleSheet("background-color:green;color: white;");dockWidget->setWidget(dockWidgetContent);addDockWidget(Qt::LeftDockWidgetArea, dockWidget);QDockWidget *dockWidget2 = new QDockWidget("Dock Widget 2");QLabel *dockWidgetContent2 = new QLabel("dock Widget 2 内容");dockWidgetContent2->setStyleSheet("background-color:green;color: white;");dockWidget2->setWidget(dockWidgetContent2);addDockWidget(Qt::LeftDockWidgetArea, dockWidget2);QDockWidget *dockWidget3 = new QDockWidget(tr("Dock Widget 3"));dockWidget3->setAllowedAreas(Qt::LeftDockWidgetArea |Qt::RightDockWidgetArea);QLabel *dockWidgetContent3 = new QLabel("dock Widget 3 内容");dockWidgetContent3->setStyleSheet("background-color:green;color: white;");dockWidget3->setWidget(dockWidgetContent3);addDockWidget(Qt::LeftDockWidgetArea, dockWidget3);tabifyDockWidget(dockWidget, dockWidget2); // 将dockWidget和dockWidget2组合tabifyDockWidget(dockWidget, dockWidget3); // 将docketWidget、dockWidget2以及dockWidget3组合在一起

效果如下图:
在这里插入图片描述

请添加图片描述

参考文档


  1. https://doc.qt.io/qt-6/qmainwindow.html#qt-main-window-framework ↩︎

  2. https://doc.qt.io/qt-6/qmenubar.html ↩︎

  3. https://doc.qt.io/qt-6/qaction.html ↩︎

  4. https://doc.qt.io/qt-6/qmenu.html ↩︎

  5. https://doc.qt.io/qt-6/qmainwindow.html#setMenuBar ↩︎

  6. https://doc.qt.io/qt-6/qmenubar.html#addMenu-1 ↩︎

  7. https://doc.qt.io/qt-6/qtoolbar.html ↩︎

  8. https://doc.qt.io/qt-6/qmainwindow.html#addToolBar-1 ↩︎

  9. https://doc.qt.io/qt-6/qstatusbar.html ↩︎

  10. https://doc.qt.io/qt-6/qdockwidget.html#details ↩︎

这篇关于【Qt】从QMainWindow到UI框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/814121

相关文章

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Qt之QMessageBox的具体使用

《Qt之QMessageBox的具体使用》本文介绍Qt中QMessageBox类的使用,用于弹出提示、警告、错误等模态对话框,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.简单介绍3.常见函数4.按钮类型(QMessage::StandardButton)5.分步骤实现弹窗6.总结1.引言

Qt中Qfile类的使用

《Qt中Qfile类的使用》很多应用程序都具备操作文件的能力,包括对文件进行写入和读取,创建和删除文件,本文主要介绍了Qt中Qfile类的使用,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.QFile文件操作3.演示示例3.1实验一3.2实验二【演示 QFile 读写二进制文件的过程】4.