我的代码出了点问题,当我执行我的程序(QWT的一个示例)时,出现此错误(程序意外完成)为什么收到此错误消息,我该如何解决?

谢谢

这是我的代码:

    main.cpp
        #include "mainwindow.h"
        #include <QtGui>
        #include <QApplication>

        int main(int argc, char *argv[])
        {

        QApplication a(argc, argv);
        MainWindow w;
        w.show();
        w.resize(400, 450);

        return a.exec();
        }
    mainwindow.cpp

      #include "mainwindow.h"


    MainWindow:: MainWindow(QWidget *parent) :
        QMainWindow(parent)

    {

    CreateGui();

    }

    MainWindow::~MainWindow()
    {

    }


    void MainWindow::CreateGui()
    {

        QwtPlot *myPlot = new QwtPlot(centralWidget());
            QwtPlotCurve *courbe = new QwtPlotCurve("Courbe 1");
            QLineEdit *test = new QLineEdit;

            QVector<double> x(5);
            QVector<double> y(5);

            // On entre des valeurs
            for(int i=0;i<5;i++)
            {
                x.append((double)i);
                y.append((double)(5-i));
            }
            courbe->setSamples(x.data(),y.data(),x.size());
            myPlot->replot();

            courbe->attach(myPlot);
            QGridLayout *layout = new QGridLayout;
            layout->addWidget(myPlot, 0, 1);
            layout->addWidget(test,1,0);
            centralWidget()->setLayout(layout);


        }

      and mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QObject>
#include <QMainWindow>
#include<QLineEdit>
#include<QGridLayout>

#include <qwt_plot.h>
#include <qwt_plot_curve.h>

class MainWindow: public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent=0);
    ~MainWindow();
private:
 private slots:
    void CreateGui();
};







#endif // MAINWINDOW_H

最佳答案

在mainwindow.h中

CreateGui不是一个插槽,它可能是,bot,目前它尚未与任何连接(信号,插槽)关联


MainWindow(QWidget * parent = 0);没有明确的,我不知道你想用明确的话说。 :S
(明确表示可以,感谢@frank)

在mainwindow.cpp中

而不是centralWidget(),您可以添加this关键字,并尝试在继承自QWidget的MainWindow小部件上进行呈现。

像这样的东西:

在mainwindow.cpp上:

void MainWindow::CreateGui()
{

    QwtPlot *myPlot = new QwtPlot(this);
    QwtPlotCurve *courbe = new QwtPlotCurve("Courbe 1");
    QLineEdit *test = new QLineEdit;

    QVector<double> x(5);
    QVector<double> y(5);

    // On entre des valeurs
    for(int i=0;i<5;i++)
    {
        x.append((double)i);
        y.append((double)(5-i));
    }
    courbe->setSamples(x.data(),y.data(),x.size());
    myPlot->replot();

    courbe->attach(myPlot);
    QGridLayout *layout = new QGridLayout;
    layout->addWidget(myPlot, 0, 1);
    layout->addWidget(test,1,0);
    this->setLayout(layout);


}



或将centralWidget设置为某种东西,因为在任何地方都没有调用setCentralWidget(QWidget *),就像@frank一样。

该文档说centralWidget()如果未设置之前将返回零。
并显示指向setCentralWidget(qwidget*)方法的链接。

我在构造函数上添加了@frank这一行。

this->setCentralWidget(new QWidget);


之后,它也可以工作。我以前从未使用过这些方法,但是显然最后一种是使用它的首选方法。

问候!

10-08 08:24