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();
}