QT基礎七、用純代碼編寫界面

終于迎來了界面開發的實戰環節!今天我們將通過純代碼的方式,親手打造一個界面。如果你對 Qt 感興趣,歡迎訂閱我的 Qt 基礎入門專欄 (完全免費哦)。雖然前面幾篇文章主要是基礎知識講解,可能會顯得稍微平淡,但它們是邁向實戰的重要基石。而今天,我們將迎來一次小型的代碼實戰——用代碼實現一個如下圖所示的完整界面!

這不僅是一次實踐的機會,更是一個讓你快速掌握 Qt 界面開發技巧的絕佳起點。讓我們一起動手,感受代碼的魅力吧!


一、思路

1、分析一下界面構成

這個界面由四種主要組件構成:復選框(用于選擇字體樣式)、單選框(用于設置字體顏色)、文本編輯框以及三個操作按鈕。為了使布局更加清晰和有序,我們可以采用三個水平布局來分別管理這些組件:

  • 第一個水平布局負責排列復選框(字體樣式)。
  • 第二個水平布局用于組織單選框(字體顏色)。
  • 第三個水平布局則用來放置三個操作按鈕。注意一下,關閉按鈕在許多軟件中都是將其放在最右邊,所以,在添加關閉按鈕前,需要添加一個可拉伸的組件,代碼中會有,請注意一下。

接著,我們將這三組水平布局與單獨的文本編輯框依次添加到一個垂直布局中。通過這種方式,整個界面結構層次分明、整潔美觀,所有組件都能在一個統一的垂直布局中井然有序地呈現出來。

2、步驟分析
  1. 界面設計

    • 使用復選框控制字體樣式(下劃線、斜體、粗體)。
    • 使用單選按鈕控制文字顏色(黑色、紅色、綠色)。
    • 使用文本編輯框顯示效果。
    • 使用按鈕(確認、取消、關閉)提供基本操作。
  2. 信號與槽機制

    • 通過信號與槽機制,將用戶操作(如點擊復選框、單選按鈕)與具體的槽函數關聯起來,動態更新文本編輯框的樣式。
  3. 布局管理

    • 使用水平布局和垂直布局合理組織控件,確保界面整潔美觀。
  4. 內存管理

    • 所有控件都設置了父對象,Qt 的父子機制會自動管理內存,避免手動釋放資源。

二、創建一個QDialog項目

這次選用的基類跟前面幾期的基類不一樣,這次用的是QDialog(如果不會創建,請看我第一期),如下圖所示:


三、初始化組件

1、用指針初始化變量的原因:
  1. 動態內存分配 :確保控件的生命周期足夠長。
  2. 父子機制 :支持 Qt 的自動內存管理。
  3. 靈活性 :允許動態創建、共享和傳遞對象。
  4. 節省內存 :避免不必要的對象復制。
  5. 設計哲學 :符合 Qt 的設計理念,特別是信號與槽機制。
2、dialog.h的代碼?
#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QCheckBox>
#include <QRadioButton>
#include <QPlainTextEdit>
#include <QPushButton>
#include <QHBoxLayout>          //水平布局
#include <QVBoxLayout>          //垂直布局class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();private:void initUI();        //初始化組件的函數private://下劃線、斜體、粗體的組件QCheckBox* chkBoxUnderLine;QCheckBox* chkBoxItalic;QCheckBox* chkBoxBold;//黑色、紅色、綠色的組件QRadioButton* rBtnBlack;QRadioButton* rBtnRed;QRadioButton* rBtnGreen;//文本編輯器的組件QPlainTextEdit* txtEdit;//確定、取消、退出的組件QPushButton* btnOk;QPushButton* btnCancel;QPushButton* btnClose;//水平布局編輯器QHBoxLayout* hLayout1;QHBoxLayout* hLayout2;QHBoxLayout* hLayout3;//垂直布局編輯器QVBoxLayout* vLayout;
};
#endif // DIALOG_H
3、void initUI()的代碼
void Dialog::initUI()
{// 創建字體相關的復選框chkBoxUnderLine = new QCheckBox("下劃線");  // 下劃線復選框chkBoxItalic = new QCheckBox("斜體");       // 斜體復選框chkBoxBold = new QCheckBox("粗體");         // 粗體復選框// 創建水平布局1,并將字體相關的復選框添加到該布局中hLayout1 = new QHBoxLayout;                 // 創建水平布局1hLayout1->addWidget(chkBoxUnderLine);       // 將下劃線復選框添加到水平布局1hLayout1->addWidget(chkBoxItalic);          // 將斜體復選框添加到水平布局1hLayout1->addWidget(chkBoxBold);            // 將粗體復選框添加到水平布局1// 創建顏色相關的單選按鈕rBtnBlack = new QRadioButton("黑色");       // 黑色單選按鈕rBtnBlack->setChecked(true);                //默認黑色單選已選上rBtnRed = new QRadioButton("紅色");         // 紅色單選按鈕rBtnGreen = new QRadioButton("綠色");       // 綠色單選按鈕// 創建水平布局2,并將顏色相關的單選按鈕添加到該布局中hLayout2 = new QHBoxLayout;                 // 創建水平布局2hLayout2->addWidget(rBtnBlack);             // 將黑色單選按鈕添加到水平布局2hLayout2->addWidget(rBtnRed);               // 將紅色單選按鈕添加到水平布局2hLayout2->addWidget(rBtnGreen);             // 將綠色單選按鈕添加到水平布局2// 創建一個多行文本編輯框,用于顯示或輸入文本txtEdit = new QPlainTextEdit;               // 創建一個純文本編輯框//將文本編輯框的字體大小調大auto font = txtEdit->font();font.setPointSize(20);txtEdit->setFont(font);// 創建操作按鈕btnOk = new QPushButton("確認");            // 確認按鈕btnCancel = new QPushButton("取消");        // 取消按鈕btnClose = new QPushButton("關閉");         // 關閉按鈕hLayout3 = new QHBoxLayout;                 // 創建水平布局3hLayout3->addWidget(btnOk);                 // 將確認按鈕添加到水平布局3hLayout3->addWidget(btnCancel);             // 將取消按鈕添加到水平布局3hLayout3->addStretch();                     // 添加一個可拉伸的空間,使按鈕靠左對齊hLayout3->addWidget(btnClose);              // 將關閉按鈕添加到水平布局3vLayout = new QVBoxLayout;                  // 創建垂直布局vLayout->addLayout(hLayout1);               // 將水平布局1(字體復選框)添加到垂直布局vLayout->addLayout(hLayout2);               // 將水平布局2(顏色單選按鈕)添加到垂直布局vLayout->addWidget(txtEdit);                // 將文本編輯框添加到垂直布局vLayout->addLayout(hLayout3);               // 將水平布局3(操作按鈕)添加到垂直布局setLayout(vLayout);                         // 將垂直布局設置為當前窗口的布局
}

四、初始化信號和槽

在QT中,想要讓按鈕和選項框生效,那么就必須引入信號和槽,因為我們用了QT自帶的組件,所以我們可以用QT中自帶的信號,至于槽函數需要我們自己去編寫

1、dialog.h的代碼?
#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QCheckBox>
#include <QRadioButton>
#include <QPlainTextEdit>
#include <QPushButton>
#include <QHBoxLayout>          //水平布局
#include <QVBoxLayout>          //垂直布局
#include <QMessageBox>class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();private:void initUI();void initSignalSlots();    //初始化信號和槽private slots://字體復選框槽函數void onChkBoxUnderLine(bool checked);void onChkBoxItalic(bool checked);void onChkBoxBold(bool checked);//顏色單選框槽函數void setTextFontColor();//確認的功能按鈕void pushButtonOk();//取消的功能按鈕void pushButtonCancel();private://下劃線、斜體、粗體的組件QCheckBox* chkBoxUnderLine;QCheckBox* chkBoxItalic;QCheckBox* chkBoxBold;//黑色、紅色、綠色的組件QRadioButton* rBtnBlack;QRadioButton* rBtnRed;QRadioButton* rBtnGreen;//文本編輯器的組件QPlainTextEdit* txtEdit;//確定、取消、退出的組件QPushButton* btnOk;QPushButton* btnCancel;QPushButton* btnClose;//水平布局編輯器QHBoxLayout* hLayout1;QHBoxLayout* hLayout2;QHBoxLayout* hLayout3;//垂直布局編輯器QVBoxLayout* vLayout;
};
#endif // DIALOG_H

更新的部分?

?2、void initSignalSlots()的代碼
void Dialog::initSignalSlots()
{//復選框connect(chkBoxUnderLine, SIGNAL(clicked(bool)),this, SLOT(onChkBoxUnderLine(bool)));connect(chkBoxItalic, SIGNAL(clicked(bool)),this, SLOT(onChkBoxItalic(bool)));connect(chkBoxBold, SIGNAL(clicked(bool)),this, SLOT(onChkBoxBold(bool)));//單選框connect(rBtnBlack, SIGNAL(clicked()), this, SLOT(setTextFontColor()));connect(rBtnRed, SIGNAL(clicked()), this, SLOT(setTextFontColor()));connect(rBtnGreen, SIGNAL(clicked()), this, SLOT(setTextFontColor()));//功能按鈕connect(btnOk, SIGNAL(clicked()), this, SLOT(pushButtonOk()));connect(btnCancel, SIGNAL(clicked()), this, SLOT(pushButtonCancel()));connect(btnClose, SIGNAL(clicked()), this, SLOT(close()));
}
3、實現復選框的三個槽函數
// 當下劃線復選框被點擊時,該槽函數會被調用。
// 參數 clicked 表示復選框的當前狀態(true 表示選中,false 表示未選中)。
void Dialog::onChkBoxUnderLine(bool clicked)
{// 獲取文本編輯框當前的字體auto font = txtEdit->font();// 根據復選框的狀態設置字體的下劃線屬性font.setUnderline(clicked);// 將修改后的字體重新設置回文本編輯框txtEdit->setFont(font);
}// 當斜體復選框被點擊時,該槽函數會被調用。
void Dialog::onChkBoxItalic(bool clicked)
{// 獲取文本編輯框當前的字體auto font = txtEdit->font();// 根據復選框的狀態設置字體的斜體屬性font.setItalic(clicked);// 將修改后的字體重新設置回文本編輯框txtEdit->setFont(font);
}// 當粗體復選框被點擊時,該槽函數會被調用。
void Dialog::onChkBoxBold(bool clicked)
{// 獲取文本編輯框當前的字體auto font = txtEdit->font();// 根據復選框的狀態設置字體的粗體屬性font.setBold(clicked);// 將修改后的字體重新設置回文本編輯框txtEdit->setFont(font);
}
4、實現單選框的槽函數
// 設置文本編輯框的文字顏色
void Dialog::setTextFontColor()
{// 獲取文本編輯框的當前調色板auto palette = txtEdit->palette();// 檢查黑色單選按鈕是否被選中if (rBtnBlack->isChecked()) {// 如果黑色單選按鈕被選中,將調色板中的文字顏色設置為黑色palette.setColor(QPalette::Text, Qt::black);} // 檢查紅色單選按鈕是否被選中else if (rBtnRed->isChecked()) {// 如果紅色單選按鈕被選中,將調色板中的文字顏色設置為紅色palette.setColor(QPalette::Text, Qt::red);} // 檢查綠色單選按鈕是否被選中else if (rBtnGreen->isChecked()) {// 如果綠色單選按鈕被選中,將調色板中的文字顏色設置為綠色palette.setColor(QPalette::Text, Qt::green);}// 將修改后的調色板重新應用到文本編輯框txtEdit->setPalette(palette);
}
5、設計功能按鈕的槽函數

可以自己設計要進行的內容,我的確認按鈕是輸出文本中每一行的頭一個元素,取消按鈕就是輸出一個已取消,關閉按鈕用了QT自帶的 close() 函數

void Dialog::pushButtonOk()
{auto text = txtEdit->toPlainText();     //將文本轉換為QStringauto strList = text.split("\n");QString ret;for(auto& str: strList) {ret += str[0];}QMessageBox::information(this, "提示", ret);
}void Dialog::pushButtonCancel()
{QMessageBox::information(this, "提示", "已取消");
}

五、運行代碼

1、項目的所有代碼

1. dialog.h:?

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QCheckBox>
#include <QRadioButton>
#include <QPlainTextEdit>
#include <QPushButton>
#include <QHBoxLayout>          //水平布局
#include <QVBoxLayout>          //垂直布局
#include <QMessageBox>class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();private:void initUI();void initSignalSlots();private slots://字體復選框槽函數void onChkBoxUnderLine(bool checked);void onChkBoxItalic(bool checked);void onChkBoxBold(bool checked);//顏色單選框槽函數void setTextFontColor();//確認的功能按鈕void pushButtonOk();//取消的功能按鈕void pushButtonCancel();private://下劃線、斜體、粗體的組件QCheckBox* chkBoxUnderLine;QCheckBox* chkBoxItalic;QCheckBox* chkBoxBold;//黑色、紅色、綠色的組件QRadioButton* rBtnBlack;QRadioButton* rBtnRed;QRadioButton* rBtnGreen;//文本編輯器的組件QPlainTextEdit* txtEdit;//確定、取消、退出的組件QPushButton* btnOk;QPushButton* btnCancel;QPushButton* btnClose;//水平布局編輯器QHBoxLayout* hLayout1;QHBoxLayout* hLayout2;QHBoxLayout* hLayout3;//垂直布局編輯器QVBoxLayout* vLayout;
};
#endif // DIALOG_H

2. dialog.cpp:

#include "dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent)
{resize(800, 400);initUI();initSignalSlots();}Dialog::~Dialog()
{}void Dialog::initUI()
{// 創建字體相關的復選框chkBoxUnderLine = new QCheckBox("下劃線");  // 下劃線復選框chkBoxItalic = new QCheckBox("斜體");       // 斜體復選框chkBoxBold = new QCheckBox("粗體");         // 粗體復選框// 創建水平布局1,并將字體相關的復選框添加到該布局中hLayout1 = new QHBoxLayout;                 // 創建水平布局1hLayout1->addWidget(chkBoxUnderLine);       // 將下劃線復選框添加到水平布局1hLayout1->addWidget(chkBoxItalic);          // 將斜體復選框添加到水平布局1hLayout1->addWidget(chkBoxBold);            // 將粗體復選框添加到水平布局1// 創建顏色相關的單選按鈕rBtnBlack = new QRadioButton("黑色");       // 黑色單選按鈕rBtnBlack->setChecked(true);                //默認黑色單選已選上rBtnRed = new QRadioButton("紅色");         // 紅色單選按鈕rBtnGreen = new QRadioButton("綠色");       // 綠色單選按鈕// 創建水平布局2,并將顏色相關的單選按鈕添加到該布局中hLayout2 = new QHBoxLayout;                 // 創建水平布局2hLayout2->addWidget(rBtnBlack);             // 將黑色單選按鈕添加到水平布局2hLayout2->addWidget(rBtnRed);               // 將紅色單選按鈕添加到水平布局2hLayout2->addWidget(rBtnGreen);             // 將綠色單選按鈕添加到水平布局2// 創建一個多行文本編輯框,用于顯示或輸入文本txtEdit = new QPlainTextEdit;               // 創建一個純文本編輯框//將文本編輯框的字體大小調大auto font = txtEdit->font();font.setPointSize(20);txtEdit->setFont(font);// 創建操作按鈕btnOk = new QPushButton("確認");            // 確認按鈕btnCancel = new QPushButton("取消");        // 取消按鈕btnClose = new QPushButton("關閉");         // 關閉按鈕hLayout3 = new QHBoxLayout;                 // 創建水平布局3hLayout3->addWidget(btnOk);                 // 將確認按鈕添加到水平布局3hLayout3->addWidget(btnCancel);             // 將取消按鈕添加到水平布局3hLayout3->addStretch();                     // 添加一個可拉伸的空間,使按鈕靠左對齊hLayout3->addWidget(btnClose);              // 將關閉按鈕添加到水平布局3vLayout = new QVBoxLayout;                  // 創建垂直布局vLayout->addLayout(hLayout1);               // 將水平布局1(字體復選框)添加到垂直布局vLayout->addLayout(hLayout2);               // 將水平布局2(顏色單選按鈕)添加到垂直布局vLayout->addWidget(txtEdit);                // 將文本編輯框添加到垂直布局vLayout->addLayout(hLayout3);               // 將水平布局3(操作按鈕)添加到垂直布局setLayout(vLayout);                         // 將垂直布局設置為當前窗口的布局
}void Dialog::initSignalSlots()
{//復選框connect(chkBoxUnderLine, SIGNAL(clicked(bool)),this, SLOT(onChkBoxUnderLine(bool)));connect(chkBoxItalic, SIGNAL(clicked(bool)),this, SLOT(onChkBoxItalic(bool)));connect(chkBoxBold, SIGNAL(clicked(bool)),this, SLOT(onChkBoxBold(bool)));//單選框connect(rBtnBlack, SIGNAL(clicked()), this, SLOT(setTextFontColor()));connect(rBtnRed, SIGNAL(clicked()), this, SLOT(setTextFontColor()));connect(rBtnGreen, SIGNAL(clicked()), this, SLOT(setTextFontColor()));//功能按鈕connect(btnOk, SIGNAL(clicked()), this, SLOT(pushButtonOk()));connect(btnCancel, SIGNAL(clicked()), this, SLOT(pushButtonCancel()));connect(btnClose, SIGNAL(clicked()), this, SLOT(close()));
}// 當下劃線復選框被點擊時,該槽函數會被調用。
// 參數 clicked 表示復選框的當前狀態(true 表示選中,false 表示未選中)。
void Dialog::onChkBoxUnderLine(bool clicked)
{// 獲取文本編輯框當前的字體auto font = txtEdit->font();// 根據復選框的狀態設置字體的下劃線屬性font.setUnderline(clicked);// 將修改后的字體重新設置回文本編輯框txtEdit->setFont(font);
}// 當斜體復選框被點擊時,該槽函數會被調用。
void Dialog::onChkBoxItalic(bool clicked)
{// 獲取文本編輯框當前的字體auto font = txtEdit->font();// 根據復選框的狀態設置字體的斜體屬性font.setItalic(clicked);// 將修改后的字體重新設置回文本編輯框txtEdit->setFont(font);
}// 當粗體復選框被點擊時,該槽函數會被調用。
void Dialog::onChkBoxBold(bool clicked)
{// 獲取文本編輯框當前的字體auto font = txtEdit->font();// 根據復選框的狀態設置字體的粗體屬性font.setBold(clicked);// 將修改后的字體重新設置回文本編輯框txtEdit->setFont(font);
}// 設置文本編輯框的文字顏色
void Dialog::setTextFontColor()
{// 獲取文本編輯框的當前調色板auto palette = txtEdit->palette();// 檢查黑色單選按鈕是否被選中if (rBtnBlack->isChecked()) {// 如果黑色單選按鈕被選中,將調色板中的文字顏色設置為黑色palette.setColor(QPalette::Text, Qt::black);} // 檢查紅色單選按鈕是否被選中else if (rBtnRed->isChecked()) {// 如果紅色單選按鈕被選中,將調色板中的文字顏色設置為紅色palette.setColor(QPalette::Text, Qt::red);} // 檢查綠色單選按鈕是否被選中else if (rBtnGreen->isChecked()) {// 如果綠色單選按鈕被選中,將調色板中的文字顏色設置為綠色palette.setColor(QPalette::Text, Qt::green);}// 將修改后的調色板重新應用到文本編輯框txtEdit->setPalette(palette);
}void Dialog::pushButtonOk()
{auto text = txtEdit->toPlainText();     //將文本轉換為QStringauto strList = text.split("\n");QString ret;for(auto& str: strList) {ret += str[0];}QMessageBox::information(this, "提示", ret);
}void Dialog::pushButtonCancel()
{QMessageBox::information(this, "提示", "已取消");
}

3. main.cpp:

#include "dialog.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Dialog w;w.show();return a.exec();
}
2、運行結果

點擊確認?

點擊取消?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/71370.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71370.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/71370.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

我用AI做數據分析之數據清洗

我用AI做數據分析之數據清洗 AI與數據分析的融合效果怎樣&#xff1f; 這里描述自己在使用AI進行數據分析&#xff08;數據清洗&#xff09;過程中的幾個小故事&#xff1a; 1. 變量名的翻譯 有一個項目是某醫生自己收集的數據&#xff0c;變量名使用的是中文&#xff0c;分…

C++11 thread

文章目錄 C11 線程庫線程對象的構造方式無參的構造函數調用帶參的構造函數調用移動構造函數thread常用成員函數 this_thread命名空間join && detachmutex C11 線程庫 線程對象的構造方式 無參的構造函數 1、調用無參的構造函數,調用無參的構造函數創建出來的線程對象…

List<Map<String, Object>> 如何對某個字段求和

在Java中&#xff0c;如果你有一個List<Map<String, Object>>的結構&#xff0c;并且你想要對某個特定字段進行求和&#xff0c;你可以使用Java 8的Stream API來簡化這個過程。下面是一個示例代碼&#xff0c;演示如何對某個字段進行求和。 假設你有一個List<M…

Linux 固定 IP 地址和網關

Linux 固定 IP 地址和網關 查看 IP ifconfig ifconfig eth0 ip addr ip addr show eth0 查看網關 ip route show route -n netstat -rn 設置固定 IP // 配置靜態IP文件/etc/network/interfaces $ vi /etc/network/interfacesauto eth0 iface eth0 inet static addre…

移動通信發展史

概念解釋 第一代網絡通信 1G 第二代網絡通信 2G 第三代網絡通信 3G 第四代網絡通信 4G 4g網絡有很高的速率和很低的延時——高到500M的上傳和1G的下載 日常中的4G只是用到了4G技術 運營商 移動-從民企到國企 聯通-南方教育口有人 電信 鐵通&#xff1a;成立于 2000 年…

進階數據結構——樹狀數組

前言 看這篇文章前我建議你們先看這個視頻還有這個視頻&#xff0c;不然你們可能看不懂。 一、樹狀數組的核心思想與本質 核心思想&#xff1a;樹狀數組&#xff08;Fenwick Tree&#xff09;是一種用于高效處理前綴和查詢和單點更新的數據結構。 本質&#xff1a;通過二進…

LabVIEW無刷電機控制器檢測系統

開發了一種基于LabVIEW的無刷電機控制器檢測系統。由于無刷電機具有高效率、低能耗等優點&#xff0c;在電動領域有取代傳統電機的趨勢&#xff0c;而無刷電機的核心部件無刷電機控制器產量也在不斷增長。然而&#xff0c;無刷電機控制器的出廠檢測仍處于半自動化狀態&#xff…

STM32 CAN過濾器配置和應用方法介紹

目錄 概述 一、CAN過濾器核心概念 二、過濾器配置步驟&#xff08;以標準ID為例&#xff09; 三、不同模式的配置示例 四、高級配置技巧 五、調試與問題排查 六、關鍵計算公式 總結 概述 在STM32微控制器中&#xff0c;CAN過濾器可以配置為標識符屏蔽模式和標識符列表模…

個人系統架構技術分享

架構技術 技術版本說明CentOS7.9操作系統Amoeba負責MySQL讀寫分離NFS分布式存儲ISCSI塊存儲keepalived日志收集MySQL5.7數據庫存儲MinIO8.4.5對象存儲Kubernetes1.23.15應用容器管理平臺Redis7.0分布式緩存Elasticsearch7.17.3搜索引擎nacos3.3.4服務注冊 后端技術 技術版本…

python進階篇-面向對象

1.對象的定義 1.1 什么是對象 面向過程&#xff1a;將程序流程化 對象&#xff1a;就是“容器“&#xff0c;是用來存儲數據和功能的&#xff0c;是數據和功能的集合體。 面向對象和面向過程沒有優劣之分&#xff0c;它們只是使用的場景不同罷了。 1.2 為什么要有對象 有…

網絡安全“掛圖作戰“及其場景

文章目錄 一、網絡安全掛圖作戰來源與定義1、網絡安全掛圖作戰的來源2、網絡安全掛圖作戰的定義 二、掛圖作戰關鍵技術三、掛圖作戰與傳統態勢感知的差異四、掛圖作戰主要場景五、未來趨勢結語 一、網絡安全掛圖作戰來源與定義 1、網絡安全掛圖作戰的來源 網絡安全掛圖作戰的…

【嵌入式Linux應用開發基礎】read函數與write函數

目錄 一、read 函數 1.1. 函數原型 1.2. 參數說明 1.3. 返回值 1.4. 示例代碼 二、write 函數 2.1. 函數原型 2.2. 參數說明 2.3. 返回值 2.4. 示例代碼 三、關鍵注意事項 3.1 部分讀寫 3.2 錯誤處理 3.3 阻塞與非阻塞模式 3.4 數據持久化 3.5 線程安全 四、嵌…

嵌入式八股文(四)計算機網絡篇

第一章 基礎概念 1. 服務 指網絡中各層為緊鄰的上層提供的功能調用,是垂直的。包括面向連接服務、無連接服務、可靠服務、不可靠服務。 2. 協議 是計算機?絡相互通信的對等層實體之間交換信息時必須遵守的規則或約定的集合。?絡協議的三個基本要素:語法、…

LabVIEW 天然氣水合物電聲聯合探測

天然氣水合物被認為是潛在的清潔能源&#xff0c;其儲量豐富&#xff0c;預計將在未來能源格局中扮演重要角色。由于其獨特的物理化學特性&#xff0c;天然氣水合物的探測面臨諸多挑戰&#xff0c;涉及溫度、壓力、電學信號、聲學信號等多個參數。傳統的人工操作方式不僅效率低…

JAVA代碼走查重構常用prompt

代碼重構prompt&#xff1a; ## 主題&#xff1a; 代碼重構 ## 角色扮演: 你是軟件開發大師Martin Fowler&#xff0c;精通代碼重構、面向對象編程、Clean Code和設計模式&#xff0c;且熟練掌握《重構&#xff0c;改善既有代碼的設計》這本書中的重構思想和各種重構方法。 ## …

[數據結構]紅黑樹,詳細圖解插入

目錄 一、紅黑樹的概念 二、紅黑樹的性質 三、紅黑樹節點的定義 四、紅黑樹的插入&#xff08;步驟&#xff09; 1.為什么新插入的節點必須給紅色&#xff1f; 2、插入紅色節點后&#xff0c;判定紅黑樹性質是否被破壞 五、插入出現連續紅節點情況分析圖解&#xff08;看…

STM32 HAL庫USART串口DMA IDLE中斷編程:避坑指南

HAL_UART_Receive接收最容易丟數據了,STM32 HAL庫UART查詢方式實例 可以考慮用中斷來實現,但是HAL_UART_Receive_IT還不能直接用,容易數據丟失,實際工作中不會這樣用,STM32 HAL庫USART串口中斷編程&#xff1a;演示數據丟失, 需要在此基礎優化一下. STM32F103 HAL庫USART串口…

sql注入中information_schema被過濾的問題

目錄 一、information_schema庫的作用 二、獲得表名 2.1 sys.schema_auto_increment_columns 2.2 schema_table_statistics 三、獲得列名 join … using … order by盲注 子查詢 在進行sql注入時&#xff0c;我們經常會使用information_schema來進行爆數據庫名、表名、…

Jenkins 給任務分配 節點(Node)、設置工作空間目錄

Jenkins 給任務分配 節點(Node)、設置工作空間目錄 創建 Freestyle project 類型 任務 任務配置 Node 打開任務-> Configure-> General 勾選 Restrict where this project can be run Label Expression 填寫一個 Node 的 Label&#xff0c;輸入有效的 Label名字&#x…

Electron:使用electron-react-boilerplate創建一個react + electron的項目

使用 electron-react-boilerplate git clone --depth 1 --branch main https://github.com/electron-react-boilerplate/electron-react-boilerplate.git your-project-name cd your-project-name npm install npm start 安裝不成功 在根目錄加上 .npmrc文件 內容為 electron_…