QT6 源,七章對話框與多窗體(8) 消息對話框 QMessageBox :屬性,信號函數,成員函數,以及靜態成員函數,源代碼帶注釋

(1)消息對話框里,分為通知消息,詢問消息,提醒消息,錯誤消息。可以直接使用本類的靜態函數,簡單。但 QT 的官方說明里,建議使用動態成員函數組件的消息框,而非使用靜態函數。理由是靜態函數里無法攜帶更多的文本內容。但基于 QMessageBox 的功能來定制消息框,更難

在這里插入圖片描述

++

在這里插入圖片描述

++

在這里插入圖片描述

++

在這里插入圖片描述

++還有很多的成員函數,來管理消息框里的按鈕,涉及按鈕的增刪改查。就不一一列舉了,感覺這不容易的知識。暫時不深學了。

(2)接著學習最后的靜態成員函數

在這里插入圖片描述

++測試一下

在這里插入圖片描述

(3)本源代碼定義于頭文件 qmessagebox . h

#ifndef QMESSAGEBOX_H
#define QMESSAGEBOX_H#include <QtWidgets/qtwidgetsglobal.h>#include <QtWidgets/qdialog.h>QT_REQUIRE_CONFIG(messagebox);QT_BEGIN_NAMESPACEclass QLabel;
class QMessageBoxPrivate;
class QAbstractButton;
class QCheckBox;/*
The QMessageBox class provides a modal dialog for informing the user orfor asking the user a question and receiving an answer.Detailed Description :
-個消息框會顯示主要文本以提醒用戶某種情況,
進一步的說明性文本以進一步解釋提醒內容或詢問用戶問題,
以及可選的詳細文本以在用戶請求時提供更多的數據。消息框還可以顯示圖標和用于接受用戶響應的標準按鈕。提供了兩種使用QMessageBox的API,即基于屬性的API和靜態函數。
調用靜態函數是更簡單的方法,但其靈活性不如使用基于屬性的API,且顯示結果的信息量也較小。
建議使用基于屬性的API。The Property-based API :
要使用基于屬性的API,首先需要構造一個QMessageBox的實例,然后設置所需的屬性,
最后調用exec()來顯示消息。最簡單的配置方式僅設置消息文本屬性。QMessageBox msgBox;msgBox.setText("The document has been modified.");msgBox.exec();用戶必須點擊OK按鈕才能關閉消息框。在消息框被關閉之前,其余的GUI將保持鎖定狀態。dismiss解散。-個更好的方法不僅在于提醒用戶注意某個事件,還在于詢問用戶對此應采取何種行動。
將這個問題存儲在“信息文本屬性”中,并將“標準按鈕屬性”設置為您想要的按鈕集合,作為用戶可能的響應選項。
這些按鈕是通過使用按位或運算符結合來自“標準按鈕”的值來指定的。
按鈕的顯示順序取決于平臺。例如,在Windows上,“保存”按鈕會顯示在“取消”按鈕的左側,
而在MacOS上,順序則相反。
標記其中一個標準按鈕為默認按鈕。QMessageBox msgBox;msgBox.setText("The document has been modified.");msgBox.setInformativeText("Do you want to save your changes?");msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard| QMessageBox::Cancel  );msgBox.setDefaultButton(QMessageBox::Save);int ret = msgBox.exec();這是《macOS指南》中推薦的做法。類似的指南也適用于其他平臺,
但請注意不同平臺在處理信息文本時的不同方式。exec()插槽返回被點擊按鈕的標準按鈕  StandardButtons 值。switch (ret) {case QMessageBox::Save:      // Save was clickedbreak;case QMessageBox::Discard:   // Don't Save was clickedbreak;case QMessageBox::Cancel:    // Cancel was clickedbreak;default:                     // should never be reached 這一條不應被達到break;}為了向用戶提供更多信息,以便他回答問題,應設置詳細的  detailed text 文本屬性。
如果設置了詳細的  detailed text 文本屬性, Show Details...  按鈕將會顯示。
Clicking the Show Details... button displays the detailed text.Rich Text and the Text Format Property :
詳細文本  detailed text 屬性總是被解釋為純文本。
主文本  main text 和信息文本  informative text 屬性可以是純文本或富文本。
這些字符串將根據文本格式  text format 屬性的設置來解釋。默認設置為自動文本  auto-text。請注意,對于某些包含XML元字符的純文本字符串,
自動文本 auto-text,富文本檢測測試  rich text detection test 可能會失敗,
導致純文本字符串被錯誤地解釋為富文本。
在這些罕見的情況下,使用Qt::convertFromPlainText()將純文本字符串轉換為視覺上等效的富文本字符串,
或者使用setTextFormat()顯式地設置文本格式  text format 屬性。Severity Levels and the Icon and Pixmap Properties :
QMessageBox支持四種預定義的訊息嚴重程度級別或訊息類型,
實際上它們之間的區別僅在于各自顯示的預定義圖標.
通過將圖標 icon屬性設置為預定義的圖標之一,可以指定這四種預定義訊息  predefined icons類型之一。
以下規則僅供參考:
i      Information   For reporting information about normal operations.
問號?  Question      For asking a question during normal operations.
嘆號!  Warning       For reporting non-critical errors.
叉 X   Critical      For reporting     critical errors.預定義的圖標并非由 QMessageBox定義,而是由樣式提供。默認值為 NoIcon。
在所有情況下,消息框在其他方面是相同的。
在使用標準圖標時,應采用表格中推薦的那個,或者采用適用于您平臺的相關樣式指南所推薦的那個。
如果沒有任何標準圖標適合您的消息框,您可以通過設置 icon pixmap屬性(而非圖標icon屬性)來使用自定義圖標。總之,要設置圖標,請使用setIcon()為標準圖標之一設置圖標,或者使用setIconPixmap()為自定義圖標設置圖標。The Static Functions API  :
使用靜態函數API構建消息框雖然方便,但其靈活性卻不如使用基于屬性的API,
因為靜態函數簽名中缺少用于設置信息性文本 informative text 和詳細文本 detailed text 屬性的參數。
一個變通方法是使用“標題title”參數作為消息框的主文本,而使用“文本text”參數作為消息框的信息性文本。
由于這種做法有明顯的缺點,導致消息框的可讀性降低,因此平臺指南并不推薦使用。
微軟Windows用戶界面指南建議使用應用程序名稱  application name 作為窗口的標題  window's title,
這意味著如果您除了主文本外還有一個信息性文本,您必須將其連接到text參數。請注意,靜態函數簽名相對于其按鈕參數已有所更改,
這些參數現在用于設置標準按鈕  standard buttons 和默認按鈕 default button。靜態函數可用于創建信息框information()、問題框question()、警告框warning()和關鍵消息框critical()。int ret = QMessageBox::warning(this, tr("My Application"),tr("The document has been modified.\n Do you want to save your changes?"),QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel,QMessageBox::Save);標準對話框示例展示了如何使用QMessageBox和其他內置的Qt對話框。Advanced Usage :
如果標準按鈕 standard buttons不足以滿足您的消息框需求,
您可以使用帶文本和按鈕角色 buttonRole 的`addButton()、重載函函數來添加自定義按鈕。
`ButtonRole`由`QMessageBox`用于確定屏幕上按鈕的排列順序(各平臺有所不同)。
在調用`exec()、后,您可以測試`clickedButton()、的值。例如:QMessageBox msgBox;QPushButton * connectButton = msgBox.addButton(tr("Connect"), QMessageBox::ActionRole);QPushButton *   abortButton = msgBox.addButton(QMessageBox::Abort);msgBox.exec();if (msgBox.clickedButton() == connectButton)      {    // connect} else if (msgBox.clickedButton() == abortButton) {    // abort}Default and Escape Keys :
使用`setDefaultButton()、可以指定默認按鈕(即按下Enter鍵時激活的按鈕)。
如果沒有指定默認按鈕,`QMessageBox`會根據對話框中使用的按鈕的按鈕角色button roles嘗試找到相應的默認按鈕。逃逸 escape 按鈕(即按下 Esc 鍵時激活的按鈕)可以使用 setEscapeButton()方法來指定。
如果沒有指定逃逸按鈕QMessageBox會嘗試根據以下規則找到合適的按鈕:
1.如果只有一個按鈕,則該按鈕在按下ESc時被激活。
2.如果有一個取消 Cancel按鈕,它就是按下ESc時激活的按鈕。
3.如果恰好有一個按鈕具有拒絕角色 the Reject role或否定角色the the No role,則該按鈕在按下ESc時被激活。
當無法通過這些規則確定退出按鈕時,按下ESc沒有效果。*/class Q_WIDGETS_EXPORT QMessageBox : public QDialog
{Q_OBJECT/*此屬性持有消息框的圖標消息框的圖標可以通過以下值之一指定:QMessageBox::NoIconQMessageBox::問題QMessageBox::信息QMessageBox::警告 warningQMessageBox::Critical默認值是QMessageBox::NoIcon。用于顯示實際圖標的像素圖取決于當前的GUI樣式。您還可以通過設置 iconPixmap屬性來為圖標設置自定義像素圖。*/Q_PROPERTY(Icon    icon        READ  icon        WRITE   setIcon) //官方圖標Q_PROPERTY(QPixmap iconPixmap  READ  iconPixmap  WRITE   setIconPixmap) //自定義圖標/*此屬性持有當前圖標。消息框當前使用的圖標。請注意,通常很難繪制一個在所有GUI風格中都顯得合適的像素圖。您可能需要在每個平臺上提供不同的像素圖。默認情況下,此屬性未定義。*///class QLabel::Q_PROPERTY(Qt::TextFormat textFormat ...)//這個枚舉用于可以同時顯示純文本和富文本的小部件中,例如QLabel。//它用于決定是否將文本字符串解釋為其中之一或另一種。//這通常是通過將一個eum值傳遞給 QTextEdit::setTextFormat ()函數來完成的。// enum Qt::TextFormat { //這是 label 上文本的格式//        PlainText, //文本字符串被解釋為一個普通文本字符串。//         RichText, //文本字符串被解釋為富文本字符串。請參閱支持的HTML子集以獲取富文本的定義。//         AutoText, //如果Qt::mayBeRichText()返回true,//             //則將文本字符串解釋為Qt::RichText;否則,將其解釋為Qt::PlainText.//     MarkdownText  //文本字符串被解釋為Markdown格式化的文本。此枚舉值在Qt5.14中添加。//};Q_PROPERTY(Qt::TextFormat               textFormat      //默認格式為Qt::AutoText。READ                        textFormat      WRITE     setTextFormat)//此屬性保存消息框顯示文本的格式。消息框當前使用的文本格式。/*此屬性持有要顯示的消息框文本。文本將被解釋為純文本或富文本,具體取決于文本格式設置(QMessageBox::textFormat).默認設置為 Qt::AutoText,即消息框將嘗試自動檢測文本的格式。此屬性的默認值為空字符串。*/Q_PROPERTY(QString                      textREAD                        text            WRITE     setText)/*此屬性包含提供消息更詳細描述的信息文本。說明性文本可以用來擴展`text()',以向用戶提供更多信息。在Mac上,該文本會顯示在`text()、下方,采用小型系統字體。在其他平臺上,它只是被附加到已有的文本上。默認情況下,此屬性包含一個空字符串。*/Q_PROPERTY(QString           informativeTextREAD             informativeText            WRITE     setInformativeText)Q_PROPERTY(QString              detailedTextREAD                detailedText            WRITE     setDetailedText)/*此屬性包含在詳細信息區域中要顯示的文本。文本將被解釋為純文本。默認情況下,此屬性包含一個空字符串。*///指定消息框標簽應如何與用戶輸入交互。默認值取決于樣式。Q_PROPERTY(Qt::TextInteractionFlags     textInteractionFlagsREAD                        textInteractionFlagsWRITE                    setTextInteractionFlags)/*//QLabel :: Q_PROPERTY(Qt::TextInteractionFlags textInteractionFlags//    READ textInteractionFlags WRITE setTextInteractionFlags)//本枚舉類應用于標簽的 屬性 textInteractionFlags.本屬性也用于文本框.//這個枚舉定義了文本顯示控件如何對用戶輸入做出反應。enum Qt::TextInteractionFlag {NoTextInteraction         = 0, //無法與文本進行交互。TextSelectableByMouse     = 1, //文本可以通過鼠標選擇,//并使用上下文菜單或標準鍵盤快捷鍵復制到剪貼板。TextSelectableByKeyboard  = 2, //可以通過鍵盤上的光標鍵選擇文本。顯示一個文本光標。LinksAccessibleByMouse    = 4, //鏈接可以通過鼠標進行高亮和激活。LinksAccessibleByKeyboard = 8, //鏈接可以通過按Tab鍵進行聚焦,并通過按Enter鍵激活。TextEditable              = 16,//文本可以完全編輯。TextEditorInteraction     =   TextSelectableByMouse| TextSelectableByKeyboard| TextEditable,         //default for a text editor.TextBrowserInteraction    =   TextSelectableByMouse //default for QTextBrowser.| LinksAccessibleByMouse| LinksAccessibleByKeyboard};Q_DECLARE_FLAGS(TextInteractionFlags, TextInteractionFlag)Q_DECLARE_OPERATORS_FOR_FLAGS(TextInteractionFlags)*///消息框中標準按鈕的集合.此屬性控制消息框使用的標準按鈕。默認情況下,此屬性不包含任何標準按鈕。Q_PROPERTY(StandardButtons     standardButtonsREAD               standardButtonsWRITE           setStandardButtons)protected:bool         event(QEvent       * e    ) override;void   resizeEvent(QResizeEvent * event) override;void     showEvent(QShowEvent   * event) override;void    closeEvent(QCloseEvent  * event) override;void keyPressEvent(QKeyEvent    * event) override;void   changeEvent(QEvent       * event) override;private:Q_PRIVATE_SLOT(d_func(), void _q_buttonClicked(QAbstractButton *))Q_PRIVATE_SLOT(d_func(), void _q_clicked(QPlatformDialogHelper::StandardButton,QPlatformDialogHelper::ButtonRole))Q_DISABLE_COPY(QMessageBox)Q_DECLARE_PRIVATE(QMessageBox)Q_SIGNALS:void buttonClicked(QAbstractButton * button);public :using QDialog::open; //將對話框顯示為窗口模態 window modal dialog對話框,并立即返回。//virtual void QDialog::open();void open(QObject * receiver, const char * member); //信息與槽函數//Opens the dialog and connects its finished() or buttonClicked() signal to the//  slot specified by receiver and member.//If the slot in member has a pointer for its first parameter, //若槽函數的形參一是指針,//  the connection is to buttonClicked(),       //則連接到 buttonClicked(ptr)信號函數;//  otherwise the connection is to finished().  //否則連接到 finished(int)信號函數//The signal will be disconnected from the slot when the dialog is closed.public:explicit QMessageBox(QWidget * parent = nullptr);QMessageBox(Icon icon, const QString & title, const QString & text,StandardButtons buttons = NoButton,     QWidget * parent = nullptr,Qt::WindowFlags flags = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);~QMessageBox();enum Icon { // keep this in sync with QMessageDialogOptions::IconNoIcon      = 0,Information = 1, //表明這條消息沒有什么特別之處。Warning     = 2, //表示該消息是警告,但可以處理。Critical    = 3, //表明該消息代表了一個關鍵問題。Question    = 4  //表明該消息正在提出一個問題。};Q_ENUM(Icon)
//   Q_PROPERTY(Icon        icon
//              READ        icon           WRITE   setIcon) //官方圖標Icon        icon() const;void     setIcon(Icon);//   Q_PROPERTY(QPixmap     iconPixmap
//              READ        iconPixmap     WRITE   setIconPixmap) //自定義圖標QPixmap     iconPixmap() const;void     setIconPixmap(const QPixmap &pixmap);// // enum Qt::TextFormat { PlainText, RichText, AutoText, MarkdownText };
//   Q_PROPERTY(Qt::TextFormat                  textFormat      //默認格式為Qt::AutoText。
//              READ                            textFormat      WRITE     setTextFormat)Qt::TextFormat                  textFormat() const;void                         setTextFormat(Qt::TextFormat format);//   Q_PROPERTY(QString                          text      // 最基礎的消息文本
//              READ                             text      WRITE     setText)QString                          text() const;void                          setText(const QString & text);//   Q_PROPERTY(QString               informativeText      //更詳細描述的信息文本
//              READ                  informativeText      WRITE     setInformativeText)QString               informativeText() const;void               setInformativeText(const QString & text);//   Q_PROPERTY(QString                  detailedText      //detailed 中的文本
//              READ                     detailedText      WRITE     setDetailedText)QString                  detailedText() const;void                  setDetailedText(const QString & text);// //指定消息框標簽應如何與用戶輸入交互,如何選中,如何編輯,是否打開超鏈接等等。默認值取決于樣式。
//   Q_PROPERTY(Qt::TextInteractionFlags         textInteractionFlags
//              READ                             textInteractionFlags
//              WRITE                         setTextInteractionFlags)Qt::TextInteractionFlags         textInteractionFlags() const;void setTextInteractionFlags(Qt::TextInteractionFlags flags);//keep this in sync with QDialogButtonBox::StandardButton and//  QPlatformDialogHelper::StandardButton//這些枚舉描述了標準按鈕的標志。每個按鈕都有一個定義的ButtonRole。enum StandardButton {NoButton           = 0x00000000,Ok                 = 0x00000400,Save               = 0x00000800,SaveAll            = 0x00001000,Open               = 0x00002000,Yes                = 0x00004000,YesToAll           = 0x00008000,No                 = 0x00010000,NoToAll            = 0x00020000,Abort              = 0x00040000,Retry              = 0x00080000,Ignore             = 0x00100000,Close              = 0x00200000,Cancel             = 0x00400000,Discard            = 0x00800000,Help               = 0x01000000,Apply              = 0x02000000,Reset              = 0x04000000,RestoreDefaults    = 0x08000000,FirstButton        = Ok,                // internalLastButton         = RestoreDefaults,   // internalYesAll             = YesToAll,          // obsolete 過時的NoAll              = NoToAll,           // obsoleteDefault            = 0x00000100,        // obsoleteEscape             = 0x00000200,        // obsoleteFlagMask           = 0x00000300,        // obsoleteButtonMask         = ~FlagMask          // obsolete};typedef StandardButton Button; //在 Qt7以下有此定義Q_DECLARE_FLAGS(StandardButtons, StandardButton)Q_FLAG(StandardButtons)
//   Q_PROPERTY(StandardButtons          standardButtons   //消息框中標準按鈕的集合.
//              READ                     standardButtons
//              WRITE                 setStandardButtons)StandardButtons          standardButtons() const;StandardButton           standardButton(QAbstractButton * button ) const;void                  setStandardButtons(StandardButtons  buttons);void setWindowTitle   (const QString & title);void setWindowModality(Qt::WindowModality windowModality);//enum Qt::WindowModality { NonModal,  WindowModal, ApplicationModal };//返回對話框中顯示的復選框。如果沒有設置復選框,則為nullptr。QCheckBox       *                    checkBox() const;void                              setCheckBox(QCheckBox * cb);//在消息對話框上設置復選框 cb。該消息框將擁有復選框的權限take ownership。//參數cb可以設為 nullptr,以從消息框中移除現有的復選框。//這個枚舉描述了可用于描述按鈕盒中按鈕的角色。這些角色的組合用作標志,以描述其行為的不同方面。// keep this in sync with QDialogButtonBox::ButtonRole and//  QPlatformDialogHelper::ButtonRoleenum ButtonRole {InvalidRole = -1, //The button is invalid.//Clicking the button causes the dialog to be accepted (e.g. OK).AcceptRole, //點擊按鈕會接受對話框(例如:確定)//Clicking the button causes the dialog to be rejected (e.g. Cancel).RejectRole,DestructiveRole, //點擊按鈕會導致破壞性更改(例如,放棄更改)并關閉對話框。ActionRole, //點擊按鈕會改變對話框中的元素。HelpRole, //可以點擊按鈕請求幫助。YesRole, //The button is a "Yes"-like button.NoRole, //The button is a "No"-like button.ResetRole, //該按鈕將對話框的字段重置為默認值。ApplyRole, //The button applies current changes.NRoles};//返回一個指向標準按鈕 which的指針,如果此消息框中不存在標準按鈕,則返回nullptr。QAbstractButton *                button (StandardButton   which ) const;QAbstractButton *         clickedButton () const; //返回用戶點擊的按鈕,//如果用戶按下了 ESc鍵且未設置 escape button按鈕,則返回nullptr。//如果exec()尚未被調用,返回nullptr。QList<QAbstractButton *>         buttons() const; //返回已添加到消息框的所有按鈕的列表。ButtonRole                       buttonRole(QAbstractButton * button) const;//返回指定按鈕的按鈕角色。如果按鈕為空指針或尚未添加到消息框中,此函數將返回InvalidRole。//Adds a standard button to the message box if it is valid to do so,//  and returns the push button.QPushButton     *             addButton(StandardButton    button);//Adds the given button to the message box with the specified role.void                          addButton(QAbstractButton * button, ButtonRole role);QPushButton     *             addButton(const QString   & text  , ButtonRole role);//Creates a button with the given text,//  adds it to the message box for the specified role, and returns it.void                       removeButton(QAbstractButton * button);//Removes button from the button box without deleting it.QPushButton     *         defaultButton() const;void                   setDefaultButton(QPushButton     * button);void                   setDefaultButton(StandardButton    button);QAbstractButton *         escapeButton() const; //在上面的總注釋里有一些介紹void                   setEscapeButton(QAbstractButton  * button);void                   setEscapeButton(StandardButton     button);//*******************************************************************************
//**************************以下是重要的靜態成員函數*********************************
//**************************返回值是枚舉量的是新函數*********************************
//*******************************************************************************static StandardButton information(QWidget * parent, const QString & title,const QString & text, StandardButtons buttons = Ok,  //通知消息StandardButton defaultButton = NoButton);// needed as long as we have int overloads //在 Qt7以下有此定義inline static StandardButton information(QWidget *parent, const QString &title,const QString& text,StandardButton button0, StandardButton button1 = NoButton){ return information(parent, title, text, StandardButtons(button0), button1); }static StandardButton question   (QWidget * parent, const QString & title,const QString & text, StandardButtons buttons = StandardButtons(Yes | No),StandardButton defaultButton = NoButton);            //詢問消息inline static int question(QWidget *parent, const QString &title, //在 Qt7以下有此定義const QString& text,StandardButton button0, StandardButton button1){ return question(parent, title, text, StandardButtons(button0), button1); }static StandardButton warning    (QWidget * parent, const QString & title,const QString & text, StandardButtons buttons = Ok,  //警告消息StandardButton defaultButton = NoButton);inline static int warning(QWidget *parent, const QString &title, //在 Qt7以下有此定義const QString& text,StandardButton button0, StandardButton button1){ return warning(parent, title, text, StandardButtons(button0), button1); }static StandardButton critical   (QWidget * parent, const QString & title,const QString & text, StandardButtons buttons = Ok,   //錯誤消息StandardButton defaultButton = NoButton);inline static int critical(QWidget *parent, const QString &title, //在 Qt7以下有此定義const QString& text,StandardButton button0, StandardButton button1){ return critical(parent, title, text, StandardButtons(button0), button1); }static void about  (QWidget * parent, const QString & title, const QString & text);static void aboutQt(QWidget * parent, const QString & title = QString());#if QT_DEPRECATED_SINCE(6,2)  //有此定義,都是 QT6.2 里過時的函數,略// the following functions are obsolete 過時的:
#endif}; //完結 class QMessageBox : public QDialogQ_DECLARE_OPERATORS_FOR_FLAGS(QMessageBox::StandardButtons)#define QT_REQUIRE_VERSION(argc, argv, str) { QString s = QString::fromLatin1(str);\
QString sq = QString::fromLatin1(qVersion()); \
if ((sq.section(QChar::fromLatin1('.'),0,0).toInt()<<16)+\
(sq.section(QChar::fromLatin1('.'),1,1).toInt()<<8)+\
sq.section(QChar::fromLatin1('.'),2,2).toInt()<(s.section(QChar::fromLatin1('.'),0,0).toInt()<<16)+\
(s.section(QChar::fromLatin1('.'),1,1).toInt()<<8)+\
s.section(QChar::fromLatin1('.'),2,2).toInt()) { \
if (!qApp){ \new QApplication(argc,argv); \
} \
QString s = QApplication::tr("Executable '%1' requires Qt "\"%2, found Qt %3.").arg(qAppName()).arg(QString::fromLatin1(\
str)).arg(QString::fromLatin1(qVersion())); QMessageBox::critical(0, QApplication::tr(\
"Incompatible Qt Library Error"), s, QMessageBox::Abort, 0); qFatal("%s", s.toLatin1().data()); }}QT_END_NAMESPACE#endif // QMESSAGEBOX_H

(4)

謝謝

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

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

相關文章

DAY 7|算法篇——棧與隊列(及重溫數組篇章有感)

今天本來應該寫兩道題把這一章節結束掉&#xff0c;奈何第二題前k個高頻元素需要用的二叉樹相關代碼實在不會寫&#xff08;倒是能看懂&#xff09;等我學完二叉樹再把這道題親自寫一遍吧 今天工作量比較小&#xff0c;準備從第一天的任務開始把題目重新再做一遍 239. 滑動窗…

go語言基礎與進階

&#x1f680; Go語言終極高手之路&#xff1a;從基礎到架構的終極指南 Go語言&#xff0c;以其簡潔的語法、卓越的性能和原生的并發模型&#xff0c;席卷了云原生和后端開發領域。然而&#xff0c;要真正駕馭Go&#xff0c;僅僅停留在會寫if-else和for循環是遠遠不夠的。真正的…

Oracle數據恢復—Oracle數據庫所在分區被刪除后報錯的數據恢復案例

Oracle數據庫數據恢復環境&故障&#xff1a; 一臺服務器上一個分區存放Oracle數據庫數據。由于管理員誤操作不小心刪除了該分區&#xff0c;數據庫報錯&#xff0c;無法使用。 北亞企安數據恢復工程師到達現場后&#xff0c;將故障服務器中所有硬盤以只讀方式進行完整鏡像。…

Prometheus+altermanager搭配釘釘報警

一、Prometheus介紹 Prometheus是一個開源系統監控和警報工具包&#xff0c;最初在 SoundCloud構建。自 2012 年成立以來&#xff0c;許多公司和組織都采用了 Prometheus&#xff0c;該項目擁有非常活躍的開發者和用戶社區。它現在是一個獨立的開源項目&#xff0c;獨立于任何…

【小白量化智能體】應用6:根據通達信指標等生成機器學習Python程序

【小白量化智能體】應用6&#xff1a;根據通達信指標等生成機器學習Python程序 【小白量化智能體】是指能夠自主或半自主地通過與環境的交互來實現目標或任務的計算實體。智能體技術是一個百科全書&#xff0c;又融合了人工智能、計算機科學、心理學和經濟學等多個領域的知識&a…

k8s的calico無法啟動報錯解決

報錯信息[INFO][1] main.go 138: Failed to initialize datastore errorGet "https://10.245.0.1:443/apis/crd.projectcalico.org/v1/clusterinformations/default": dial tcp 10.245.0.1:443: connect: no route to host 2025-07-21 06:15:42.055 [FATAL][1] main.…

MySQL多表查詢中的笛卡爾積問題

精選專欄鏈接 &#x1f517; MySQL技術筆記專欄Redis技術筆記專欄大模型搭建專欄Python學習筆記專欄深度學習算法專欄 歡迎訂閱&#xff0c;點贊&#xff0b;關注&#xff0c;每日精進1%&#xff0c;與百萬開發者共攀技術珠峰 更多內容持續更新中&#xff01;希望能給大家帶來…

深度解析 HTML `loading` 屬性:優化網頁性能的秘密武器

在開發網頁時&#xff0c;我常常被頁面加載速度慢的問題困擾&#xff0c;尤其是在圖片和嵌入內容較多的頁面上。用戶還沒看到內容就可能因為等待時間過長而離開&#xff0c;這對用戶體驗和 SEO 都是致命打擊。后來&#xff0c;我發現了 HTML 的 loading 屬性——一個簡單卻強大…

[C/C++內存安全]_[中級]_[安全處理字符串]

場景 在現代C開發指南出來后&#xff0c;并不建議使用C的某些內存不安全的字符串處理函數。那么有哪些函數不安全&#xff1f; 說明 內存安全方面&#xff0c;肯定是要向Rust看齊的。使用標準std::string字符串類&#xff0c;很大情況能避免緩沖區溢出問題。 如果舊項目里有…

【CNN】卷積神經網絡- part1

1.卷積1.局部連接定義&#xff1a;只是于輸入數據的一部分區域相連&#xff0c;每個神經元只關注一小部分作用&#xff1a;模仿人類的視野機制&#xff0c;極大的減少了模型參數的數量&#xff0c;降低了計算成本2.權重共享定義&#xff1a;所有神經元使用相同的權重向量來檢測…

漏洞生命周期管理:從發現到防護的全流程方案

漏洞并非孤立存在&#xff0c;而是遵循 “發現→評估→修復→驗證→閉環” 的生命周期。多數企業安全事件的根源并非缺乏漏洞發現能力&#xff0c;而是對漏洞生命周期的管理缺失 —— 大量漏洞被發現后長期未修復&#xff0c;或修復后未驗證效果。構建全流程漏洞生命周期管理體…

opencv圖像基本操作解析與實操

圖片操作cv2.namedWindow() 創建命名窗口cv2.imshow()顯示窗口cv2.destroyAllwindws()摧毀窗口cv2.resizeWindow()改變窗口大小cv2.waitKey()等待用戶輸入cv2.imread()讀取圖像img.shape 圖片h、w、c&#xff08;高、寬、通道數import cv2 # opencv讀取的格式是BGR import m…

kafka--基礎知識點--6.1--LEO、HW、LW

在 Apache Kafka 中&#xff0c;LEO&#xff08;Log End Offset&#xff09;、HW&#xff08;High Watermark&#xff09;、和 LW&#xff08;Low Watermark&#xff09; 是副本機制和日志管理中的核心概念&#xff0c;共同確保數據一致性、可見性和存儲效率。以下是它們的詳細…

在線深凹槽深檢測方法都有哪些 —— 激光頻率梳 3D 輪廓檢測

引言在制造業中&#xff0c;深凹槽深度的精確檢測是保證零部件質量的關鍵環節。隨著智能制造的推進&#xff0c;在線檢測需求日益迫切&#xff0c;傳統檢測方法在效率和精度上的不足逐漸顯現。本文將梳理在線深凹槽深的傳統檢測方法&#xff0c;并重點探討激光頻率梳 3D 輪廓檢…

NumPy 數組拼接的高級技巧與實踐

在數據處理和機器學習領域&#xff0c;NumPy 是 Python 中最核心的科學計算庫之一。NumPy 數組&#xff08;ndarray&#xff09;的拼接操作是數據預處理中極為常見的需求。本文將深入探討如何將不同形狀的 NumPy 數組進行拼接&#xff0c;特別是如何將多個一維數組與二維數組進…

原創-基于 PHP 和 MySQL 的證書管理系統 第三版

第一版屬于開源版本&#xff0c;所以后臺功能沒有開發許多出來&#xff0c;今天分享證書查詢第三版&#xff1b; 通過幾天的緊急寫代碼及測試&#xff1b;第三版基本可以上線上&#xff0c;不過后面有一些BUG只能一邊修復。 演示地址&#xff1a;物星科云證書管理系統 第三版…

爬蟲虛擬環境

conda create --name myrepenv python3.12創建一個名為 myrepenv、Python 版本為 3.12 的全新 Conda 虛擬環境&#xff0c;適合需要隔離依賴或測試不同 Python 版本的項目。我的方式創建(需要指定盤符)conda create --prefixD:\Anaconda3\envs\myrepenv python3.12展示所下的co…

Netty集群方案詳解與實戰(Zookeeper + Redis + RabbitMQ)

一、背景 二、Netty 單體架構的優缺點 優點 缺點 三、Netty 集群架構的優缺點 優點 缺點 四、適用場景對比 五、Netty單體架構代碼實現 六、Netty集群架構方案實現 方案一、Nginx負載均衡實現集群(較為簡單) Nginx配置 前端連接方式 方案二、NacosGateway&#xff08;結合…

Oracle遷移到高斯,查詢字段默認小寫,解決辦法

一、問題說明 Oracle中&#xff0c;查詢結果字段默認大寫。高斯中&#xff0c;查詢結果字段默認小寫。在Mybatis的xml中&#xff0c;如果查詢語句使用Map接收查詢結果&#xff0c;使用resultType"java.util.HashMap"或resultType"Map"等寫法&#xff0c;返…

Android Jetpack Compose + MVVM 開發流程深度分析

核心組件關系圖 [View] -- 觀察 --> [ViewModel] -- 操作 --> [Repository]| | Compose UI StateFlow/LiveData| | 用戶交互事件 Room/Retrofit| …