Qt奇怪的调试器错误QWidget和QApplication

时间:2018-04-16 18:51:20

标签: c++ qt

当我将代码输入我的按钮的插槽时会发生这种情况

当我正常调试应用程序时,所有功能等都可以。 但是当我尝试在UI中使用我的代码时,某些事情就会破灭。 我正在为我的大学班制作停车系统, 我有一个父母级车辆和4个公共继承的儿童班。

这里是UI源文件中的代码:

#include "datain.h"
#include "ui_datain.h"
#include <QMessageBox>
#include <car.h>
#include <bike.h>
#include <motorbike.h>
#include <tir.h>
#include <vehicle.h>
#include <iostream>

using namespace std;

dataIn::dataIn(QWidget *parent) :
     QDialog(parent),
    ui(new Ui::dataIn)
{
    ui->setupUi(this);
}

dataIn::~dataIn()
    {
    delete ui;
    }
 dataIn siema;


 void dataIn::on_lineEdit_textEdited(const QString &arg1)
{
   siema.rejestracja=arg1;
 }

void dataIn::on_lineEdit_2_textEdited(const QString &arg1)
{
    siema.marka=arg1;
}

 void dataIn::on_car_clicked()
{
    Vehicle *wsk;

    string reje,mareczka;
    reje=siema.rejestracja.toStdString();
    mareczka=siema.marka.toStdString();
    Car obj(reje,mareczka);

   wsk=&obj;
   wsk->add();

}

void dataIn::on_motorcycle_clicked()
{
    Vehicle *wsk;

    string reje,mareczka;
    reje=siema.rejestracja.toStdString();
    mareczka=siema.marka.toStdString();
    Motorbike obj(reje,mareczka);

  wsk=&obj;
  wsk->add();

}

void dataIn::on_bike_clicked()
{
    Vehicle *wsk;

string reje,mareczka;
reje=siema.rejestracja.toStdString();
mareczka=siema.marka.toStdString();
Bike obj(reje,mareczka);

wsk=&obj;
wsk->add();

}

 void dataIn::on_tir_clicked()
{
   Vehicle *wsk;

string reje,mareczka;
reje=siema.rejestracja.toStdString();
mareczka=siema.marka.toStdString();
Tir obj(reje,mareczka);

wsk=&obj;
wsk->add();

}

这里是主要的:

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
   MainWindow w;
    w.show();

    return a.exec();
}

dataIn code:

#ifndef DATAIN_H
#define DATAIN_H
#include <QString>
#include <iostream>
#include <QDialog>
 using namespace std;
 namespace Ui {
class dataIn;
}

class dataIn : public QDialog
{
    Q_OBJECT
   QString rejestracja;
    QString marka;
public:
    explicit dataIn(QWidget *parent = 0);
    ~dataIn();

private slots:

    void on_lineEdit_textEdited(const QString &arg1);

    void on_lineEdit_2_textEdited(const QString &arg1);

    void on_car_clicked();

    void on_motorcycle_clicked();

    void on_bike_clicked();

    void on_tir_clicked();

private:
    Ui::dataIn *ui;
};

#endif // DATAIN_H

1 个答案:

答案 0 :(得分:0)

您不得声明

dataIn siema;

并且您不应该引用它-从dataIn函数中删除所有siema. ...引用(将siema.替换为空或使用this->)。

当您第一次需要对话框时,请在MainWindow(及其子级)中创建它:

void MainWindow::whateverEvent() {
    dataIn *siema = new dataIn(this);
    siema->show();
}

如果您需要再次引用它或希望阻止它创建两次,请将指针存储在MainWindow的成员中。