[Solved] questions about an example of "C++ GUI Programming with Qt 4 (2nd Edition)"
-
There is an example in chapter 2 of the book
finddialog.h
@#ifndef FINDDIALOG_H
#define FINDDIALOG_H#include <QDialog>
class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton;class FindDialog : public QDialog
{
Q_OBJECTpublic:
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@
part of finddialog.cpp
@#include <QtGui>#include "finddialog.h"
FindDialog::FindDialog(QWidget *parent)//Why is parent never used?
: 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);//question:Why isn't it in the way of "object. setLayout(mainLayout); "? And which is object? setWindowTitle(tr("Find"));//same question setFixedHeight(sizeHint().height());//same question
}@
-
@
setLayout(mainLayout);//question:Why isn't it in the way of "object. setLayout(mainLayout); "? And which is object?setWindowTitle(tr("Find"));//same question setFixedHeight(sizeHint().height());//same question
@
You're applying layout/title/height to object itself in constructor. This is the same as:
@
this->setLayout(mainLayout);
this->setWindowTitle(tr("Find"));
this->setFixedHeight(sizeHint().height());
@
You should read some C++ book of C++ FAQ about "this".@
FindDialog::FindDialog(QWidget *parent)//Why is parent never used?
@
Technically it is used in init list
@
: QDialog(parent)
@
There is not alway necessary to use parent pointer, as you can see in .h file it is 0 by default. Book that you're reading explains QObject parentship pretty well. -
Thank you,I understand.