-1

私はQtを初めて使用し、それをいじくり回しています。

「Qt4を使用したCGUIプログラミング」からサンプルコードを選択しましたが、コードについてわかりにくいものは見つかりませんでしたが、正しく実行されません。

** projectfile.pro

QT       += core gui

TARGET = CustomDialog
TEMPLATE = app


SOURCES += main.cpp \
    finddialog.cpp

HEADERS  += \
    finddialog.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 <QtGui>
#include "finddialog.h"

 FindDialog::FindDialog(QWidget *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);

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

** main.cpp:

#include <QtGui/QApplication>
#include "finddialog.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    FindDialog w;
    w.show();

    return a.exec();
}

ここで何が問題なのですか?

[実行]をクリックすると、ダイアログは表示されませんが、次のエラーが発生します。

ここに画像の説明を入力してください

4

1 に答える 1

2

を初期化していませんcloseButton。追加

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

コンストラクターに(シグナルを接続する前に)。

于 2012-08-08T09:36:13.580 に答える