Seite 1 von 1

SortDialog.exe hat ein Problem festgestellt und muss beendet

Verfasst: 19. November 2008 20:20
von getit
Hallo,

ich versuche mich an dem Buch "C++ GUI Programmierung mit Qt4".

Als IDE verwende ich eclipse. Habe schon mehrere Beispiele erfolgreich getestet, daher denke ich das alles richtig eingerichtet ist.

Ich erhalte bei jeder Ausführung der SortDialog.exe folgende Fehlermeldung: s. sortdialog.jpg
Ich habe das auch schon auf 2PCs getestet, da ich auf nen Speicherfehler getippt hätte - aber das hat auch nix gebracht.

Hier mal der Quellcode:
sortdialog.h

Code: Alles auswählen

#ifndef SORTDIALOG_H_
#define SORTDIALOG_H_

#include <QDialog>
#include "sortdialog.ui.h"

class SortDialog : public QDialog, public Ui::SortDialog {
	Q_OBJECT
	public:
		SortDialog(QWidget *parent = 0);
		void setColumnRange(QChar fist, QChar last);
};
#endif /* SORTDIALOG_H_ */
die entsprechende sortdialog.cpp:

Code: Alles auswählen

#include "sortdialog.h"
#include <QtGui>

SortDialog::SortDialog(QWidget *parent) : QDialog(parent) {
	setupUi(this);

	secondaryGroupBox->hide();
	tertiaryGroupBox->hide();
	layout()->setSizeConstraint(QLayout::SetFixedSize);

	setColumnRange('A', 'Z');
}

void SortDialog::setColumnRange(QChar first, QChar last) {
	primaryColumnCombo->clear();
	secondaryColumnCombo->clear();
	tertiaryColumnCombo->clear();

	secondaryColumnCombo->addItem(tr("None"));
	tertiaryColumnCombo->addItem(tr("None"));

	primaryColumnCombo->setMinimumSize(secondaryColumnCombo->sizeHint());

	QChar ch = first;
	while (ch <= last) {
		primaryColumnCombo->addItem(QChar(ch));
		secondaryColumnCombo->addItem(QChar(ch));
		tertiaryColumnCombo->addItem(QChar(ch));
		ch = ch.unicode() + 1;
	}
}
und die sotdialog.ui.h

Code: Alles auswählen

#ifndef SORTDIALOG_H
#define SORTDIALOG_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QComboBox>
#include <QtGui/QGridLayout>
#include <QtGui/QGroupBox>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>
#include <QtGui/QSpacerItem>
#include <QtGui/QVBoxLayout>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_SortDialog
{
public:
    QWidget *widget;
    QVBoxLayout *verticalLayout;
    QPushButton *okButton;
    QPushButton *cancelButton;
    QSpacerItem *verticalSpacer;
    QPushButton *moreButton;
    QWidget *widget1;
    QVBoxLayout *verticalLayout_2;
    QGroupBox *primaryGroupBox;
    QGridLayout *gridLayout;
    QLabel *label;
    QComboBox *primaryColumnCombo;
    QSpacerItem *horizontalSpacer1;
    QLabel *label_2;
    QComboBox *primaryOrderCombo;
    QSpacerItem *verticalSpacer_2;
    QGroupBox *secondaryGroupBox;
    QGridLayout *gridLayout_2;
    QLabel *label_3;
    QComboBox *secondaryColumnCombo;
    QSpacerItem *horizontalSpacer2;
    QLabel *label_4;
    QComboBox *secondaryOrderCombo;
    QGroupBox *tertiaryGroupBox;
    QGridLayout *gridLayout_3;
    QLabel *label_5;
    QComboBox *tertiaryColumnCombo;
    QSpacerItem *horizontalSpacer3;
    QLabel *label_6;
    QComboBox *tertiaryOrderCombo;

    void setupUi(QWidget *SortDialog)
    {
    if (SortDialog->objectName().isEmpty())
        SortDialog->setObjectName(QString::fromUtf8("SortDialog"));
    SortDialog->resize(490, 323);
    widget = new QWidget(SortDialog);
    widget->setObjectName(QString::fromUtf8("widget"));
    widget->setGeometry(QRect(190, 20, 79, 111));
    verticalLayout = new QVBoxLayout(widget);
    verticalLayout->setSpacing(6);
    verticalLayout->setMargin(11);
    verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
    verticalLayout->setContentsMargins(0, 0, 0, 0);
    okButton = new QPushButton(widget);
    okButton->setObjectName(QString::fromUtf8("okButton"));
    okButton->setDefault(true);

    verticalLayout->addWidget(okButton);

    cancelButton = new QPushButton(widget);
    cancelButton->setObjectName(QString::fromUtf8("cancelButton"));

    verticalLayout->addWidget(cancelButton);

    verticalSpacer = new QSpacerItem(4, 20, QSizePolicy::Minimum, QSizePolicy::Expanding);

    verticalLayout->addItem(verticalSpacer);

    moreButton = new QPushButton(widget);
    moreButton->setObjectName(QString::fromUtf8("moreButton"));
    moreButton->setCheckable(true);

    verticalLayout->addWidget(moreButton);

    widget1 = new QWidget(SortDialog);
    widget1->setObjectName(QString::fromUtf8("widget1"));
    widget1->setGeometry(QRect(20, 20, 156, 283));
    verticalLayout_2 = new QVBoxLayout(widget1);
    verticalLayout_2->setSpacing(6);
    verticalLayout_2->setMargin(11);
    verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
    verticalLayout_2->setContentsMargins(0, 0, 0, 0);
    primaryGroupBox = new QGroupBox(widget1);
    primaryGroupBox->setObjectName(QString::fromUtf8("primaryGroupBox"));
    gridLayout = new QGridLayout(primaryGroupBox);
    gridLayout->setSpacing(6);
    gridLayout->setMargin(11);
    gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
    label = new QLabel(primaryGroupBox);
    label->setObjectName(QString::fromUtf8("label"));

    gridLayout->addWidget(label, 0, 0, 1, 1);

    primaryColumnCombo = new QComboBox(primaryGroupBox);
    primaryColumnCombo->setObjectName(QString::fromUtf8("primaryColumnCombo"));

    gridLayout->addWidget(primaryColumnCombo, 0, 1, 1, 1);

    horizontalSpacer1 = new QSpacerItem(28, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);

    gridLayout->addItem(horizontalSpacer1, 0, 2, 1, 1);

    label_2 = new QLabel(primaryGroupBox);
    label_2->setObjectName(QString::fromUtf8("label_2"));

    gridLayout->addWidget(label_2, 1, 0, 1, 1);

    primaryOrderCombo = new QComboBox(primaryGroupBox);
    primaryOrderCombo->setObjectName(QString::fromUtf8("primaryOrderCombo"));

    gridLayout->addWidget(primaryOrderCombo, 1, 1, 1, 2);


    verticalLayout_2->addWidget(primaryGroupBox);

    verticalSpacer_2 = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding);

    verticalLayout_2->addItem(verticalSpacer_2);

    secondaryGroupBox = new QGroupBox(widget1);
    secondaryGroupBox->setObjectName(QString::fromUtf8("secondaryGroupBox"));
    gridLayout_2 = new QGridLayout(secondaryGroupBox);
    gridLayout_2->setSpacing(6);
    gridLayout_2->setMargin(11);
    gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
    label_3 = new QLabel(secondaryGroupBox);
    label_3->setObjectName(QString::fromUtf8("label_3"));

    gridLayout_2->addWidget(label_3, 0, 0, 1, 1);

    secondaryColumnCombo = new QComboBox(secondaryGroupBox);
    secondaryColumnCombo->setObjectName(QString::fromUtf8("secondaryColumnCombo"));

    gridLayout_2->addWidget(secondaryColumnCombo, 0, 1, 1, 1);

    horizontalSpacer2 = new QSpacerItem(28, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);

    gridLayout_2->addItem(horizontalSpacer2, 0, 2, 1, 1);

    label_4 = new QLabel(secondaryGroupBox);
    label_4->setObjectName(QString::fromUtf8("label_4"));

    gridLayout_2->addWidget(label_4, 1, 0, 1, 1);

    secondaryOrderCombo = new QComboBox(secondaryGroupBox);
    secondaryOrderCombo->setObjectName(QString::fromUtf8("secondaryOrderCombo"));

    gridLayout_2->addWidget(secondaryOrderCombo, 1, 1, 1, 2);


    verticalLayout_2->addWidget(secondaryGroupBox);

    tertiaryGroupBox = new QGroupBox(widget1);
    tertiaryGroupBox->setObjectName(QString::fromUtf8("tertiaryGroupBox"));
    gridLayout_3 = new QGridLayout(tertiaryGroupBox);
    gridLayout_3->setSpacing(6);
    gridLayout_3->setMargin(11);
    gridLayout_3->setObjectName(QString::fromUtf8("gridLayout_3"));
    label_5 = new QLabel(tertiaryGroupBox);
    label_5->setObjectName(QString::fromUtf8("label_5"));

    gridLayout_3->addWidget(label_5, 0, 0, 1, 1);

    tertiaryColumnCombo = new QComboBox(tertiaryGroupBox);
    tertiaryColumnCombo->setObjectName(QString::fromUtf8("tertiaryColumnCombo"));

    gridLayout_3->addWidget(tertiaryColumnCombo, 0, 1, 1, 1);

    horizontalSpacer3 = new QSpacerItem(28, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);

    gridLayout_3->addItem(horizontalSpacer3, 0, 2, 1, 1);

    label_6 = new QLabel(tertiaryGroupBox);
    label_6->setObjectName(QString::fromUtf8("label_6"));

    gridLayout_3->addWidget(label_6, 1, 0, 1, 1);

    tertiaryOrderCombo = new QComboBox(tertiaryGroupBox);
    tertiaryOrderCombo->setObjectName(QString::fromUtf8("tertiaryOrderCombo"));

    gridLayout_3->addWidget(tertiaryOrderCombo, 1, 1, 1, 2);


    verticalLayout_2->addWidget(tertiaryGroupBox);


    retranslateUi(SortDialog);
    QObject::connect(okButton, SIGNAL(clicked()), SortDialog, SLOT(accept()));
    QObject::connect(cancelButton, SIGNAL(clicked()), SortDialog, SLOT(reject()));
    QObject::connect(moreButton, SIGNAL(toggled(bool)), secondaryGroupBox, SLOT(setVisible(bool)));
    QObject::connect(moreButton, SIGNAL(toggled(bool)), tertiaryGroupBox, SLOT(setVisible(bool)));

    QMetaObject::connectSlotsByName(SortDialog);
    } // setupUi

    void retranslateUi(QWidget *SortDialog)
    {
    SortDialog->setWindowTitle(QApplication::translate("SortDialog", "Sort", 0, QApplication::UnicodeUTF8));
    okButton->setText(QApplication::translate("SortDialog", "OK", 0, QApplication::UnicodeUTF8));
    cancelButton->setText(QApplication::translate("SortDialog", "Cancel", 0, QApplication::UnicodeUTF8));
    moreButton->setText(QApplication::translate("SortDialog", "&More", 0, QApplication::UnicodeUTF8));
    primaryGroupBox->setTitle(QApplication::translate("SortDialog", "&Primary Key", 0, QApplication::UnicodeUTF8));
    label->setText(QApplication::translate("SortDialog", "Column:", 0, QApplication::UnicodeUTF8));
    primaryColumnCombo->clear();
    primaryColumnCombo->insertItems(0, QStringList()
     << QApplication::translate("SortDialog", "None", 0, QApplication::UnicodeUTF8)
    );
    label_2->setText(QApplication::translate("SortDialog", "Order:", 0, QApplication::UnicodeUTF8));
    primaryOrderCombo->clear();
    primaryOrderCombo->insertItems(0, QStringList()
     << QApplication::translate("SortDialog", "Ascending", 0, QApplication::UnicodeUTF8)
     << QApplication::translate("SortDialog", "Descending", 0, QApplication::UnicodeUTF8)
    );
    secondaryGroupBox->setTitle(QApplication::translate("SortDialog", "&Primary Key", 0, QApplication::UnicodeUTF8));
    label_3->setText(QApplication::translate("SortDialog", "Column:", 0, QApplication::UnicodeUTF8));
    secondaryColumnCombo->clear();
    secondaryColumnCombo->insertItems(0, QStringList()
     << QApplication::translate("SortDialog", "None", 0, QApplication::UnicodeUTF8)
    );
    label_4->setText(QApplication::translate("SortDialog", "Order:", 0, QApplication::UnicodeUTF8));
    secondaryOrderCombo->clear();
    secondaryOrderCombo->insertItems(0, QStringList()
     << QApplication::translate("SortDialog", "Ascending", 0, QApplication::UnicodeUTF8)
     << QApplication::translate("SortDialog", "Descending", 0, QApplication::UnicodeUTF8)
    );
    tertiaryGroupBox->setTitle(QApplication::translate("SortDialog", "&Primary Key", 0, QApplication::UnicodeUTF8));
    label_5->setText(QApplication::translate("SortDialog", "Column:", 0, QApplication::UnicodeUTF8));
    tertiaryColumnCombo->clear();
    tertiaryColumnCombo->insertItems(0, QStringList()
     << QApplication::translate("SortDialog", "None", 0, QApplication::UnicodeUTF8)
    );
    label_6->setText(QApplication::translate("SortDialog", "Order:", 0, QApplication::UnicodeUTF8));
    tertiaryOrderCombo->clear();
    tertiaryOrderCombo->insertItems(0, QStringList()
     << QApplication::translate("SortDialog", "Ascending", 0, QApplication::UnicodeUTF8)
     << QApplication::translate("SortDialog", "Descending", 0, QApplication::UnicodeUTF8)
    );
    Q_UNUSED(SortDialog);
    } // retranslateUi

};

namespace Ui {
    class SortDialog: public Ui_SortDialog {};
} // namespace Ui

QT_END_NAMESPACE

#endif // SORTDIALOG_H
Der Fehler tritt wird durch die Klasse SortDialog hervorgerufen.
Hier noch die main.cpp:

Code: Alles auswählen

#include <qapplication.h>
#include "sortdialog.h"

int main(int argc, char *argv[]) {
	QApplication app(argc, argv);
	SortDialog *dialog = new SortDialog;
	dialog->setColumnRange('C', 'F');
	dialog->show();
	return app.exec();
}

Verfasst: 19. November 2008 20:31
von Christian81
Wie wäre es mal mit Debuggen?

Verfasst: 19. November 2008 21:09
von getit
@Christian81
Danke für den Tip!!

Aber wie mache ich das?

Verfasst: 19. November 2008 22:27
von upsala
Was sagt eigentlich Microsoft zu deinem Problem, sie bitten doch um den Bericht :lol:

Und wie man den Debugger bedient, steht im Handbuch dazu.

Verfasst: 20. November 2008 08:05
von Christian81
Mal wieder ein typischer Fall von 'ich fang jetzt mal Qt an ohne überhaupt zu wissen wie die Grundlagen (C, C++, Debugger, ...) funktionieren'.
Qt und deine Applikation muss im Debug-Mode übersetzt werden. Danach kann man mit gdb in Eclipse debuggen (naja, behauptet man zumindest aber bei Eclipse habe ich keine Ahnung - ist aber nur meine persönliche Meinung)