Qt中MainWindow 中QMenuBar、QToolBar、QStatusBar、QMenuBar使用

这篇博客详细介绍了如何使用Qt的QMainWindow构建应用程序的用户界面,包括添加菜单栏、工具栏、状态栏、浮动窗口和中心部件。通过实例展示了创建菜单项、设置工具栏浮动及移动属性、添加控件到工具栏以及使用QDockWidget创建浮动窗口。同时,强调了各个组件的限制,如菜单栏和状态栏只能有一个,而工具栏和浮动窗口可以有多个。最后,设置了QTextEdit作为中心部件。
摘要由CSDN通过智能技术生成

一、MainWindow介绍

MainWindow提供了用于构建应用程序用户界面的框架。Qt 有 QMainWindow 及其相关的主窗口管理。的QMainWindow拥有自己的布局,您可以添加在QToolBarQDockWidgetQMenuBarQStatusBar。布局有一个中心区域,可以被任何类型的小部件占据。你可以在下面看到布局的图像。

注意:窗口中菜单栏,状态栏,中心部件只能有一个,工具栏和浮动窗口可以有多个,

#include "mainwindow.h"
#include "QMenuBar"
#include "QToolBar"
#include "QPushButton"
#include "QStatusBar"
#include "QLabel"
#include "QDockWidget"
#include "QTextEdit"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //重置窗口
    this->resize(600,400);

    //创建菜单栏--最多只有一个
    QMenuBar * bar = menuBar();
    setMenuBar(bar);
    //创建菜单
    QMenu * file=  bar->addMenu(QString::fromLocal8Bit("文件"));
    QMenu * edit=  bar->addMenu(QString::fromLocal8Bit("编辑"));

    //创建菜单项
    QAction * newaction= file->addAction(QString::fromLocal8Bit("新建"));
    //添加分隔符
    file->addSeparator();
    QAction * editaction =  file->addAction(QString::fromLocal8Bit("打开"));

    //工具栏--可以多个
    QToolBar * tbar = new  QToolBar(this);
    addToolBar(tbar);
    // tbar ->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);

    //设置浮动
    tbar->setFloatable(false);

    //设置移动(总开关)
    tbar->setMovable(false);

    //工具栏添加内容
    tbar->addAction(newaction);
    //添加分割线
    tbar->addSeparator();
    tbar->addAction(editaction);

    //工具栏中添加控件
    QPushButton * btn= new QPushButton(tbar);
    btn->setText(QString::fromLocal8Bit("工具栏上的控件" ));
    tbar->addWidget(btn);

    //状态栏也是最多只能有一个
    QStatusBar * sta =  statusBar();
    setStatusBar(sta);

    //放标签控件
    QLabel * lb =new QLabel("leftremake",this);
    sta->addWidget(lb);

    //放右侧标签控件
    QLabel * lb2 =new QLabel("rightremake",this);
    sta->addPermanentWidget(lb2);

    //铆接部件(浮动窗口)可以包含多个
    QDockWidget * dw = new QDockWidget(QString::fromLocal8Bit("浮动" ),this);
    addDockWidget(Qt::BottomDockWidgetArea,dw);
    //设置停靠区域,只允许上下
    dw->setAllowedAreas(Qt::TopDockWidgetArea|Qt::BottomDockWidgetArea);


    //设置中心部件  只能有一个

   QTextEdit * qedit= new QTextEdit(this);
   setCentralWidget(qedit);
}

MainWindow::~MainWindow()
{

}

运行后

注意:菜单栏、工具栏、状态栏、铆接部件(浮动窗口)、qt都不会直接把他们加入窗体,

菜单栏使用 setMenuBar(bar);,

工具栏使用addToolBar(tbar);

添加分隔符都是使用addSeparator();

状态栏使用setStatusBar(sta);

浮动窗口使用 addDockWidget(Qt::BottomDockWidgetArea,dw);

另外在向工具栏中添加控件时并不是直接设置其父控件

QPushButton * btn= new QPushButton(tbar);

而是使用addWidget(btn),直接设置会把原有工具栏内容的覆盖掉出现下面这种问题

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
,Form和MainWindow都是QWidget的派生类。其,Form类是单独的窗体,而MainWindow类则是包含菜单栏、工具栏、状态栏等组件的主窗口。 定义一个Form类,可以通过以下步骤实现: 1. 创建一个新的QWidget类,例如MyForm。 2. 在MyForm.h头文件,继承QWidget类,并声明构造函数和其他需要的成员函数和变量。 3. 在MyForm.cpp源文件,实现构造函数和其他成员函数。 例如: ``` // MyForm.h #include <QWidget> class MyForm : public QWidget { Q_OBJECT public: explicit MyForm(QWidget *parent = nullptr); ~MyForm(); private: // 声明其他成员函数和变量 }; // MyForm.cpp #include "MyForm.h" MyForm::MyForm(QWidget *parent) : QWidget(parent) { // 实现构造函数 } MyForm::~MyForm() { // 实现析构函数 } // 实现其他成员函数 ``` 定义一个MainWindow类,可以通过以下步骤实现: 1. 创建一个新的QMainWindow类,例如MyMainWindow。 2. 在MyMainWindow.h头文件,继承QMainWindow类,并声明构造函数和其他需要的成员函数和变量。 3. 在MyMainWindow.cpp源文件,实现构造函数和其他成员函数。在构造函数,可以添加菜单栏、工具栏、状态栏等组件。 例如: ``` // MyMainWindow.h #include <QMainWindow> class MyMainWindow : public QMainWindow { Q_OBJECT public: explicit MyMainWindow(QWidget *parent = nullptr); ~MyMainWindow(); private: // 声明其他成员函数和变量 }; // MyMainWindow.cpp #include "MyMainWindow.h" MyMainWindow::MyMainWindow(QWidget *parent) : QMainWindow(parent) { // 添加菜单栏 QMenuBar* menuBar = new QMenuBar(this); setMenuBar(menuBar); // 添加工具栏 QToolBar* toolBar = new QToolBar(this); addToolBar(toolBar); // 添加状态栏 QStatusBar* statusBar = new QStatusBar(this); setStatusBar(statusBar); // 实现构造函数 } MyMainWindow::~MyMainWindow() { // 实现析构函数 } // 实现其他成员函数 ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个月太忙没时间看C++

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值