Почему я получаю сообщение об ошибке QWidget: необходимо построить QApplication перед виджетом?

Я получаю следующую ошибку:

QWidget: должен создать QApplication перед виджетом

Три дня назад работало, а сейчас уже не работает, не знаю почему.

Что означает эта ошибка? Я не знаю, изменил ли я что-то.

Вот мой код:

mainwindw.cpp

void MainWindow::on_Statistic_button_clicked(){
    s1 =new stat1(this);
    s1->show();
}

stat1.cpp

stat1::stat1(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::stat1)
{
    ui->setupUi(this);
    //mLayout = new QVBoxLayout;
    mChart = new OpenChart(this);
    setCentralWidget(mChart);
    //mLayout->addWidget(mChart);
    //mLayout->setMargin(0);
    //setLayout(mLayout);
    //int num;
    QSqlQuery q,q1,q2;
    q1.exec("SELECT count(distinct adresse) from abonne");
    q1.next();
    int n = q1.value(0).toInt();
    QString adr[100];

    int j = 0;
    q.exec("SELECT distinct adresse from abonne");
    while(j<n)
    {
        q.next();
        adr[j]=q.value(0).toString();
        j++;
    }


    QMap<QString,int> cartes;
    for(j=0;j<n;j++)
    {
        q2.exec("SELECT count(abonne.id_abonne) FROM abonne,fidels where abonne.id_abonne=fidels.id_abonne and abonne.adresse='"+adr[j]+"'");
        q2.next();
        int nbr = q2.value(0).toInt();
        cartes[adr[j]] = nbr;
    }


    mChart->setTitle("Cartes/Adresses");
    mChart->setTipo(OpenChart::Sectores_2D);
    mChart->setTipoleyenda(OpenChart::Circular);
    const auto cartesEnd=cartes.end();
    for(auto i=cartes.begin(); i!=cartesEnd; ++i){
        mChart->addItem(i.key(), i.value());
    }
}

stat1::~stat1()
{
    delete ui;
}

person Omar Krichen    schedule 06.12.2017    source источник
comment
Ошибка означает, что вам необходимо создать объект типа QApplication, прежде чем вы создадите объект типа, который является типом QWidget или наследуется от него. Рекомендуемый способ сделать это — создать QApplication в первой строке вашей функции main. Кроме того, вы не можете создавать виджеты как глобальные переменные или внутри конструктора глобальной переменной, так как глобальные переменные создаются и их конструкторы вызываются до входа в функцию main. Если вам очень нужен виджет как глобальная переменная, создайте на него указатель, изначально равный NULL, затем создайте виджет в функции main.   -  person Donald Duck    schedule 06.12.2017
comment
Кроме того, вас может заинтересовать stackoverflow.com/q/21590421/4284627.   -  person Donald Duck    schedule 06.12.2017
comment
@Donald Duck я работаю над проектом qt Приложение с виджетами   -  person Omar Krichen    schedule 06.12.2017
comment
@DonaldDuck, не могли бы вы мне помочь? это не работает   -  person Omar Krichen    schedule 10.12.2017
comment
@​OmarKrichen Вы предоставили мне недостаточно информации для решения вашей проблемы. Прочтите, как создать минимально воспроизводимый пример. Все, что я могу сказать сейчас, это то, что вам нужно создать объект QApplication в начале вашей функции main и что вы не можете иметь никаких глобальных или статических переменных любого типа, который является или наследуется от QWidget, и вы не можете создавать какие-либо такие объекты в конструкторах любого класса, который создает экземпляр глобальной или статической переменной.   -  person Donald Duck    schedule 10.12.2017