Qt 中 QMainWindow 的概述与实现


目录

  1. [Qt 中 QMainWindow 的概述与实现](#Qt 中 QMainWindow 的概述与实现)
    • [1.1 组件概述](#1.1 组件概述)
      • [1.1.1 菜单栏 (QMenuBar)](#1.1.1 菜单栏 (QMenuBar))
      • [1.1.2 工具栏 (QToolBar)](#1.1.2 工具栏 (QToolBar))
      • [1.1.3 状态栏 (QStatusBar)](#1.1.3 状态栏 (QStatusBar))
      • [1.1.4 停靠部件 (QDockWidget)](#1.1.4 停靠部件 (QDockWidget))
      • [1.1.5 中心控件](#1.1.5 中心控件)
  2. 实现
    • [2.1 创建项目](#2.1 创建项目)
    • [2.2 编写代码](#2.2 编写代码)
    • [2.3 运行程序](#2.3 运行程序)
  3. 总结

Qt 中 QMainWindow 的概述与实现

概述

在 Qt 中,QMainWindow 是一种常用的主窗口类型,它提供了一个标准的主窗口界面,支持菜单栏、工具栏、状态栏和中心控件。通过 QMainWindow,开发者可以迅速构建功能丰富的桌面应用程序。本文将详细介绍如何在 QMainWindow 中使用这些组件,并提供代码示例以供参考。

组件概述

  1. 菜单栏 (QMenuBar)

    • 菜单栏用于组织各种命令和设置,通常位于窗口的顶部。
    • 通过 menuBar() 方法访问,并使用 addMenu()addAction() 方法添加菜单和操作。

    示例代码

    cpp 复制代码
    QMenu *fileMenu = menuBar()->addMenu("File");
    fileMenu->addAction("Open");
    fileMenu->addAction("Save");
    fileMenu->addAction("Exit", this, &QWidget::close);
  2. 工具栏 (QToolBar)

    • 工具栏为快速访问常用功能的按钮,通常位于菜单栏下方。
    • 通过 addToolBar() 方法添加,并使用 addAction() 方法添加按钮。

    示例代码

    cpp 复制代码
    QToolBar *toolBar = addToolBar("Main Toolbar");
    toolBar->addAction("Open");
    toolBar->addAction("Save");
    toolBar->addAction("Exit");
  3. 状态栏 (QStatusBar)

    • 状态栏用于显示应用程序的状态信息,通常位于窗口底部。
    • 通过 statusBar() 方法访问,使用 showMessage() 显示信息。

    示例代码

    cpp 复制代码
    statusBar()->showMessage("Ready"); // 初始状态信息
  4. 停靠部件 (QDockWidget)

    • 停靠部件用于创建可以停靠或浮动的窗口,通常用于工具面板。
    • 使用 QDockWidget 类创建,并通过 setWidget()addDockWidget() 添加到主窗口。

    示例代码

    cpp 复制代码
    QDockWidget *dockWidget = new QDockWidget("Dockable", this);
    QTextEdit *dockTextEdit = new QTextEdit(dockWidget);
    dockWidget->setWidget(dockTextEdit);
    addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
  5. 中心控件

    • 中心控件是主窗口中的主要内容区域,通常用于显示应用程序的主要内容。
    • 使用 setCentralWidget() 方法配置。

    示例代码

    cpp 复制代码
    QTextEdit *textEdit = new QTextEdit(this);
    setCentralWidget(textEdit);

实现

下面是一个使用 Qt 创建简单 QMainWindow 的示例代码,包含所有上述组件。

代码示例

1. 创建项目

首先,使用 Qt Creator 创建一个新的 Qt Widgets Application 项目。

2. 编写代码

widget.h

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QMainWindow>
#include <QDockWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QMainWindow {
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

widget.cpp

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"
#include <QMenuBar>
#include <QToolBar>
#include <QStatusBar>
#include <QDockWidget>
#include <QTextEdit>

Widget::Widget(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 设置中心控件
    QTextEdit *textEdit = new QTextEdit(this);
    setCentralWidget(textEdit);

    // 创建菜单栏
    QMenu *fileMenu = menuBar()->addMenu("File");
    fileMenu->addAction("Open");
    fileMenu->addAction("Save");
    fileMenu->addAction("Exit", this, &QWidget::close);

    // 创建工具栏
    QToolBar *toolBar = addToolBar("Main Toolbar");
    toolBar->addAction("Open");
    toolBar->addAction("Save");
    toolBar->addAction("Exit");

    // 创建状态栏
    statusBar()->showMessage("Ready"); // 初始状态信息

    // 创建停靠部件
    QDockWidget *dockWidget = new QDockWidget("Dockable", this);
    QTextEdit *dockTextEdit = new QTextEdit(dockWidget);
    dockWidget->setWidget(dockTextEdit);
    addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
}

Widget::~Widget() {
    delete ui;
}
3. 运行程序

编译并运行程序,你将看到一个主窗口,其中包含菜单栏、工具栏、状态栏和一个可停靠的部件。你可以在中心区域编辑文本,状态栏会显示"Ready"信息。

总结

通过使用 QMainWindow,我们能够轻松构建一个功能齐全的桌面应用程序。


相关推荐
Bruce小鬼5 分钟前
QT文件基本操作
开发语言·qt
懷淰メ27 分钟前
PyQt飞机大战游戏(附下载地址)
开发语言·python·qt·游戏·pyqt·游戏开发·pyqt5
Mr.Q5 小时前
OpenCV和Qt坐标系不一致问题
qt·opencv
重生之我是数学王子8 小时前
QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
开发语言·c++·qt
----云烟----18 小时前
QT中QString类的各种使用
开发语言·qt
「QT(C++)开发工程师」1 天前
【qt版本概述】
开发语言·qt
一路冰雨1 天前
Qt打开文件对话框选择文件之后弹出两次
开发语言·qt
老赵的博客1 天前
QT 自定义界面布局要诀
开发语言·qt
码码哈哈0.01 天前
VSCode 2022 离线安装插件QT VSTOOl报错此扩展不能安装在任何当前安装的产品上。
ide·vscode·qt
feiyangqingyun1 天前
Qt/C++离线地图的加载和交互/可以离线使用/百度和天地图离线/支持手机上运行
c++·qt·qt天地图·qt离线地图·qt地图导航