Qt 中 QMainWindow 的概述与实现


目录

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

Qt 中 QMainWindow 的概述与实现

概述

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

组件概述

  1. 菜单栏 (QMenuBar)

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

    示例代码

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

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

    示例代码

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

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

    示例代码

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

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

    示例代码

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

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

    示例代码

    QTextEdit *textEdit = new QTextEdit(this);
    setCentralWidget(textEdit);
    

实现

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

代码示例

1. 创建项目

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

2. 编写代码

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include 
#include 

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

#include "widget.h"
#include "ui_widget.h"
#include 
#include 
#include 
#include 
#include 

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


你可能感兴趣的:(Qt,qt)