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,我们能够轻松构建一个功能齐全的桌面应用程序。


相关推荐
无小道39 分钟前
Qt——常用控件
开发语言·qt
初次见面我叫泰隆1 小时前
Qt——5、Qt系统相关
开发语言·qt·客户端开发
牵牛老人3 小时前
【Qt 开发后台服务避坑指南:从库存管理系统开发出现的问题来看后台开发常见问题与解决方案】
开发语言·qt·系统架构
xmRao4 小时前
Qt+FFmpeg 实现 PCM 音频转 AAC 编码
qt·ffmpeg·pcm
xmRao4 小时前
Qt+FFmpeg 实现录音程序(pcm转wav)
qt·ffmpeg
喜欢喝果茶.4 小时前
QOverload<参数列表>::of(&函数名)信号槽
开发语言·qt
wjhx4 小时前
QT中对蓝牙权限的申请,整理一下
java·数据库·qt
踏过山河,踏过海4 小时前
【qt-查看对应的依赖的一种方法】
qt·visual studio
C++ 老炮儿的技术栈5 小时前
VS2015 + Qt 实现图形化Hello World(详细步骤)
c语言·开发语言·c++·windows·qt
C++ 老炮儿的技术栈7 小时前
Qt Creator中不写代如何设置 QLabel的颜色
c语言·开发语言·c++·qt·算法