[gelöst] Address Book Tutorial führt zu Segmentation Fault
Verfasst: 26. Juni 2011 14:00
Hallo zusammen,
ich versuche gerade das Tutorial nachzuvollziehen.
Ich bin am Ende von Kapitel 2.
Beim Ausführen kommt es aber schon zu einem "Segmentation Fault" an der Stelle:
(die Stelle ist unten im Quellcode von addressbook.cpp mit einem Kommentar markiert)
Ich habe den Text im Qt Assustant mit meinem verglichen und komme dem Problem nicht auf die Spur.
Kommentiere ich die Zeile aus, führt die nächste Zeile
QLabel *addressLabel = new QLabel(tr("Address:"));
ebenfalls zum Segmentation Fault.
Vielleicht kann mir jemand dabei Helfen.
Nach einer Pause ist das Tutorial eigenltich eine gute Hilfe.
Vielen Dank!
addressbook.h
addressbook.cpp
ich versuche gerade das Tutorial nachzuvollziehen.
Ich bin am Ende von Kapitel 2.
Beim Ausführen kommt es aber schon zu einem "Segmentation Fault" an der Stelle:
Code: Alles auswählen
nameLine->setReadOnly(true);Ich habe den Text im Qt Assustant mit meinem verglichen und komme dem Problem nicht auf die Spur.
Kommentiere ich die Zeile aus, führt die nächste Zeile
QLabel *addressLabel = new QLabel(tr("Address:"));
ebenfalls zum Segmentation Fault.
Vielleicht kann mir jemand dabei Helfen.
Nach einer Pause ist das Tutorial eigenltich eine gute Hilfe.
Vielen Dank!
addressbook.h
Code: Alles auswählen
#ifndef ADDRESSBOOK_H
#define ADDRESSBOOK_H
#include <QWidget>
#include <QMap>
class QLabel;
class QLineEdit;
class QTextEdit;
class QPushButton;
class addressbook : public QWidget
{
Q_OBJECT
public:
explicit addressbook(QWidget *parent = 0);
signals:
public slots:
void addContact();
void submitContact();
void cancel();
private:
QPushButton *addButton;
QPushButton *submitButton;
QPushButton *cancelButton;
QLineEdit *nameLine;
QTextEdit *addressText;
QMap<QString, QString> contacts;
QString oldName;
QString oldAddress;
};
#endif // ADDRESSBOOK_H
Code: Alles auswählen
#include <QtGui>
#include "addressbook.h"
addressbook::addressbook(QWidget *parent) :
QWidget(parent)
{
QLabel *nameLabel = new QLabel(tr("Name:"));
nameLine = new QLineEdit;
nameLine->setReadOnly(true); //[b]Segmentation Fault [/b]
QLabel *addressLabel = new QLabel(tr("Address:"));
addressText = new QTextEdit;
addressText->setReadOnly(true);
addButton = new QPushButton(tr("&Add"));
addButton->show();
submitButton = new QPushButton(tr("&Submit"));
submitButton->hide();
cancelButton = new QPushButton(tr("&Cancel"));
cancelButton->hide();
connect (addButton, SIGNAL(clicked()), this, SLOT(addContact()));
connect (submitButton, SIGNAL(clicked()), this, SLOT(submitContact()));
connect (cancelButton, SIGNAL(clicked()), this, SLOT(cancel()));
QVBoxLayout *buttonLayout1 = new QVBoxLayout;
buttonLayout1->addWidget(addButton, Qt::AlignTop);
buttonLayout1->addWidget(submitButton);
buttonLayout1->addWidget(cancelButton);
buttonLayout1->addStretch();
QGridLayout *mainLayout = new QGridLayout;
mainLayout->addWidget(nameLabel, 0, 0);
mainLayout->addWidget(nameLine, 0, 1);
mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
mainLayout->addWidget(addressText, 1, 1);
mainLayout->addLayout(buttonLayout1, 1, 2);
setLayout(mainLayout);
setWindowTitle(tr("Simple Address Book"));
}
void addressbook::addContact()
{
oldName = nameLine->text();
oldAddress = addressText->toPlainText();
nameLine->clear();
addressText->clear();
nameLine->setReadOnly(false);
nameLine->setFocus(Qt::OtherFocusReason);
addressText->setReadOnly(false);
submitButton->show();
cancelButton->show();
}
void addressbook::submitContact()
{
QString name = nameLine->text();
QString address = addressText->toPlainText();
if (name.isEmpty() || address.isEmpty()) {
QMessageBox::information(this, tr("Empty Field"), tr("Please enter a name and address."));
return;
}
if (!contacts.contains(name)) {
contacts.insert(name, address);
QMessageBox::information(this, tr("Add Successful"), tr("\"%1\" has been added to your address book.").arg(name));
} else {
QMessageBox::information(this, tr("Add Unsuccessful"), tr ("Sorry, \"%1\" is already in your address book.").arg(name));
return;
}
if (contacts.isEmpty()) {
nameLine->clear();
addressText->clear();
}
nameLine->setReadOnly(true);
addressText->setReadOnly(true);
addButton->setEnabled(true);
submitButton->hide();
cancelButton->hide();
}
void addressbook::cancel()
{
nameLine->setText(oldName);
nameLine->setReadOnly(true);
addButton->setEnabled(true);
submitButton->hide();
cancelButton->hide();
}