Qt5.12.1 QT_CONFIG (будущее) сломалось при смене компилятора с MinGW на MSVC - PullRequest
1 голос
/ 25 октября 2019

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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...