日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

垃圾回收机制和菜单栏工具栏

發(fā)布時間:2024/4/11 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 垃圾回收机制和菜单栏工具栏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

垃圾回收機制和菜單欄工具欄

文章目錄

    • 垃圾回收機制和菜單欄工具欄
    • 一、垃圾回收機制
    • 二、菜單欄工具欄

一、垃圾回收機制

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_H

mywidget.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_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() {}

運行結果你會發(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為菜單的名字
函數的作用是添加一個菜單

  • 添加菜單項(下拉菜單)動作
//頭文件 #include <QAction>

addAction函數:

QAction *addAction(const QString &text)

參數const QString &text代表菜單項或動作的名字
作用創(chuàng)建一個菜單項

  • 為菜單項添加動作
void triggered(bool checked = false);

作用當用戶激活某個操作時發(fā)出此信號;例如,當用戶單擊菜單選項、工具欄按鈕或按下操作的快捷鍵組合時,

  • 為菜單項添加分割線
QAction *QMenu::addSeparator()

函數的作用就是為菜單欄的每個菜單項添加分割線,讓菜單項更加清晰。

2.工具欄

工具欄就相當于是菜單欄當中每個菜單中菜單項的快捷方式!

  • 添加工具欄
//頭文件 #include <QToolBar>

QMainWindow::addToolBar函數:

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

作用就是添加一個工具欄

  • 添加工具(快捷方式)

addAction函數:

QAction *addAction(const QString &text)

參數const QString &text代表工具名字

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

作用在工具來添加小控件

3.狀態(tài)欄

  • 添加狀態(tài)欄
//頭文件 #include <QStatusBar>
  • 添加標簽
//頭文件 #include <QLabel>

從左往右向狀態(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ū)
//頭文件 #include <QTextEdit> void QMainWindow::setCentralWidget(QWidget *widget)

將給定的小部件設置為主窗口的中心小部件。

5.浮動窗口

  • 添加浮動窗口
//頭文件 #include <QDockWidget>
  • addDockWidget函數:
void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget)

Qt::DockWidgetArea area:代表浮動窗口的位置,取值如下:

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

QDockWidget *dockwidget:代表要添加的浮動窗口。
作用將給定的dockwidget添加到指定區(qū)域

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

作用將dockwidget按方向指定的方向添加到給定區(qū)域

完整代碼:
mainwindow.cpp:

#include "mainwindow.h" #include <QMenuBar>//菜單欄 #include <QMenu>//菜單 #include <QAction>//菜單項 #include <QDebug>//輸出 #include <QToolBar>//工具欄 #include <QPushButton>//按鈕 #include <QStatusBar>//狀態(tài)欄 #include <QLabel>//標簽 #include <QTextEdit>//文本編輯器 #include <QDockWidget>//浮動窗口MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {QMenuBar* mBar = menuBar();//1.創(chuàng)建一個菜單欄,不用new,直接使用創(chuàng)建好的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.添加狀態(tài)欄QLabel* label = new QLabel(this);//添加標簽label->setText("Normal text file");//為標簽指定內容staBar->addWidget(label);//把標簽放到狀態(tài)欄顯示,從左往右顯示staBar->addWidget(new QLabel("999",this));staBar->addPermanentWidget(new QLabel("666",this));//從右往左顯示QTextEdit* textEdit = new QTextEdit(this);//4.創(chuàng)建核心控件--文本編輯器setCentralWidget(textEdit);//把文本編輯器放在窗口中央QDockWidget* dock = new QDockWidget(this);//5.創(chuàng)建浮動窗口addDockWidget(Qt::RightDockWidgetArea,dock);//把浮動窗口放在主窗口的右邊QTextEdit* textEdit1 = new QTextEdit(dock);//為浮動窗口添加編輯器setCentralWidget(textEdit1);//把文本編輯器放在浮動窗口的中央 } MainWindow::~MainWindow() {}

總結

以上是生活随笔為你收集整理的垃圾回收机制和菜单栏工具栏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。