Я получаю следующую ошибку:
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;
}
QApplication
, прежде чем вы создадите объект типа, который является типомQWidget
или наследуется от него. Рекомендуемый способ сделать это — создатьQApplication
в первой строке вашей функцииmain
. Кроме того, вы не можете создавать виджеты как глобальные переменные или внутри конструктора глобальной переменной, так как глобальные переменные создаются и их конструкторы вызываются до входа в функциюmain
. Если вам очень нужен виджет как глобальная переменная, создайте на него указатель, изначально равныйNULL
, затем создайте виджет в функцииmain
. - person Donald Duck   schedule 06.12.2017QApplication
в начале вашей функцииmain
и что вы не можете иметь никаких глобальных или статических переменных любого типа, который является или наследуется отQWidget
, и вы не можете создавать какие-либо такие объекты в конструкторах любого класса, который создает экземпляр глобальной или статической переменной. - person Donald Duck   schedule 10.12.2017