finddialog.h /* 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 findext(const QString &str,Qt::CaseSensitivity cs); void findePrevious(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.cpp /* finddialog.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); 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 findePrevious(text,cs); }else{ emit findext(text,cs); } } void FindDialog::enableFindButton(const QString &text) { findButton->setEnabled(!text.isEmpty()); } main.cpp /* main.cpp */ #include <QApplication> #include <finddialog.h> int main(int argc, char **argv) { QApplication app(argc,argv); FindDialog *dialog=new FindDialog(); dialog->show(); return app.exec(); }