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


相关推荐
mengzhi啊3 小时前
QUndoView 本质是一个 Qt 界面控件(继承自 QListView),专门适配 QUndoStack
qt
编程小白20263 小时前
从 C++ 基础到效率翻倍:Qt 开发环境搭建与Windows 神级快捷键指南
开发语言·c++·windows·qt·学习
深蓝海拓3 小时前
PySide6,QCoreApplication::aboutToQuit与QtQore.qAddPostRoutine:退出前后的清理工作
笔记·python·qt·学习·pyqt
薛定谔的猫喵喵4 小时前
天然气压力能利用系统综合性评价平台:基于Python和PyQt5的AHP与模糊综合评价集成应用
开发语言·python·qt
云中飞鸿4 小时前
linux中qt安装
开发语言·qt
少控科技4 小时前
QT第6个程序 - 网页内容摘取
开发语言·qt
stevenson_aspdotnet6 小时前
QT5.15.12 编译备忘
qt
无小道8 小时前
QT——QFIie和QFileInfo文件类
开发语言·qt·命令模式
薛定谔的猫喵喵9 小时前
基于PyQt5的视频答题竞赛系统设计与实现
开发语言·qt·音视频
薛定谔的猫喵喵10 小时前
基于C++ Qt的唐代诗歌查询系统设计与实现
c++·qt·sqlite