Mecanismo de recolección de basura y barra de herramientas de la barra de menú

Mecanismo de recolección de basura y barra de herramientas de la barra de menú

1. Mecanismo de recolección de basura

QPushButton* b1 = new QPushButton(this);

El botón también es un espacio nuevo, por lo que debe liberarse cada vez, de lo contrario, provocará una pérdida de memoria.

1. Qt中有一个对象树,如果指定父对象并且是直接或间接继承QObject,那么如果子对象是动态分配空间的,就不需要手动释放,系统会自动释放
Inserte la descripción de la imagen aquí
2. Verificación

No podemos modificar la clase de botón encapsulada por Qt,所以自己写一个按钮类,动态申请空间,看是否会自动调用析构函数释放空间

mybutton.h

#ifndef MYBUTTON_H
#define MYBUTTON_H

#include <QPushButton>
#include <QDebug>

class MyButton : public QPushButton
{
    Q_OBJECT
public:
    explicit MyButton(QWidget *parent = nullptr);
    ~MyButton();

signals:

public slots:
};

#endif // MYBUTTON_H

mywidget.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include <QPushButton>
#include "mybutton.h"

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = 0);
    ~MyWidget();
};

#endif // MYWIDGET_H

mybutton.cpp

#include "mybutton.h"

MyButton::MyButton(QWidget *parent) : QPushButton(parent)
{

}
MyButton::~MyButton()
{
    qDebug()<<"i am ~MyButton()";
}

mywidget.cpp

#include "mywidget.h"

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    MyButton* b3 = new MyButton(this);
    MyButton* b4 = new MyButton(this);
}

MyWidget::~MyWidget()
{

}

运行结果你会发现不需要手动释放,系统会自动释放

Dos condiciones:

  • Especificar padre
  • La clase hereda QObject directa o indirectamente ,

El sistema liberará automáticamente el espacio asignado dinámicamente en los subobjetos solo si se cumplen estas dos condiciones

Segundo, la barra de herramientas de la barra de menú

Lo que hemos estado usando antes es QWidgets基类控件que proporciona ventanas, botones, etc.

Ahora usamos QMainWindow基类控件para proporcionar la interfaz de la barra de menú

class MainWindow : public QMainWindow
{}

1. Barra de menú

Archivo de encabezado :

#include <QMenuBar>
#include <QMenu>
  • 创建菜单栏

QMainWindow::menuBarFunción:

QMenuBar *QMainWindow::menuBar() const

Papel:返回主窗口的菜单栏。如果菜单栏不存在,这个函数创建并返回一个空的菜单栏。

  • 添加菜单

QMenuBar::addMenuFunción:

QMenu *QMenuBar::addMenu(const QString &title)

La función de la función de parámetro const QString &title为菜单的名字
es agregar un menú

  • 添加菜单项(下拉菜单)动作
//头文件
#include <QAction>

addAction函数

QAction *addAction(const QString &text)

El parámetro const QString & text representa el nombre del elemento de menú o acción para
crear un elemento de menú

  • 为菜单项添加动作
void triggered(bool checked = false);

Función Esta señal se emite cuando el usuario activa una operación; por ejemplo, cuando el usuario hace clic en una opción de menú, botón de barra de herramientas o presiona la combinación de teclas de acceso directo de la operación,

  • 为菜单项添加分割线
QAction *QMenu::addSeparator()

La función de la función es agregar una línea divisoria para cada elemento del menú en la barra de menú , de modo que el elemento del menú sea más claro.

2. Barra de herramientas

工具栏就相当于是菜单栏当中每个菜单中菜单项的快捷方式

  • 添加工具栏
//头文件
#include <QToolBar>

QMainWindow::addToolBarFunción:

QToolBar *QMainWindow::addToolBar(const QString &title)

El rol es agregar una barra de herramientas

  • 添加工具(快捷方式)

addAction函数

QAction *addAction(const QString &text)

El parámetro const QString & text representa el nombre de la herramienta

  • 添加小控件
QAction *QToolBar::addWidget(QWidget *widget)

Se usa en herramientas para agregar controles pequeños

3. Barra de estado

  • 添加状态栏
//头文件
#include <QStatusBar>
  • 添加标签
//头文件
#include <QLabel>

从左往右向状态栏添加状态

void QStatusBar::addWidget(QWidget *widget, int stretch = 0)

从右往左向状态栏添加状态

void QStatusBar::addPermanentWidget(QWidget *widget, int stretch = 0)

4. Controles principales

  • 添加文本编辑区
//头文件
#include <QTextEdit>
void QMainWindow::setCentralWidget(QWidget *widget)

将给定的小部件设置为主窗口的中心小部件。

5. Ventana flotante

  • 添加浮动窗口
//头文件
#include <QDockWidget>
  • addDockWidgetFunción:
void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget)

Área Qt :: DockWidgetArea: representa la posición de la ventana flotante , los valores son los siguientes:


Constant Value
Qt::LeftDockWidgetArea 0x1
Qt::RightDockWidgetArea 0x2
Qt::TopDockWidgetArea 0x4
Qt::BottomDockWidgetArea 0x8
Qt::AllDockWidgetAreas
DockWidgetArea_Mask
Qt::NoDockWidgetArea 0

QDockWidget *dockwidget:代表要添加的浮动窗口
作用将给定的dockwidget添加到指定区域

  • addDockWidget函数
void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orientation orientation)

Efecto将dockwidget按方向指定的方向添加到给定区域

完整代码:
mainwindow.cpp

#include "mainwindow.h"
#include <QMenuBar>//菜单栏
#include <QMenu>//菜单
#include <QAction>//菜单项
#include <QDebug>//输出
#include <QToolBar>//工具栏
#include <QPushButton>//按钮
#include <QStatusBar>//状态栏
#include <QLabel>//标签
#include <QTextEdit>//文本编辑器
#include <QDockWidget>//浮动窗口

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QMenuBar* mBar = menuBar();//1.创建一个菜单栏,不用new,直接使用创建好的
    QMenu* pFile = mBar->addMenu("file");//为菜单栏添加菜单
    QAction* pNew =  pFile->addAction("new");//为菜单添加菜单项

    connect(pNew,&QAction::triggered,[=]()//为菜单项添加动作
    {
        qDebug()<<"new is anxia";
    });
    pFile->addSeparator();//为菜单项添加分割线
    QAction* pOpen =  pFile->addAction("open");//再添加一个菜单项
	QToolBar* toolBar = addToolBar("toolBar");//2.添加工具栏
    toolBar->addAction(pNew);//为工具栏添加工具

    QPushButton* b = new QPushButton(this);//按钮控件
    b->setText("^_^");
    toolBar->addWidget(b);//为工具栏添加按钮小控件

    connect(b,&QPushButton::clicked,[=]()//关联按钮动作
    {
        b->setText("@_@");
    }); 
    
	QStatusBar* staBar = statusBar();//3.添加状态栏
    QLabel* label = new QLabel(this);//添加标签
    label->setText("Normal text file");//为标签指定内容
    
    staBar->addWidget(label);//把标签放到状态栏显示,从左往右显示
    staBar->addWidget(new QLabel("999",this));
    staBar->addPermanentWidget(new QLabel("666",this));//从右往左显示

    QTextEdit* textEdit = new QTextEdit(this);//4.创建核心控件--文本编辑器
    setCentralWidget(textEdit);//把文本编辑器放在窗口中央


    QDockWidget* dock = new QDockWidget(this);//5.创建浮动窗口
    addDockWidget(Qt::RightDockWidgetArea,dock);//把浮动窗口放在主窗口的右边
    
    QTextEdit* textEdit1 = new QTextEdit(dock);//为浮动窗口添加编辑器
    setCentralWidget(textEdit1);//把文本编辑器放在浮动窗口的中央
}
MainWindow::~MainWindow()
{

}
Publicado 158 artículos originales · elogiado 117 · 90,000 visitas

Supongo que te gusta

Origin blog.csdn.net/wolfGuiDao/article/details/105478484
Recomendado
Clasificación