c++ - 在 Qt 中错误显示 : "Fault Module Name: Qt5Cored.dll" in win 7 and when debugging : "segmentation fault" in centos linux and win 7

标签 c++ linux windows qt

我使用 QtDesigner 创建了两个对话框“listdialog.ui”和“editdialog.ui”,已发布 使用Qt5.3.1,然后添加到项目“phone book.pro”“带有源代码”使用 向导。 每次我用所有需要的 dll 启动编译的电话簿.exe 时,当我尝试 要在 QtCreator 中(或单独)启动程序,有一个运行时 一些问题细节出错,上面写着:

问题事件名称:APPPCRASH
故障模块名称:Qt5Cored.dll

使用 GUI 的其他程序运行良好(早期编译的 .exe 文件)。 另外,在调试(在 win7 中)(并在 centos6.4 中运行)时,它会显示一个消息框:-

下级停止了,因为它收到了来自操作系统的信号。

信号名称:SIGSEGV
信号含义:段错误

文件代码是:-
文件 - 1 : Editdialog.cpp :-

#include <QDialog>
#include "ui_EditDialog.h"


class EditDialog : public QDialog, public Ui::EditDialog
{
public :
EditDialog (QWidget *parent=0 );

const QString name() const;
void setName( const QString& );

const QString number() const;
void setNumber( const QString& );

private :

EditDialog *ui;
};

文件 - 2:listdialog.h

#ifndef LISTDIALOG_H
#define LISTDIALOG_H

#include <QDialog>
#include "ui_ListDialog.h"

class ListDialog : public QDialog, public Ui::ListDialog
{
Q_OBJECT

public :

//ListDialog(QObject *parent = 0);
ListDialog(QWidget *parent = 0);
//I don't know when to write "QWidget *parent=0" and when "QObject *parent=0)

private slots :
    void addItem();
    void editItem();
    void deleteItem();

private :

    ListDialog *ui;
};

#endif //LISTDIALOG_H

文件 - 3:ListDialog.cpp

#include "ListDialog.h"
#include "EditDialog.h"

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

connect(ui->addButton, SIGNAL(clicked()), this, SLOT(addItem()) );
connect(ui->editButton, SIGNAL(clicked()), this, SLOT(editItem()) );
connect(ui->deleteButton, SIGNAL(clicked()), this, SLOT(deleteItem()) );
}

void ListDialog::addItem()
{
//EditDialog *dlg = EditDialog(this);

EditDialog dlg(this);

if(QDialog::Accepted == dlg.exec())
   ui->listDialogWidget->addItem(dlg.name() + " -- " + dlg.number());
}

void ListDialog::deleteItem()
{
delete ui->listDialogWidget->currentItem();
}

void ListDialog::editItem()
{
 if(!ui->listDialogWidget->currentItem())
    return;

QStringList parts = ui->listDialogWidget->currentItem()->text().split("--");

EditDialog dlg(this);
dlg.setName(parts[0].trimmed());
dlg.setNumber(parts[1].trimmed());

if(dlg.exec() == QDialog::Accepted)
    ui->listDialogWidget->currentItem()->setText(dlg.name() + " -- " + dlg.number());
}

文件 - 4:EditDialog.cpp

#include "EditDialog.h"
EditDialog :: EditDialog(QWidget *parent) : QDialog(parent)
{
ui->setupUi(this);
}

const QString EditDialog::name() const
{
return ui->nameLineEdit->text().replace("--","").trimmed();
}
void EditDialog::setName(const QString &name)
{
ui->nameLineEdit->setText(name);
}

const QString EditDialog::number() const
{
return ui->numberLineEdit->text().replace("--","").trimmed();
}

void EditDialog::setNumber(const QString &number)
{
ui->numberLineEdit->setText(number);
}

除此之外,项目还有:- 由 QtDesigner 生成的“ui_editdialog.h”和“ui_listdialog.h”。

文件 - 5:main.cpp

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

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

//QObject parent;

QWidget parent;

/*
ListDialog *listdlg = new ListDialog;
listdlg->show();
*/
ListDialog dlg(&parent);

dlg.show();

return a.exec();
}

请任何人告诉我 - 如何克服这个问题。我在一些网站上搜索过 这是指针设置为空或外部内存访问的问题 其域。我认为它可能是由构造函数设置的 *parent=0 ( file - 2 : listdialog.h - ListDialog(QWidget *parent = 0); )但是如何克服,我不知道。

最佳答案

@PeterT 非常感谢你给我一条路。我按照您所说更改了构造函数的代码“ListDialog::ListDialog(QWidget *parent) : QDialog(parent), ui(new Ui::ListDialog)” 和“EditDialog::EditDialog(QWidget *parent) : QDialog(parent),ui(new Ui::EditDialog)” 程序现在运行良好。非常感谢。

关于c++ - 在 Qt 中错误显示 : "Fault Module Name: Qt5Cored.dll" in win 7 and when debugging : "segmentation fault" in centos linux and win 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26075373/

相关文章:

c++ - 如何从另一个类的成员函数访问数据成员和成员函数?

c++ - RTTI 有多贵?

c++ - 加速从 C++ 文件中读取整数

windows - 使用 windows ‘ShellExecute’ 函数将数据通过管道传输到文件

windows - 在调用 asm 函数之前在 C 中调用 printf 或不调用的神秘副作用?

c++ - C++ 中的唯一处理程序

c - 如何实现无锁但阻塞的行为?

linux - 无法为用户将 key 添加到远程计算机

linux - Binutil 权限错误 while "make install"

c++ - 从 jvm.dll 获取 FindClass 函数指针