C++ 与在应用程序中创建QMathGL类相关的错误
我对MathGL库和在应用程序中创建MathGL实例有问题。每次我尝试运行它时,都会出现一个错误,即QApplication必须在QWidget之前构造(类QMathGL从中继承)。您可以在下面找到我的main代码以及与MainWindow类连接的所有函数: mainwindow.cppC++ 与在应用程序中创建QMathGL类相关的错误,c++,qt,qapplication,mathgl,C++,Qt,Qapplication,Mathgl,我对MathGL库和在应用程序中创建MathGL实例有问题。每次我尝试运行它时,都会出现一个错误,即QApplication必须在QWidget之前构造(类QMathGL从中继承)。您可以在下面找到我的main代码以及与MainWindow类连接的所有函数: mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include "functions.h" #include "surface.h" #include "
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "functions.h"
#include "surface.h"
#include "error.h"
#include <QString>
#include <QFileDialog>
#include <GL/glut.h>
#include <cmath>
#include <fstream>
#include <mgl2/qmathgl.h>
surface graph;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_draw_clicked()
{
string s;
bool correct = 1;
error *errorWindow = new error(this);
s = ui->eqEdit->text().toStdString();
period fPeriod = period(ui->upEdit->text().toDouble(),ui->lowEdit->text().toDouble());
functionSum fSum = functionSum(s,fPeriod,ui->accEdit->text().toDouble());
for (int i = 0; i < fSum.accuracy; i++)
{
for (int j = 0; j < fSum.accuracy; j++)
{
if(isnan(fSum.zValues[i][j]) || isinf(fSum.zValues[i][j]))
{
correct = 0;
}
}
}
if(!correct)
{
errorWindow->show();
}
graph = surface(fSum);
}
void MainWindow::on_save_clicked()
{
QString plik;
string splik;
plik = QFileDialog::getSaveFileName(this,"Zapisz plik",QString(),"Pliki tekstowe (*.txt)");
splik = plik.toStdString();
ofstream saver;
saver.open(splik.c_str());
if (saver.is_open())
{
for(int i = 0; i < graph.points.size(); i++)
{
saver << graph.points[i].x << " " << graph.points[i].y << " " << graph.points[i].z << endl;
}
saver.close();
}
}
void MainWindow::on_load_clicked()
{
QString plik;
string splik;
plik = QFileDialog::getOpenFileName(this,"Otwórz plik",QString(),"Pliki tekstowe (*.txt)");
splik = plik.toStdString();
ifstream loader;
loader.open(splik.c_str());
graph.points.clear();
if(loader.is_open())
{
while(!loader.eof())
{
point a(0,0,0);
loader >> a.x >> a.y >> a.z;
graph.points.push_back(a);
}
loader.close();
}
}
void MainWindow::on_plot_clicked()
{
int a = sqrt(graph.points.size());
mglData x(a,a);
mglData y(a,a);
mglData z(a,a);
long long int k = 0;
for (long long int i = 0;i<sqrt(graph.points.size());i++)
{
for (long long int j = 0;j<sqrt(graph.points.size());j++)
{
x.a[i+a*j] = graph.points[k].x;
y.a[i+a*j] = graph.points[k].y;
z.a[i+a*j] = graph.points[k].z;
k++;
}
}
mglGraph plot;
plot.Rotate(50,60);
plot.Light(true);
plot.Surf(x,y,z);
QMathGL plotter;
plotter.setGraph(&plot);
plotter.show();
}
#包括“mainwindow.h”
#包括“ui_main window.h”
#包括“functions.h”
#包括“surface.h”
#包括“error.h”
#包括
#包括
#包括
#包括
#包括
#包括
曲面图;
主窗口::主窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
}
MainWindow::~MainWindow()
{
删除用户界面;
}
void主窗口::在绘图时单击()
{
字符串s;
bool-correct=1;
错误*错误窗口=新错误(此错误);
s=ui->eqEdit->text().toStdString();
period fPeriod=period(ui->upEdit->text().toDouble(),ui->lowEdit->text().toDouble());
functionSum fSum=functionSum(s,fPeriod,ui->accEdit->text().toDouble());
对于(int i=0;i显示();
}
图形=表面(fSum);
}
void主窗口::在保存时单击()
{
QString-plik;
字符串splik;
plik=QFileDialog::getSaveFileName(这是“zapiszplik”,QString(),“Pliki-tekstowe(*.txt)”;
splik=plik.toStdString();
流节约器;
saver.open(splik.c_str());
if(saver.is_open())
{
对于(int i=0;i 对于(long long int i=0;我有什么帮助的答案吗?surface
类似乎是一个全局变量,要么继承自QWidget
,要么尝试实例化一个QWidget
。如果没有问题,请检查所有其他源文件,并确保没有任何widget是全局变量。surface不支持它来自QWidget的rit。它只是一个表示一组点的类。好的。现在开始最小化代码。您的目标是拥有一个单独的文件(justmain.cpp
)完全最小化的测试用例。换句话说,如果你从代码中删除任何一条语句,问题应该消失。通常,当你准备这样的最小化时,你会自己找到问题的根源。不过,你正在显示的代码似乎不是这个问题的根源。旁注:1.你不会看到图因为您在本地创建了一个<代码>绘图器< /> >,然后它立即退出了作为“代码> OnOpTultTyCKEXTION/Objult> Real. 2。您不必使用代码> Cuffe())/Field>一个IFFSULL——这是C++与RAI模式的结合点,并与实例的自动存储相结合。
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}