TSL_
TSL_

Reputation: 2079

GUI programming with Qt custom dialog

I'm new with Qt and having some playing-around with it.

I picked a sample code from "C GUI programming with Qt 4" and cannot find anything incomprehensive about the code but it doesn't run correctly:

** projectfile.pro

QT       += core gui

TARGET = CustomDialog
TEMPLATE = app


SOURCES += main.cpp \
    finddialog.cpp

HEADERS  += \
    finddialog.h

** dialog header:

#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

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

what's wrong here??

when I click run, no dialog is shown but this error:

enter image description here

Upvotes: 0

Views: 4852

Answers (1)

Claudio
Claudio

Reputation: 1706

You have not initialized closeButton. Add

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

to your constructor (before connecting its signal).

Upvotes: 3

Related Questions