2016-06-01 23 views
-1

C++ GUIプログラミングでQtを使用する方法を学習しています。奇妙なエラーのためにプロジェクトをコンパイルできません。Qtを使用したコンストラクタの問題

私は、次のエラーメッセージが出ます:

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

をしかし、それは完全にFindDialogクラスの試合の定義と実装以来のことを言って、なぜ私が見ることができません。 .hと.cppファイルのコードを以下に示します。私は誰でも私にエラーがどこにあるのか、どうすれば解決できるか教えてくれることを願っています。

.hファイル:

#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 

.cppファイル:

#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

。 – BoBTFish

答えて

4

あなたのコンストラクタはFindDialog(QWidget *parent = 0); として宣言されているしかし、あなたはFindDialog::FindDialog (QDialog *parent)として定義します。いずれの場合も、QDialogまたはQWidgetを親タイプとして使用してください(どちらの場合もおそらくQWidgetが必要です)。

ようにコンストラクタを定義: `S/QDialog/QWidgetの/`: "シンプル誤字" と閉じるように投票 FindDialog::FindDialog (QWidget *parent)

関連する問題