Seg Fault with multiple QDialogs
It has been a while since I tried programming using QT so I might be doing something very newbish.
Here is the situation:
--Ubuntu 8.10
--QT 4.5 binary install that includes Qt Creator 1.0
Application:
--MainWindow with two dialog boxes
I autogenerate the dialog code using Qt Creator so I have two classes that are called Ui_Dialog and Ui_Dialog2.
When I try to initialize them in the MainWindow constructor the entire application seg faults when it is run.
Here is the code:
Code:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtGui/QMainWindow>
#include <QDialog>
namespace Ui
{
class Dialog;
class Dialog2;
class MainWindowClass;
}
{
Q_OBJECT
public:
~MainWindow();
private:
Ui::MainWindowClass *ui;
Ui::Dialog *p_dOne;
Ui::Dialog2 *p_dTwo;
};
#endif // MAINWINDOW_H
Code:
#include "mainwindow.h"
#include "ui_dialog.h"
#include "ui_dialog2.h"
#include "ui_mainwindow.h"
MainWindow
::MainWindow(QWidget *parent
){
ui->setupUi(this);
p_dOne->setupUi(&dOne);
p_dTwo->setupUi(&dTwo);
}
MainWindow::~MainWindow()
{
delete ui;
}
Code:
/********************************************************************************
** Form generated from reading ui file 'dialog.ui'
**
** Created: Sat Mar 21 22:13:51 2009
** by: Qt User Interface Compiler version 4.5.0
**
** WARNING! All changes made in this file will be lost when recompiling ui file!
********************************************************************************/
#ifndef UI_DIALOG_H
#define UI_DIALOG_H
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QDialogButtonBox>
#include <QtGui/QGridLayout>
#include <QtGui/QHeaderView>
#include <QtGui/QLabel>
QT_BEGIN_NAMESPACE
class Ui_Dialog
{
public:
{
if (Dialog->objectName().isEmpty())
Dialog
->setObjectName
(QString::fromUtf8("Dialog"));
Dialog->resize(400, 100);
gridLayout
->setObjectName
(QString::fromUtf8("gridLayout"));
label
->setObjectName
(QString::fromUtf8("label"));
gridLayout->addWidget(label, 0, 0, 1, 1);
buttonBox
->setObjectName
(QString::fromUtf8("buttonBox"));
buttonBox->setOrientation(Qt::Horizontal);
gridLayout->addWidget(buttonBox, 1, 0, 1, 1);
retranslateUi(Dialog);
QObject::connect(buttonBox,
SIGNAL(accepted
()), Dialog,
SLOT(accept
()));
QObject::connect(buttonBox,
SIGNAL(rejected
()), Dialog,
SLOT(reject
()));
} // setupUi
void retranslateUi
(QDialog *Dialog
) {
label
->setText
(QApplication::translate("Dialog",
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n""<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Dialog One</p></body></html>",
0,
QApplication::UnicodeUTF8));
Q_UNUSED(Dialog);
} // retranslateUi
};
namespace Ui {
class Dialog: public Ui_Dialog {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_DIALOG_H
Code:
/********************************************************************************
** Form generated from reading ui file 'dialog2.ui'
**
** Created: Sat Mar 21 22:15:00 2009
** by: Qt User Interface Compiler version 4.5.0
**
** WARNING! All changes made in this file will be lost when recompiling ui file!
********************************************************************************/
#ifndef UI_DIALOG2_H
#define UI_DIALOG2_H
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QDialogButtonBox>
#include <QtGui/QGridLayout>
#include <QtGui/QHeaderView>
#include <QtGui/QLabel>
QT_BEGIN_NAMESPACE
class Ui_Dialog2
{
public:
{
if (Dialog2->objectName().isEmpty())
Dialog2
->setObjectName
(QString::fromUtf8("Dialog2"));
Dialog2->resize(400, 100);
gridLayout
->setObjectName
(QString::fromUtf8("gridLayout"));
label
->setObjectName
(QString::fromUtf8("label"));
gridLayout->addWidget(label, 0, 0, 1, 1);
buttonBox
->setObjectName
(QString::fromUtf8("buttonBox"));
buttonBox->setOrientation(Qt::Horizontal);
gridLayout->addWidget(buttonBox, 1, 0, 1, 1);
retranslateUi(Dialog2);
QObject::connect(buttonBox,
SIGNAL(accepted
()), Dialog2,
SLOT(accept
()));
QObject::connect(buttonBox,
SIGNAL(rejected
()), Dialog2,
SLOT(reject
()));
} // setupUi
void retranslateUi
(QDialog *Dialog2
) {
label
->setText
(QApplication::translate("Dialog2",
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n""<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Dialog Two</p></body></html>",
0,
QApplication::UnicodeUTF8));
Q_UNUSED(Dialog2);
} // retranslateUi
};
namespace Ui {
class Dialog2: public Ui_Dialog2 {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_DIALOG2_H
The last two are automatically generated. I cannot figure out why initializing them both in the MainWindow constructor would cause a seg fault!!!
Re: Seg Fault with multiple QDialogs
Quote:
Originally Posted by
kroenecker
Code:
MainWindow
::MainWindow(QWidget *parent
){
ui->setupUi(this);
p_dOne->setupUi(&dOne);
p_dTwo->setupUi(&dTwo);
}
p_dOne and p_dTwo are NULL pointer! try:
Code:
MainWindow
::MainWindow(QWidget *parent
) : QMainWindow(parent
), ui
(new Ui
::MainWindowClass), p_dOne
(new Ui
::Dialog), p_dTwo
(new Ui
::Dialog2) {
Re: Seg Fault with multiple QDialogs
Hahahaha. Good catch that has to be it. Now I'm embarrassed.