垃圾回收机制和菜单栏工具栏
垃圾回收機制和菜單欄工具欄
文章目錄
- 垃圾回收機制和菜單欄工具欄
- 一、垃圾回收機制
- 二、菜單欄工具欄
一、垃圾回收機制
QPushButton* b1 = new QPushButton(this);按鈕也是new出來的空間,所以每次都需要進行釋放,否則會造成內存泄漏。
1. Qt中有一個對象樹,如果指定父對象并且是直接或間接繼承QObject,那么如果子對象是動態(tài)分配空間的,就不需要手動釋放,系統(tǒng)會自動釋放
2. 驗證
因為Qt封裝的按鈕類,我們無法修改,所以自己寫一個按鈕類,動態(tài)申請空間,看是否會自動調用析構函數釋放空間
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_Hmywidget.h:
#ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget> #include <QPushButton> #include "mybutton.h"class MyWidget : public QWidget {Q_OBJECTpublic:MyWidget(QWidget *parent = 0);~MyWidget(); };#endif // MYWIDGET_Hmybutton.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() {}運行結果你會發(fā)現不需要手動釋放,系統(tǒng)會自動釋放
兩個條件:
- 指定父對象
- 類是直接或間接繼承QObject,
滿足這兩個條件系統(tǒng)才會自動釋放子對象中動態(tài)分配的空間
二、菜單欄工具欄
之前我們一直用的是QWidgets基類控件,其提供窗口、按鈕等。
現在我們使用QMainWindow基類控件,提供菜單欄的界面
class MainWindow : public QMainWindow {}1.菜單欄
頭文件:
#include <QMenuBar> #include <QMenu>- 創(chuàng)建菜單欄
QMainWindow::menuBar函數:
QMenuBar *QMainWindow::menuBar() const作用:返回主窗口的菜單欄。如果菜單欄不存在,這個函數創(chuàng)建并返回一個空的菜單欄。
- 添加菜單
QMenuBar::addMenu函數:
QMenu *QMenuBar::addMenu(const QString &title)參數const QString &title為菜單的名字
函數的作用是添加一個菜單
- 添加菜單項(下拉菜單)動作
addAction函數:
QAction *addAction(const QString &text)參數const QString &text代表菜單項或動作的名字
作用創(chuàng)建一個菜單項
- 為菜單項添加動作
作用當用戶激活某個操作時發(fā)出此信號;例如,當用戶單擊菜單選項、工具欄按鈕或按下操作的快捷鍵組合時,
- 為菜單項添加分割線
函數的作用就是為菜單欄的每個菜單項添加分割線,讓菜單項更加清晰。
2.工具欄
工具欄就相當于是菜單欄當中每個菜單中菜單項的快捷方式!
- 添加工具欄
QMainWindow::addToolBar函數:
QToolBar *QMainWindow::addToolBar(const QString &title)作用就是添加一個工具欄
- 添加工具(快捷方式)
addAction函數:
QAction *addAction(const QString &text)參數const QString &text代表工具名字
- 添加小控件
作用在工具來添加小控件
3.狀態(tài)欄
- 添加狀態(tài)欄
- 添加標簽
從左往右向狀態(tài)欄添加狀態(tài):
void QStatusBar::addWidget(QWidget *widget, int stretch = 0)從右往左向狀態(tài)欄添加狀態(tài):
void QStatusBar::addPermanentWidget(QWidget *widget, int stretch = 0)4.核心控件
- 添加文本編輯區(qū)
將給定的小部件設置為主窗口的中心小部件。
5.浮動窗口
- 添加浮動窗口
- addDockWidget函數:
Qt::DockWidgetArea area:代表浮動窗口的位置,取值如下:
Constant Value Qt::LeftDockWidgetArea 0x1 Qt::RightDockWidgetArea 0x2 Qt::TopDockWidgetArea 0x4 Qt::BottomDockWidgetArea 0x8 Qt::AllDockWidgetAreas DockWidgetArea_Mask Qt::NoDockWidgetArea 0QDockWidget *dockwidget:代表要添加的浮動窗口。
作用將給定的dockwidget添加到指定區(qū)域
- addDockWidget函數
作用將dockwidget按方向指定的方向添加到給定區(qū)域
完整代碼:
mainwindow.cpp:
總結
以上是生活随笔為你收集整理的垃圾回收机制和菜单栏工具栏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 带参的信号、lamda表达式及坐标系统
- 下一篇: 对话框