出自《C++ GUI Qt 4 编程》第10-14页
- #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
- #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());
- }
- #include <QApplication>
- #include "finddialog.h"
- int main(int argc, char *argv[])
- {
- QApplication app(argc, argv);
- FindDialog *dialog = new FindDialog;
- dialog->show();
- return app.exec();
- }
来源: https://www.oschina.net/code/snippet_2661353_58807