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


相关推荐
血不热了3 小时前
Qt:智能指针QScopedPointer 的使用(以及如何写一个QScopedPointer )
开发语言·qt
血不热了3 小时前
Qt:实现单例模式
qt·单例模式
草上爬3 小时前
Qt优秀开源项目之二十三:QSimpleUpdater
开发语言·qt·qsimpleupdater·自动升级
wkd_0074 小时前
【Qt | QLineEdit】Qt 中使 QLineEdit 响应 鼠标单击、双击事件 的两个方法
qt·qlineedit·鼠标双击·鼠标单击
yupeizhou5 小时前
Day 72
qt
Prejudices15 小时前
在 Qt 中使用中文
开发语言·c++·qt
码力码力我爱你16 小时前
Vue Application exit (SharedArrayBuffer is not defined)
linux·前端·javascript·qt·vue·wasm·webassembly
ljp_nan18 小时前
Qt --- 信号和信号槽
开发语言·qt
牵牛老人1 天前
Qt技巧(三)编辑框嵌入按钮,系统位数判断,判断某对象是否属于某种类,控件取句柄,支持4K,巧用QEventLoop,QWidget的窗体样式
开发语言·qt
十启树1 天前
用Qt 对接‌百度语音识别接口
人工智能·qt·百度·语音识别