当前位置: 首页 > article >正文

qt QMainWindow详解

一、概述

QMainWindow继承自QWidget,并提供了一个预定义的布局,将窗口分成了菜单栏、工具栏、状态栏和中央部件区域。这些区域共同构成了一个功能丰富的主窗口,使得应用程序的开发更加简单和高效。

二、QMainWindow的常用组件及功能

  1. 菜单栏(QMenuBar)

    • 位于主窗口顶部,主窗口标题栏下面。
    • 一个主窗口最多只有一个菜单栏。
    • 可以使用QMainWindow类的menubar()函数获取主窗口菜单栏指针,并添加菜单和菜单项。
    • 菜单项是通过QAction类来抽象表示的,QAction类不仅可以用于菜单,还可以用于工具栏和快捷键等。
  2. 工具栏(QToolBar)

    • 主窗口可以包含一个或多个工具栏,用于放置常用操作的快捷按钮。
    • 使用addToolBar()方法将工具栏添加到主窗口。
    • 工具栏中的按钮可以绑定特定的操作,方便用户进行快速操作。
    • 工具栏是一个可移动的窗口,其停靠区域由QToolBar的allowAreas属性决定,包括左侧、右侧、顶部和底部等。
  3. 状态栏(QStatusBar)

    • 位于主窗口底部,用于显示应用程序的状态信息。
    • 使用statusBar()方法获取状态栏对象,并通过showMessage()方法显示文本消息。
    • 状态栏中可以添加小部件,以显示更多的信息或控件。
  4. 中心部件(Central Widget)

    • 中心部件区域是用来放置应用程序的主要内容的部分。
    • 可以包含其他的QWidget或自定义的QWidget派生类。
    • 使用setCentralWidget()方法将中心部件设置为特定的QWidget。
  5. 停靠部件(QDockWidget)

    • 也称浮动窗口,可以有多个。
    • 停靠部件可以在主窗口的边缘停靠,也可以浮动显示。
    • 可以使用addDockWidget()方法将停靠部件添加到主窗口中,并设置其允许停靠的区域。

三、重要方法

  • QMainWindow(QWidget *parent = nullptr):创建一个 QMainWindow 对象,可以指定父对象。
  • setCentralWidget(QWidget *widget):设置主窗口的中央小部件。中央小部件是主窗口的主要内容区域。
  • menuBar():返回主窗口的菜单栏指针。
  • addToolBar(Qt::ToolBarArea area, QToolBar *toolbar):在指定区域添加工具栏。
  • statusBar():返回主窗口的状态栏指针。
  • setWindowTitle(const QString &title):设置窗口标题。
  • setWindowIcon(const QIcon &icon):设置窗口图标。
  • setGeometry(int x, int y, int width, int height):设置窗口的位置和大小。
  • resize(int width, int height):重新设置窗口大小。
  • addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget):添加停靠窗口部件。

#include <QApplication>  
#include <QMainWindow>  
#include <QMenuBar>  
#include <QToolBar>  
#include <QStatusBar>  
#include <QAction>  
#include <QDockWidget>  
#include <QTextEdit>  
#include <QVBoxLayout>  
#include <QLabel>  
  
int main(int argc, char *argv[]) {  
    QApplication app(argc, argv);  
    QMainWindow mainWindow;  
    mainWindow.setWindowTitle("QMainWindow Example");  
  
    // 创建菜单栏和菜单  
    QMenuBar *menuBar = mainWindow.menuBar();  
    QMenu *fileMenu = menuBar->addMenu("File");  
    QAction *openAction = fileMenu->addAction("Open");  
    QAction *saveAction = fileMenu->addAction("Save");  
  
    // 创建工具栏  
    QToolBar *toolBar = mainWindow.addToolBar("Toolbar");  
    toolBar->addAction(openAction);  
    toolBar->addAction(saveAction);  
  
    // 创建状态栏  
    QStatusBar *statusBar = mainWindow.statusBar();  
    statusBar->showMessage("Ready");  
  
    // 创建中央部件  
    QWidget *centralWidget = new QWidget(&mainWindow);  
    QVBoxLayout *layout = new QVBoxLayout(centralWidget);  
    QLabel *label = new QLabel("Central Widget Content");  
    layout->addWidget(label);  
    mainWindow.setCentralWidget(centralWidget);  
  
    // 创建停靠部件  
    QDockWidget *dockWidget = new QDockWidget("Dock Window", &mainWindow);  
    dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);  
    QLabel *dockLabel = new QLabel("Dock Window Content");  
    dockWidget->setWidget(dockLabel);  
    mainWindow.addDockWidget(Qt::LeftDockWidgetArea, dockWidget);  
  
    mainWindow.show();  
    return app.exec();  
}

觉得有帮助的话,打赏一下呗。。

           


http://www.kler.cn/news/364306.html

相关文章:

  • 51单片机应用开发(进阶)---外部中断(按键+数码管显示0-F)
  • ReentrantReadWriteLock底层实现原理?
  • Maven基础知识
  • 一起搭WPF架构之LiveCharts.Wpf的简单了解与安装
  • Linux的目录结构 常用基础命令(2)
  • C#使用log4net结合sqlite数据库记录日志
  • 智象未来(HiDream.ai)携手Rokid,开启虚拟与现实交融新体验
  • fmql之Linux RTC
  • 关闭CPU C State 解决卡屏死机问题
  • 音视频:安防监控
  • SIP 业务举例之 Call Hold(呼叫保持)
  • 【AIGC】2023-ICCV-为文本到图像的传播模型添加条件控制
  • 使用预训练的BERT进行金融领域问答
  • 忘记7-zip文件7-zip文件,还可以解压zip文件吗?
  • cosine_with_warmup_scheduler(lrgb文件中的cosine_scheduler.py)
  • Electron 离线环境打包解决方案(electron-forge)
  • 堆(堆排序,TOP K, 优先级队列)
  • AI图片生成3D物体和2D视频提取3D动画
  • vr头显都是什么操作系统
  • SpringColoud GateWay 核心组件
  • 纷享销客生态大会成都站成功举办:携手精英伙伴,共话CRM新纪元
  • RTC(Real-Time Clock)简介
  • Flutter 12 实现双击屏幕显示点赞爱心多种动画(AnimationIcon)效果
  • 《Python游戏编程入门》注-第3章3
  • OpenCV 图像去畸变(相机标定)
  • VoLTE 微信令:VoLTE 打 VoLTE,被叫号码不存在的信令流程