main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
При компиляции с использованием 64-разрядной версии MinGW все в порядке.
Очистить весь проект, переключить компилятор на 64-битный MSVC2017, QtCreator не распознает ни одного класса Qt, начиная с QApplication, первого в main.cpp.
После исследования я обнаружил в qmainwindow.h : QT_CONFIG (в будущем) вызывает деление на ноль в выражении препроцессора.
Пример из qmainwindow.h :
#ifndef QDYNAMICMAINWINDOW_H
#define QDYNAMICMAINWINDOW_H
#include <QtWidgets/qtwidgetsglobal.h>
#include <QtWidgets/qwidget.h>
#if QT_CONFIG(tabwidget) <-------- this line is grayed out and error is: division by zero in preprocessor expression. Warning is QT_FEATURE_tabwidget is not defined, evaluates to 0
#include <QtWidgets/qtabwidget.h> <--------- this line is grayed out also
#endif
QT_CONFIG определен в qglobal.h как:
#define QT_CONFIG(feature) (1/QT_FEATURE_##feature == 1) <--- this causes the /0.
, но в qtwidgets-config.h :
#define QT_FEATURE_tablewidget 1
#define QT_FEATURE_tabwidget 1 <----------- tabwidget is defined as it should be (1 not 0)
#define QT_FEATURE_textbrowser 1
#define QT_FEATURE_toolbar 1
Выше приведен пример для tabwidget,но QT_CONFIG вызывает деление на ноль для всех других виджетов, что приводит к тому, что приложение никогда не компилируется.
Я создал новый проект с нуля и настроил Kits to Desktop Qt 5.12.1 MSVC2017 64bit, получил те же ошибки (не касаясьMinGW).