天天看點

error: C2665: “QMessageBox::critical”: 4 個重載中沒有一個可以轉換所有參數類型

Qt系列文章目錄

文章目錄

  • ​​Qt系列文章目錄​​
  • ​​前言​​
  • ​​一、問題原因​​
  • ​​參考​​

前言

在使用QMessageBox::criticalQtCreator編譯器報錯:

E:\QtExercise\QtReadWriteXml\QtXmlDom\QtXmlDom\AnalysisTrackDpj.cpp:39: error: C2665: “QMessageBox::critical”: 4 個重載中沒有一個可以轉換所有參數類型

error: C2665: “QMessageBox::critical”: 4 個重載中沒有一個可以轉換所有參數類型
error: C2665: “QMessageBox::critical”: 4 個重載中沒有一個可以轉換所有參數類型

一、問題原因

1.首先想到沒有包含QMessageBox頭檔案,于是包含QMessageBox頭檔案,但問題依舊沒有解決

error: C2665: “QMessageBox::critical”: 4 個重載中沒有一個可以轉換所有參數類型

2.讓自己定義的AnalysisTrackDpj類繼承QMessageBox

雖然編譯通過了,也能正常運作,

但編譯器給出了警告:direct base ‘QObject’ is inaccessible due to ambiguity:

想想也是我讓AnalysisTrackDpj分别繼承QObject和QMessageBox,而QMessageBox又繼承QObject,總感覺是有問題的

error: C2665: “QMessageBox::critical”: 4 個重載中沒有一個可以轉換所有參數類型

3.将this改成0

通過不斷測試與查閱資料發現是this指針的問題。因為information靜态函數第一個參數類型為QWidget* parent。而我的DatabaseOperatoor.cpp裡面沒有建立視窗,把this傳給information,編譯器無法确定其父視窗是誰。解決辦法就是将this改成0,表示我就是頂層視窗,解決問題。

詳細表述可以點選​​​c++ - About Qt MessageBox::warning() overloading - Stack Overflow​​進行檢視

參考

繼續閱讀