According to the code come from
C++ GUI Programming with Qt4, sec edition
As the example of Ch2
#ifndef FINDDIALOG_H
#define FINDDIALOG_H
#include <QDialog>
{
Q_OBJECT
public:
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:
};
#endif
#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
To copy to clipboard, switch view to plain text mode
#include <QtGui>
#include "finddialog.h"
FindDialog
::FindDialog(QWidget *parent
){
label
= new QLabel(tr
("Find &what:"));
label->setBuddy(lineEdit);
caseCheckBox
= new QCheckBox(tr
("Match &case"));
backwardCheckBox
= new QCheckBox(tr
("Search &backward"));
findButton->setDefault(true);
findButton->setEnabled(false);
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()));
topLeftLayout->addWidget(label);
topLeftLayout->addWidget(lineEdit);
leftLayout->addLayout(topLeftLayout);
leftLayout->addWidget(caseCheckBox);
leftLayout->addWidget(backwardCheckBox);
rightLayout->addWidget(findButton);
rightLayout->addWidget(closeButton);
rightLayout->addStretch();
mainLayout->addLayout(leftLayout);
mainLayout->addLayout(rightLayout);
setLayout(mainLayout);
setWindowTitle(tr("Find"));
setFixedHeight(sizeHint().height());
}
void FindDialog::findClicked()
{
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());
}
#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);
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());
}
To copy to clipboard, switch view to plain text mode
#include <QApplication>
#include "finddialog.h"
int main(int argc, char *argv[])
{
FindDialog *dialog = new FindDialog;
dialog->show();
return app.exec();
}
#include <QApplication>
#include "finddialog.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
FindDialog *dialog = new FindDialog;
dialog->show();
return app.exec();
}
To copy to clipboard, switch view to plain text mode
I do not see the code release any resource of the class
and I haven't see they use anything like smart pointer
the book said
Qt automatically deletes child objects when the parent is destroyed, and
the child widgets and layouts are all descendants of the FindDialog
did that mean if all of the dynamic memory are allocated within class
Qt would release the resource for us?
Could I just use smart pointer like
std::unique_ptr
std::unique_ptr
To copy to clipboard, switch view to plain text mode
for it?
for this example, the
QHBoxLayout
To copy to clipboard, switch view to plain text mode
and
QVBoxLayout
To copy to clipboard, switch view to plain text mode
should be declared as private members if I want to use
std::unique_ptr
std::unique_ptr
To copy to clipboard, switch view to plain text mode
I am very worry about the coding style like that
it do not "seems like" they release the memory they claim for
I don't want to fall into the trap of memory allocation in the future
Thanks a lot
ps : the class would release the resource because we declare the
Q_OBJECT
Q_OBJECT
To copy to clipboard, switch view to plain text mode
?
whatever, this makes me feel unsafe
Bookmarks