2021.04.26
Qt學習記錄一——QMessageBox不能顯式執行個體化
1.QMessageBox的構造函數
QMessageBox(QWidget *parent = Q_NULLPTR)
QMessageBox(Icon icon, const QString &title,
const QString &text,
StandardButtons buttons = NoButton,
QWidget *parent = Q_NULLPTR,
Qt::WindowFlags f = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint)
QMessageBox(const QString &title, const QString &text, Icon icon,
int button0, int button1, int button2,
QWidget *parent = Q_NULLPTR,
Qt::WindowFlags f = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);
其中第三個官方文檔中有介紹:the following functions are obsolete。說明這個函數已經不适用了,盡量使用第二個構造函數。
2.對象執行個體化
QMessageBox mess = QMessageBox();
QMessageBox mess=QMessageBox(QMessageBox::Icon::Warning,"Error","open pcd file failure");
以上兩種執行個體化的方式都不行,但是普通類是可以顯式執行個體化的,此處的問題在vs中錯誤如下:

放大可以看到内容。
3.解決問題
在qmessagebox.h頭檔案中,有
Q_DISABLE_COPY(QMessageBox)
的定義,這裡聲明QMessageBox的構造函數時私有的,不能通過指派運算符進行操作。
詳情可參見 部落格
是以,Qt中QMessageBox的執行個體化可通過隐式的方式或者是使用new關鍵字。
QMessageBox mess ();
QMessageBox mess(QMessageBox::Icon::Warning,"Error","open pcd file failure");
本人才疏學淺,文中有錯誤的地方,請批評指正。