昨天下載了一個github上的qt工程,拿回來一編譯出現了N多錯誤,但是工程明明是正確的,沒有什么特殊的配置設置,
但是就是幾乎所有的代碼都在報錯。
可以看到關於類的操作都有問題
..\qtprocess\mainwindow.cpp: warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存為 Unicode 格式以防止數據丟失 ..\qtprocess\mainwindow.cpp(11): error C2447: “{”: 缺少函數標題(是否是老式的形式表?) ringsprogressbar.cpp c:\users\administrator\documents\qtprocess\ringsprogressbar.h: warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存為 Unicode 格式以防止數據丟失 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(149): error C2804: 二進制“operator |”的參數太多 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(149): error C2333: “RingsProgressbar::operator |”: 函數聲明中有錯誤;跳過函數體 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(152): error C3254: “RingsProgressbar”: 類包含顯式重寫“setAlignment”,但並不從包含函數聲明的接口派生 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(152): error C2838: “setAlignment”: 成員聲明中的限定名稱非法 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(155): error C3254: “RingsProgressbar”: 類包含顯式重寫“setFlags”,但並不從包含函數聲明的接口派生 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(155): error C2838: “setFlags”: 成員聲明中的限定名稱非法 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(159): error C3254: “RingsProgressbar”: 類包含顯式重寫“setTabStop”,但並不從包含函數聲明的接口派生 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(159): error C2838: “setTabStop”: 成員聲明中的限定名稱非法 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(163): error C3254: “RingsProgressbar”: 類包含顯式重寫“setTabStopDistance”,但並不從包含函數聲明的接口派生 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(163): error C2838: “setTabStopDistance”: 成員聲明中的限定名稱非法 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qtextoption.h(167): error C3412: “QMetaTypeId<RingsProgressbar::QTextOption::Tab>”: 不能在當前范圍內專用化模板 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qpen.h(56): error C2804: 二進制“operator <<”的參數太多 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qpen.h(57): error C2804: 二進制“operator >>”的參數太多 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qpen.h(133): error C3412: “QTypeInfo<RingsProgressbar::QPen>”: 不能在當前范圍內專用化模板 C:\Qt\Qt5.12.10\5.12.10\msvc2017\include\QtGui/qpen.h(136): error C2804: 二進制“operator <<”的參數太多 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(495): error C3412: “QTypeInfo<RingsProgressbar::QPainter::PixmapFragment>”: 不能在當前范圍內專用化模板 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(497): error C2804: 二進制“operator |”的參數太多 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(497): error C2333: “RingsProgressbar::operator |”: 函數聲明中有錯誤;跳過函數體 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(503): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawLine”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(503): error C2838: “drawLine”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(508): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawLine”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(508): error C2838: “drawLine”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(513): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawLine”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(513): error C2838: “drawLine”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(519): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawLine”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(519): error C2838: “drawLine”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(525): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawLine”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(525): error C2838: “drawLine”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(530): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawLines”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(530): error C2838: “drawLines”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(535): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawLines”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(535): error C2838: “drawLines”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(540): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawLines”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(540): error C2838: “drawLines”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(545): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawLines”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(545): error C2838: “drawLines”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(550): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawPolyline”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(550): error C2838: “drawPolyline”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(555): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawPolyline”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(555): error C2838: “drawPolyline”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(560): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawPolygon”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(560): error C2838: “drawPolygon”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(565): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawPolygon”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(565): error C2838: “drawPolygon”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(570): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawConvexPolygon”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(570): error C2838: “drawConvexPolygon”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(575): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawConvexPolygon”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(575): error C2838: “drawConvexPolygon”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(580): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawRect”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(580): error C2838: “drawRect”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(585): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawRect”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(585): error C2838: “drawRect”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(591): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawRect”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(591): error C2838: “drawRect”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(596): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawRects”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(596): error C2838: “drawRects”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(601): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawRects”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(601): error C2838: “drawRects”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(606): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawPoint”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(606): error C2838: “drawPoint”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(611): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawPoint”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(611): error C2838: “drawPoint”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(617): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawPoint”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(617): error C2838: “drawPoint”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(622): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawPoints”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(622): error C2838: “drawPoints”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(627): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawPoints”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(627): error C2838: “drawPoints”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(632): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawRoundRect”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(632): error C2838: “drawRoundRect”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(637): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawRoundRect”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(637): error C2838: “drawRoundRect”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(643): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawRoundedRect”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(643): error C2838: “drawRoundedRect”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(649): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawRoundedRect”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(649): error C2838: “drawRoundedRect”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(654): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawEllipse”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(654): error C2838: “drawEllipse”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(659): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawEllipse”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(659): error C2838: “drawEllipse”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(664): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawEllipse”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(664): error C2838: “drawEllipse”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(669): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawArc”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(669): error C2838: “drawArc”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(674): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawArc”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(674): error C2838: “drawArc”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(679): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawPie”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(679): error C2838: “drawPie”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(684): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawPie”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(684): error C2838: “drawPie”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(689): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawChord”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(689): error C2838: “drawChord”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(694): error C3254: “RingsProgressbar”: 類包含顯式重寫“drawChord”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(694): error C2838: “drawChord”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(699): error C3254: “RingsProgressbar”: 類包含顯式重寫“setClipRect”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(699): error C2838: “setClipRect”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(704): error C3254: “RingsProgressbar”: 類包含顯式重寫“eraseRect”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(704): error C2838: “eraseRect”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(709): error C3254: “RingsProgressbar”: 類包含顯式重寫“eraseRect”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(709): error C2838: “eraseRect”: 成員聲明中的限定名稱非法 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(714): error C3254: “RingsProgressbar”: 類包含顯式重寫“fillRect”,但並不從包含函數聲明的接口派生 c:\qt\qt5.12.10\5.12.10\msvc2017\include\qtgui\qpainter.h(714): fatal error C1003: 錯誤計數超過 100;正在停止編譯
想了一下,應該不是代碼內容的問題,那就只能出在格式上,首先查看代碼的編碼格式,是UTF-8沒錯,不是編碼問題。這就奇怪了,查看系統設置里面,發現除了編碼格式,還有換行符的設置。

查看了一下,果然下載的內容默認設置的是UNIX的LF格式,全部改成CRLF后,編譯正常。
總結一下網上說的該類問題的原因主要分為三種:
- 文件編碼格式,要於qt中設置一致;
- 換行符格式,要於qt中設置一致;
- 文件循環引用的問題,記得要設置宏
