国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【QT】MDI應(yīng)用程序設(shè)計(jì)

這篇具有很好參考價(jià)值的文章主要介紹了【QT】MDI應(yīng)用程序設(shè)計(jì)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

1 MDI簡(jiǎn)介

2 文檔窗口類(lèi)QFormDoc的設(shè)計(jì)

3 MDI主窗口設(shè)計(jì)與子窗口的使用

3.1 主窗口界面設(shè)計(jì)

3.2 MDI子窗口的創(chuàng)建與加入

3.3 QMdiArea常用功能函數(shù)

3.4 MDI的信號(hào)

1 MDI簡(jiǎn)介

?? ??? ?傳統(tǒng)的應(yīng)用程序設(shè)計(jì)中有多文檔界面(Multi-documentInterface,MDI)應(yīng)用程序,Qt為設(shè)計(jì)
MDI應(yīng)用程序提供了支持。
?? ??? ?本節(jié)的實(shí)例samp6_4是一個(gè)MDI應(yīng)用程序,程序運(yùn)行效果如圖6-14所示。MDI應(yīng)用程序就
是在主窗口里創(chuàng)建多個(gè)同類(lèi)型的MDI子窗口,這些MDI子窗口在主窗口里顯示,并共享主窗口
上的工具欄和菜單等操作功能,主窗口上的操作都針對(duì)當(dāng)前活動(dòng)的MDI子窗口進(jìn)行。
?? ??? ?設(shè)計(jì)MDI應(yīng)用程序需要在主窗口工作區(qū)放置一個(gè)QMdiArea作為子窗體的容器。實(shí)例samp6_4
主窗口的工作區(qū)使用一個(gè)QMdiArea組件,實(shí)例的子窗口類(lèi)是QFormDoc,是一個(gè)使用QPlainTextEdit進(jìn)行簡(jiǎn)單文本顯示和編輯的窗體。
【QT】MDI應(yīng)用程序設(shè)計(jì),Qt,qt,開(kāi)發(fā)語(yǔ)言,MDI
圖6-14 MDI應(yīng)用程序?qū)嵗齭amp6_4的運(yùn)行時(shí)界面
?? ??? ?創(chuàng)建的QFormDoc窗體對(duì)象作為一個(gè)子窗口加入到mdiArea組件中。QMdiArea組件類(lèi)似于 實(shí)例 samp6_3 中主窗口上的 tabWidget 組件,只是 QMdiArea 提供更加完備的功能。更改 MDI 的 顯示模式,可以得到與實(shí)例 samp6_3 相似的以多頁(yè)組件管理的 MDI 界面效果。

2 文檔窗口類(lèi)QFormDoc的設(shè)計(jì)

?? ??? ?以可視化方式創(chuàng)建一個(gè)基于QWidget的類(lèi)QFormDoc,設(shè)計(jì)可視化界面時(shí),只放置一個(gè) QPlainTextEdit組件,并以水平布局填充滿(mǎn)整個(gè)窗口。這里不再用可視化的方式設(shè)計(jì)Action,因?yàn)? QFormDoc窗口不需要?jiǎng)?chuàng)建自己的工具欄,而是使用主窗口上的工具欄按鈕對(duì)QFormDoc窗體上
的QPlainTextEdit組件進(jìn)行操作。
?? ??? ?為QFormDoc添加一些用于文件打開(kāi)和編輯操作的接口函數(shù),QFormDoc類(lèi)的完整定義如下:
class QFormDoc : public QWidget
{
    Q_OBJECT

private:
    QString mCurrentFile; //當(dāng)前文件
    bool    mFileOpened=false; //文件已打開(kāi)

public:
    explicit QFormDoc(QWidget *parent = 0);
    ~QFormDoc();

    void    loadFromFile(QString& aFileName); //打開(kāi)文件
    QString currentFileName();//返回當(dāng)前文件名
    bool    isFileOpened();//文件已經(jīng)打開(kāi)

    void    setEditFont();//設(shè)置字體
    void    textCut(); //cut
    void    textCopy(); //copy
    void    textPaste(); //paste

private:
    Ui::QFormDoc *ui;

};

????????????????這些接口函數(shù)是為了在主窗口里調(diào)用,實(shí)現(xiàn)對(duì)MDI子窗口的操作。實(shí)現(xiàn)代碼如下:

QFormDoc::QFormDoc(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::QFormDoc)
{
    ui->setupUi(this);

    this->setWindowTitle("New Doc"); //窗口標(biāo)題
    this->setAttribute(Qt::WA_DeleteOnClose); //關(guān)閉時(shí)自動(dòng)刪除
}

QFormDoc::~QFormDoc()
{
    QMessageBox::information(this,"信息","文檔窗口被釋放");
    delete ui;
}

void QFormDoc::loadFromFile(QString &aFileName)
{//打開(kāi)文件
    QFile aFile(aFileName);  //以文件方式讀出
    if (aFile.open(QIODevice::ReadOnly | QIODevice::Text)) //以只讀文本方式打開(kāi)文件
    {
        QTextStream aStream(&aFile); //用文本流讀取文件
        ui->plainTextEdit->clear();//清空
        ui->plainTextEdit->setPlainText(aStream.readAll()); //讀取文本文件
        aFile.close();//關(guān)閉文件

        mCurrentFile=aFileName;//保存當(dāng)前文件名
        QFileInfo   fileInfo(aFileName); //文件信息
        QString str=fileInfo.fileName(); //去除路徑后的文件名
        this->setWindowTitle(str);
        mFileOpened=true;
    }
}

QString QFormDoc::currentFileName()
{
    return  mCurrentFile;
}

bool QFormDoc::isFileOpened()
{ //文件是否已打開(kāi)
    return mFileOpened;
}

void QFormDoc::setEditFont()
{
    QFont   font;
    font=ui->plainTextEdit->font();

    bool    ok;
    font=QFontDialog::getFont(&ok,font);
    ui->plainTextEdit->setFont(font);
}

void QFormDoc::textCut()
{
    ui->plainTextEdit->cut();
}

void QFormDoc::textCopy()
{
    ui->plainTextEdit->copy();
}

void QFormDoc::textPaste()
{
    ui->plainTextEdit->paste();
}
?? ??????注意:作為MDI子窗口,不管其是否設(shè)置為關(guān)閉時(shí)刪除,在主窗口里關(guān)閉一個(gè)MDI子窗口時(shí),都會(huì)刪除子 窗口對(duì)象。

3 MDI主窗口設(shè)計(jì)與子窗口的使用

3.1 主窗口界面設(shè)計(jì)

?? ??? ?要在主窗口實(shí)現(xiàn)MDI功能,只需在主窗口的工作區(qū)放置一個(gè)QMdiArea組件。圖6·-15是設(shè)計(jì) 好的主窗口界面。
【QT】MDI應(yīng)用程序設(shè)計(jì),Qt,qt,開(kāi)發(fā)語(yǔ)言,MDI
圖6-15 設(shè)計(jì)時(shí)的主窗口
?? ??? ?在UI設(shè)計(jì)器里創(chuàng)建Action,并應(yīng)用Action設(shè)計(jì)主工具欄。在主窗口的工作區(qū)放置一個(gè) QMdiArea組件,然后在主窗口的構(gòu)造函數(shù)里設(shè)置mdiArea填充滿(mǎn)工作區(qū)。
QWMainWindow::QWMainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::QWMainWindow)
{
    ui->setupUi(this);

    this->setCentralWidget(ui->mdiArea);
    this->setWindowState(Qt::WindowMaximized); //窗口最大化顯示
    ui->mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
}

3.2 MDI子窗口的創(chuàng)建與加入

?? ??? ?下面是主窗口上“新建文檔”按鈕的響應(yīng)代碼:
void QWMainWindow::on_actDoc_New_triggered()
{ //新建文件
    QFormDoc *formDoc = new QFormDoc(this); //
    ui->mdiArea->addSubWindow(formDoc); //文檔窗口添加到MDI
    formDoc->show(); //在單獨(dú)的窗口中顯示
}

? ? ? ? 代碼功能是新建一個(gè)QFormDoc類(lèi)的窗口formDoc,構(gòu)造函數(shù)中傳入了主窗口指針,所以主窗口是formDoc的父窗口,然后使用QMdiArea的addSubWindow()函數(shù)將formDoc加入到mdiArea。

?? ??? ?下面是主窗口上“打開(kāi)文檔”按鈕的響應(yīng)代碼:

void QWMainWindow::on_actDoc_Open_triggered()
{//打開(kāi)文件
//必須先獲取當(dāng)前MDI子窗口,再使用打開(kāi)文件對(duì)話(huà)框,否則無(wú)法獲得活動(dòng)的子窗口
    bool needNew=false;// 是否需要新建子窗口

    QFormDoc    *formDoc;
    if (ui->mdiArea->subWindowList().count()>0) //如果有打開(kāi)的主窗口,獲取活動(dòng)窗口
    {
        formDoc=(QFormDoc*)ui->mdiArea->activeSubWindow()->widget();
        needNew=formDoc->isFileOpened();//文件已經(jīng)打開(kāi),需要新建窗口
    }
    else
        needNew=true;

    QString curPath=QDir::currentPath();
    QString aFileName=QFileDialog::getOpenFileName(this,tr("打開(kāi)一個(gè)文件"),curPath,
                 "C程序文件(*.h *cpp);;文本文件(*.txt);;所有文件(*.*)");
    if (aFileName.isEmpty())
        return; //如果未選擇文件,退出

    if (needNew) //需要新建子窗口
    {
        formDoc = new QFormDoc(this);//指定父窗口,必須在父窗口為Widget窗口提供一個(gè)顯示區(qū)域
        ui->mdiArea->addSubWindow(formDoc);
    }

    formDoc->loadFromFile(aFileName); //打開(kāi)文件
    formDoc->show();

    ui->actCut->setEnabled(true);
    ui->actCopy->setEnabled(true);
    ui->actPaste->setEnabled(true);
    ui->actFont->setEnabled(true);
}
? ? ? ?通過(guò)QMdiArea::subWindowList()可以獲得子窗口對(duì)象列表,從而可以判斷子窗口的個(gè)數(shù)。如 果沒(méi)有一個(gè)MDI子窗口,就創(chuàng)建一個(gè)新的窗口并打開(kāi)文件。
?? ??? ?如果有MDI子窗口,則總有一個(gè)活動(dòng)窗口,通過(guò)QMdiArea::activeSubWindow()可以獲得此活 動(dòng)的子窗口,通過(guò)子窗口的isFileOpened()函數(shù)判斷是否打開(kāi)了文件,如果沒(méi)有打開(kāi)過(guò)文件,就在這個(gè)活動(dòng)窗口里打開(kāi)文件,否則新建窗口打開(kāi)文件。
?? ??? ?注意:一定要先獲取MDI子窗口,再使用QFileDialog選擇需要打開(kāi)的文件。如果順序更換了,則無(wú)法獲得 正確的MDI活動(dòng)子窗口。

3.3 QMdiArea常用功能函數(shù)

?? ??? ?QMdiArea提供了一些成員函數(shù),可以進(jìn)行一些操作,工具欄上的“關(guān)閉全部”“MDI模式” “級(jí)聯(lián)展開(kāi)”“平鋪展開(kāi)”等按鈕都是調(diào)用QMdiArea類(lèi)的成員函數(shù)實(shí)現(xiàn)的。下面是這幾個(gè)按鈕功 能的實(shí)現(xiàn)代碼:
void QWMainWindow::on_actViewMode_triggered(bool checked)
{//MDI 顯示模式
    if (checked) //Tab多頁(yè)顯示模式
    {
        ui->mdiArea->setViewMode(QMdiArea::TabbedView); //Tab多頁(yè)顯示模式
        ui->mdiArea->setTabsClosable(true); //頁(yè)面可關(guān)閉
        ui->actCascade->setEnabled(false);
        ui->actTile->setEnabled(false);
    }
    else 子窗口模式
    {
        ui->mdiArea->setViewMode(QMdiArea::SubWindowView); //子窗口模式
        ui->actCascade->setEnabled(true); //
        ui->actTile->setEnabled(true); //
    }
}

void QWMainWindow::on_actCascade_triggered()
{ //窗口級(jí)聯(lián)展開(kāi)
    ui->mdiArea->cascadeSubWindows();
}

void QWMainWindow::on_actTile_triggered()
{//平鋪展開(kāi)
    ui->mdiArea->tileSubWindows();
}

void QWMainWindow::on_actCloseALL_triggered()
{//關(guān)閉全部子窗口
    ui->mdiArea->closeAllSubWindows();
}

其中,設(shè)置MDI視圖模式用setViewMode()函數(shù),有兩種模式可以選擇。
?? ?*?QMdiArea::SubWindowView是傳統(tǒng)的子窗口模式,顯示效果如圖6-14所示。
?? ?*?QMdiArea::TabbedView是多頁(yè)的顯示模式,顯示效果如圖6-16所示。

【QT】MDI應(yīng)用程序設(shè)計(jì),Qt,qt,開(kāi)發(fā)語(yǔ)言,MDI

圖6-16多頁(yè)模式下的MDI界面

3.4 MDI的信號(hào)


? ? ? ? QMdiArea有一個(gè)信號(hào)subWindowActivated(QMdiSubWindow*argl),在當(dāng)前活動(dòng)窗口切換時(shí)發(fā)射,利用此信號(hào)可以在活動(dòng)窗口切換時(shí)進(jìn)行一些處理,例如,在狀態(tài)欄里顯示活動(dòng)MDI子窗口的文件名,在沒(méi)有MDI子窗口時(shí),將工具欄上的編輯功能按鈕設(shè)置為禁用。下面是該信號(hào)的槽函數(shù)代碼:

void QWMainWindow::on_mdiArea_subWindowActivated(QMdiSubWindow *arg1)
{//當(dāng)前活動(dòng)子窗口切換時(shí)
    if (ui->mdiArea->subWindowList().count()==0)
    { //若子窗口個(gè)數(shù)為零
        ui->actCut->setEnabled(false);
        ui->actCopy->setEnabled(false);
        ui->actPaste->setEnabled(false);
        ui->actFont->setEnabled(false);
        ui->statusBar->clearMessage();
    }
    else
    {
        QFormDoc *formDoc=static_cast<QFormDoc*>(ui->mdiArea->activeSubWindow()->widget());
        ui->statusBar->showMessage(formDoc->currentFileName()); //顯示主窗口的文件名
    }
}

??? ?主窗口工具欄上的“剪切”“復(fù)制”“粘貼”“字體設(shè)置”等按鈕都是調(diào)用當(dāng)前子窗口的相應(yīng)函數(shù),關(guān)鍵是獲取當(dāng)前MDI子窗體對(duì)象,例如,“剪切”和“字體設(shè)置”按鈕的代碼如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-822818.html

void QWMainWindow::on_actCut_triggered()
{ //cut
    QFormDoc* formDoc=(QFormDoc*)ui->mdiArea->activeSubWindow()->widget();
    formDoc->textCut();
}

void QWMainWindow::on_actFont_triggered()
{//設(shè)置字體
    QFormDoc* formDoc=(QFormDoc*)ui->mdiArea->activeSubWindow()->widget();
    formDoc->setEditFont();
}

到了這里,關(guān)于【QT】MDI應(yīng)用程序設(shè)計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Qt】如何在Qt應(yīng)用程序中使用設(shè)計(jì)好的UI文件

    【Qt】如何在Qt應(yīng)用程序中使用設(shè)計(jì)好的UI文件

    本質(zhì)上,Qt Designer的ui文件是一個(gè)以XML格式書(shū)寫(xiě)的文件,文件中內(nèi)容描述了一個(gè)界面的widget關(guān)系樹(shù)。這個(gè)文件在以下兩種情況下會(huì)使用到: (1)在編譯的時(shí)候,這意味著ui文件將被轉(zhuǎn)換為可編譯的c++代碼,這個(gè)過(guò)程由 uic 完成。 (2)在應(yīng)用程序運(yùn)行的時(shí)候,ui文件將由 QUiLoa

    2024年01月16日
    瀏覽(25)
  • Qt應(yīng)用開(kāi)發(fā)(基礎(chǔ)篇)——MDI窗口 QMdiArea QMdiSubWindow

    Qt應(yīng)用開(kāi)發(fā)(基礎(chǔ)篇)——MDI窗口 QMdiArea QMdiSubWindow

    ???????? QMdiArea 類(lèi)繼承于QAbstractScrollArea,QAbstractScrollArea繼承于QFrame,是Qt用來(lái)顯示MDI窗口的部件。 ?????? 滾屏區(qū)域基類(lèi) QAbstractScrollArea https://blog.csdn.net/u014491932/article/details/132245486 ?????? 框架類(lèi) QFrame https://blog.csdn.net/u014491932/article/details/132188655 ????????? QMdiA

    2024年02月12日
    瀏覽(49)
  • 16-4_Qt 5.9 C++開(kāi)發(fā)指南_Qt 應(yīng)用程序的發(fā)布

    用 Qt 開(kāi)發(fā)一個(gè)應(yīng)用程序后,將應(yīng)用程序提供給用戶(hù)在其他計(jì)算機(jī)上使用就是應(yīng)用程序的發(fā)布。應(yīng)用程序發(fā)布一般會(huì)提供一個(gè)安裝程序,將應(yīng)用程序的可執(zhí)行文件及需要的運(yùn)行庫(kù)安裝到用戶(hù)計(jì)算機(jī)上,即使用戶(hù)計(jì)算機(jī)上沒(méi)有安裝 Qt 也能正常運(yùn)行安裝的程序。 Qt的應(yīng)用程序發(fā)布

    2024年02月14日
    瀏覽(95)
  • Qt下開(kāi)發(fā)基于QGIS的應(yīng)用程序

    Qt下開(kāi)發(fā)基于QGIS的應(yīng)用程序

    由于有在背景地圖上進(jìn)行動(dòng)態(tài)軌跡(曲線(xiàn))顯示的需要,故采用Qt+QGIS的方案! Qt5.12.12,VS2015編譯器,QGIS3.10.1。 在配置之前,電腦是新裝機(jī)的系統(tǒng),沒(méi)有任何相關(guān)軟件版本。 在Qt官網(wǎng)(https://download.qt.io/)或國(guó)內(nèi)鏡像網(wǎng)站(https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt)或網(wǎng)絡(luò)搜索

    2024年02月14日
    瀏覽(89)
  • 基于SkyEye運(yùn)行Qt:著名應(yīng)用程序開(kāi)發(fā)框架

    基于SkyEye運(yùn)行Qt:著名應(yīng)用程序開(kāi)發(fā)框架

    Qt是一個(gè)著名的跨平臺(tái)的C++圖形用戶(hù)界面應(yīng)用程序開(kāi)發(fā)框架,目前包括Qt Creator、Qt Designer等等快速開(kāi)發(fā)工具,還支持2D/3D圖形渲染、OpenGL,允許真正的組件編程,是與GTK、MFC、OWL、ATL一樣的圖形界面庫(kù)。使用Qt開(kāi)發(fā)的軟件可以做到一次開(kāi)發(fā)、任意部署,相同的代碼可以在任意支

    2024年04月22日
    瀏覽(104)
  • 14-5_Qt 5.9 C++開(kāi)發(fā)指南_基于HTTP 協(xié)議的網(wǎng)絡(luò)應(yīng)用程序

    14-5_Qt 5.9 C++開(kāi)發(fā)指南_基于HTTP 協(xié)議的網(wǎng)絡(luò)應(yīng)用程序

    Qt 網(wǎng)絡(luò)模塊提供一些類(lèi)實(shí)現(xiàn) OSI 7 層網(wǎng)絡(luò)模型中高層的網(wǎng)絡(luò)協(xié)議,如 HTTP、FTP、SNMP等,這些類(lèi)主要是 QNetworkRequest、QNetworkReply和QNetworkAccessManager。 QNetworkRequest 類(lèi)通過(guò)一個(gè)URL 地址發(fā)起網(wǎng)絡(luò)協(xié)議請(qǐng)求,也保存網(wǎng)絡(luò)請(qǐng)求的信息,目前支持 HTTP、FTP 和局部文件 URLs的下載或上傳。 QNe

    2024年02月13日
    瀏覽(28)
  • 「Qt中文教程指南」如何創(chuàng)建基于Qt Widget的應(yīng)用程序(四)

    「Qt中文教程指南」如何創(chuàng)建基于Qt Widget的應(yīng)用程序(四)

    Qt?是目前最先進(jìn)、最完整的跨平臺(tái)C++開(kāi)發(fā)工具。它不僅完全實(shí)現(xiàn)了一次編寫(xiě),所有平臺(tái)無(wú)差別運(yùn)行,更提供了幾乎所有開(kāi)發(fā)過(guò)程中需要用到的工具。如今,Qt已被運(yùn)用于超過(guò)70個(gè)行業(yè)、數(shù)千家企業(yè),支持?jǐn)?shù)百萬(wàn)設(shè)備及應(yīng)用。 本文描述了如何使用Qt Creator創(chuàng)建一個(gè)小的Qt應(yīng)用程序

    2024年02月06日
    瀏覽(11)
  • Qt 實(shí)現(xiàn)應(yīng)用程序單實(shí)例

    目前使 Qt 運(yùn)行一個(gè)實(shí)例有如下幾種方式: 1.QSharedMemory 使用共享內(nèi)存,當(dāng)?shù)诙€(gè)進(jìn)程啟動(dòng)時(shí),判斷內(nèi)存區(qū)數(shù)據(jù)是否建立,如有,則退出;這種方式有弊端,在程序發(fā)生崩潰時(shí),未及時(shí)清除共享區(qū)數(shù)據(jù),導(dǎo)致程序不能正常啟動(dòng)。 2.文件鎖 在程序運(yùn)行的時(shí)候就在目錄下創(chuàng)建一個(gè)文

    2024年02月10日
    瀏覽(24)
  • Qt應(yīng)用程序中的 QApplication

    QApplication類(lèi)是一個(gè)Qt框架中核心的應(yīng)用程序類(lèi),它提供了管理應(yīng)用程序的框架、事件循環(huán)和系統(tǒng)級(jí)配置的基礎(chǔ)。在本文中,我們將詳細(xì)介紹QApplication類(lèi)的功能和應(yīng)用場(chǎng)景。 通常,我們?cè)谥骱瘮?shù)中創(chuàng)建 QApplication 對(duì)象。在創(chuàng)建時(shí),我們可以指定一些命令行選項(xiàng)和特定于平臺(tái)的參

    2024年02月15日
    瀏覽(23)
  • Qt Linux 環(huán)境中應(yīng)用程序打包

    Qt Linux 環(huán)境中應(yīng)用程序打包

    系統(tǒng)環(huán)境:Ubuntu20.04LTS 開(kāi)發(fā)環(huán)境:Qt5.14.1 在進(jìn)入程序部署打包之前,閱讀官方的部署文檔Deploy,通常情況下,我們?cè)陂_(kāi)發(fā)的時(shí)候,Qt Creator 的左下角構(gòu)建模式為Debug,便于我們調(diào)試編寫(xiě)程序。Qt的三個(gè)構(gòu)建模式Debug、Profile、Release的區(qū)別是: debug可以調(diào)試程序,而release不可以。在

    2024年02月01日
    瀏覽(88)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包