Solved Segmentation Fault beim beenden
-
Hallo,
ich bin gerade dabei ein Qt Programm und einer Oberfläche mit QWidgets zu erstellen. Ich habe jetzt alle Elemente platziert und ein Beenden Button angelegt, diesen mittels connect dem close() SLOT verbunden. Beim beenden bekomme ich allerdings jetzt einen Segmentation Fault. Hat einer eine Idee wo der herkommt?
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { font14pxB.setPixelSize(14); font14pxB.setBold(true); font9px.setPixelSize(9); if (this->objectName().isEmpty()) this->setObjectName(QStringLiteral("MainWindow")); this->resize(800, 480); this->setMaximumSize(800, 480); this->setMinimumSize(800, 480); QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); this->setSizePolicy(sizePolicy); centralWidget = new QWidget(this); centralWidget->setObjectName(QStringLiteral("centralwidget")); verticalLayoutWidget = new QWidget(centralWidget); verticalLayoutWidget->setObjectName(QStringLiteral("verticalLayoutWidget")); verticalLayoutWidget->setGeometry(0, 0, 800, 480); verticalLayout = new QVBoxLayout(verticalLayoutWidget); verticalLayout->setSpacing(5); verticalLayout->setObjectName(QStringLiteral("verticalLayout")); labelTitel = new QLabel(verticalLayoutWidget); labelTitel->setObjectName(QStringLiteral("labelTitel")); labelTitel->setFont(font14pxB); labelTitel->setAlignment(Qt::AlignCenter); labelTitel->setText(QString("Geocache Verwaltung")); labelVersion = new QLabel(this); labelVersion->setText(QString("(c) by Saver Soft - Sauer, 2017, Version 1.0")); labelVersion->setFont(font9px); pB_Beenden = new QPushButton(verticalLayoutWidget); pB_Beenden->setObjectName(QStringLiteral("pB_Beenden")); pB_Beenden->setText(QString("&Beenden")); pB_Admin = new QPushButton(verticalLayoutWidget); pB_Admin->setObjectName(QStringLiteral("pB_Beenden")); pB_Admin->setText(QString("&Admin")); pB_GCListe = new QPushButton(verticalLayoutWidget); pB_GCListe->setObjectName(QStringLiteral("pB_GCListe")); pB_GCListe->setText(QString("GC Liste")); pB_Helper = new QPushButton(verticalLayoutWidget); pB_Helper->setObjectName(QStringLiteral("pB_Helper")); pB_Helper->setText(QString("Hilfstabellen")); pB_GCEdit = new QPushButton(verticalLayoutWidget); pB_GCEdit->setObjectName(QStringLiteral("pB_GCEdit")); pB_GCEdit->setText(QString("GC Bearbeiten")); vSp_10 = new QSpacerItem(5, 10, QSizePolicy::Minimum, QSizePolicy::Expanding); vSp_20 = new QSpacerItem(5, 20, QSizePolicy::Minimum, QSizePolicy::Expanding); vSp_50 = new QSpacerItem(5, 50, QSizePolicy::Minimum, QSizePolicy::Expanding); hSp_10 = new QSpacerItem(10, 5, QSizePolicy::Minimum, QSizePolicy::Expanding); hSp_20 = new QSpacerItem(20, 5, QSizePolicy::Minimum, QSizePolicy::Expanding); gridLayout = new QGridLayout(); gridLayout->setObjectName(QStringLiteral("gridLayout")); gridLayout->addItem(hSp_10, 1, 1, 1, 1); gridLayout->addWidget(pB_GCListe, 1, 2, 1, 1); gridLayout->addItem(hSp_20, 1, 3, 1, 1); gridLayout->addWidget(pB_GCEdit, 1, 4, 1, 1); gridLayout->addItem(hSp_20, 1, 5, 1, 3); gridLayout->addItem(vSp_10, 2, 1, 1, 7); gridLayout->addItem(hSp_10, 3, 1, 1, 1); gridLayout->addWidget(pB_Admin, 3, 2, 1, 1); gridLayout->addItem(hSp_20, 3, 3, 1, 1); gridLayout->addWidget(pB_Helper, 3, 4, 1, 1); gridLayout->addItem(hSp_20, 3, 5, 1, 1); gridLayout->addWidget(pB_Beenden, 3, 6, 1, 1); gridLayout->addItem(hSp_10, 3, 7, 1, 1); gridLayout->addItem(hSp_10, 4, 1, 1, 1); gridLayout->setRowStretch(4,1); verticalLayout->addItem(vSp_10); verticalLayout->addWidget(labelTitel); verticalLayout->addItem(vSp_50); verticalLayout->addLayout(gridLayout); verticalLayout->setStretch(3, 1); statusBar = new QStatusBar(this); statusBar->addPermanentWidget(labelVersion); this->setCentralWidget(centralWidget); this->setWindowTitle(QString("Geocache Verwaltung")); this->setStatusBar(statusBar); QObject::connect(pB_Beenden, SIGNAL(clicked(bool)), this, SLOT(close())); }
Danke schonmal für Eure Hilfe.
gruss
martin
-
@msauer75 Stacktrace könnte helfen. Machst du irgendwas im Destructor?
-
@msauer75 hi, normalerweise verbindet man den eigenen "close" button nicht mit QWidget::Close <- das schließt nämlich nur das widget. Was aber nicht bedeutet dass das Programm auch beendet wird.
ich würde das hier empfehlen:
connect(pB_Beenden, &QPushButton::clicked, qApp, &QApplication::quit);
zum Segfault, mehr infos pls. Wie @jsulm schon sagte ;-)
-
Hallo,
es lag an den Spacer Items im GridLayout. Hier hatte ich mehrmals das selbe Item übergeben.
gruss
martin