2016-06-01 13 views
-1

Ich lerne, wie Qt für C++ GUI-Programmierung zu verwenden, und ich bin nicht in der Lage, das Projekt aufgrund eines seltsamen Fehlers zu kompilieren.Probleme mit Konstruktor mit Qt

bekomme ich folgende Fehlermeldung:

error: out-of-line definition of 'FindDialog' does not match any declaration in 'FindDialog' 

Aber ich kann nicht sehen, warum heißt es, dass seit der Festlegung und Durchführung der Klasse Finddialog Spiel perfekt. Hier ist der Code der .h und .cpp Datei. Ich hoffe, dass mir jeder sagen kann, wo der Fehler liegt und wie ich ihn lösen könnte.

Die H-Datei:

#ifndef FINDDIALOG_H 
#define FINDDIALOG_H 

#include <QDialog> 

class QCheckBox; 
class QLabel; 
class QLineEdit; 
class QPushButton; 

class FindDialog : public QDialog 
{ 
    Q_OBJECT 

public: 
    FindDialog(QWidget *parent = 0); 

signals: 
    void findNext (const QString &str, Qt::CaseSensitivity cs); 
    void findPrevious (const QString &str, Qt::CaseSensitivity cs); 

private slots: 
    void findClicked(); 
    void enableFindButton (const QString &text); 

private: 
    QLabel *label; 
    QLineEdit *lineEdit; 
    QCheckBox *caseCheckBox; 
    QCheckBox *backwardCheckBox; 
    QPushButton *findButton; 
    QPushButton *closeButton; 
}; 

#endif // FINDDIALOG_H 

Die CPP-Datei:

#include "finddialog.h" 

#include <QDialog> 
#include <QLabel> 
#include <QPushButton> 
#include <QLineEdit> 
#include <QCheckBox> 
#include <QHBoxLayout> 
#include <QVBoxLayout> 

FindDialog::FindDialog (QDialog *parent) : QDialog(parent) 
{ 
    label = new QLabel(tr("Find &what:")); 
    lineEdit = new QLineEdit; 
    label->setBuddy(lineEdit); 

    caseCheckBox = new QCheckBox(tr("Match &case")); 
    backwardCheckBox = new QCheckBox(tr("Search &backward")); 

    findButton = new QPushButton(tr("&Find:")); 
    findButton->setDefault(true); 
    findButton->setEnabled(false); 

    closeButton = new QPushButton(tr("Close")); 

    connect(lineEdit, SIGNAL(textChanged(const QString &)), 
      this, SLOT(enableFindButton(const QString &))); 
    connect(findButton, SIGNAL(clicked()), 
      this, SLOT(findClicked())); 
    connect(closeButton, SIGNAL(clicked()), 
      this, SLOT(close())); 

    QHBoxLayout *topLeftLayout = new QHBoxLayout; 
    topLeftLayout->addWidget(label); 
    topLeftLayout->addWidget(lineEdit); 

    QVBoxLayout *leftLayout = new QVBoxLayout; 
    leftLayout->addLayout(topLeftLayout); 
    leftLayout->addWidget(caseCheckBox); 
    leftLayout->addWidget(backwardCheckBox); 

    QVBoxLayout *rightLayout = new QVBoxLayout; 
    rightLayout->addWidget(findButton); 
    rightLayout->addWidget(closeButton); 
    rightLayout->addStretch(); 

    QHBoxLayout *mainLayout = new QHBoxLayout; 
    mainLayout->addLayout(leftLayout); 
    mainLayout->addLayout(rightLayout); 
    setLayout(mainLayout); 

    setWindowTitle(tr("Find")); 
    setFixedHeight(sizeHint().height()); 
} 

void FindDialog::findClicked() 
{ 
    QString text = lineEdit->text(); 
    Qt::CaseSensitivity cs = 
      caseCheckBox->isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive; 

    if (backwardCheckBox->isChecked()) 
     emit findPrevious(text, cs); 
    else 
     emit findNext(text, cs); 
} 

void FindDialog::enableFindButton (const QString &text) 
{ 
    findButton->setEnabled(!text.isEmpty()); 
} 
+1

Gewählt als "einfache Tippfehler" zu schließen: 's/QDialog/QWidget /'. – BoBTFish

Antwort

4

Ihr Konstruktor als FindDialog(QWidget *parent = 0); deklariert ist Doch Sie definieren es als FindDialog::FindDialog (QDialog *parent). Verwenden Sie entweder QDialog oder QWidget als übergeordneter Typ in beiden Fällen (Wahrscheinlich möchten Sie in beiden Fällen QWidget).

definieren also den Konstruktor als: FindDialog::FindDialog (QWidget *parent)