//
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 findNext( const QString & str,Qt::CaseSensitivity cs);
void findPrev( const QString & str,Qt::CaseSensitivity cs);
private slots: // 声明槽
void findClicked();
void enableFindButton( const QString & str);
private :
QLabel * lable;
QLineEdit * lineEdit;
QCheckBox * caseCheckBox;
QCheckBox * backwardCheckBox;
QPushButton * findBtn;
QPushButton * closeBtn;
};
#endif
// finddialog.cpp
#include < QtGui >
#include " finddialog.h "
FindDialog::FindDialog(QWidget * parent) : QDialog(parent)
{
this -> lable = new QLabel(tr( " Find &what: " ), this );
this -> lineEdit = new QLineEdit( this );
lable -> setBuddy(lineEdit);
caseCheckBox = new QCheckBox(tr( " Match &case " ), this );
backwardCheckBox = new QCheckBox(tr( " Search &backward " ), this );
findBtn = new QPushButton(tr( " &Find " ), this );
findBtn -> setDefault( true );
findBtn -> setEnabled( false );
closeBtn = new QPushButton(tr( " Close " ), this );
QObject::connect(lineEdit,SIGNAL(textChanged( const QString & )), this ,SLOT(enableFindButton( const QString & )));
QObject::connect(findBtn,SIGNAL(clicked()), this ,SLOT(findClicked()));
QObject::connect(closeBtn,SIGNAL(clicked()), this ,SLOT(close()));
QHBoxLayout * topLeftLayout = new QHBoxLayout;
topLeftLayout -> addWidget(lable);
topLeftLayout -> addWidget(lineEdit);
QVBoxLayout * leftLayout = new QVBoxLayout;
leftLayout -> addLayout(topLeftLayout);
leftLayout -> addWidget(caseCheckBox);
leftLayout -> addWidget(backwardCheckBox);
QVBoxLayout * rightLayout = new QVBoxLayout;
rightLayout -> addWidget(findBtn);
rightLayout -> addWidget(closeBtn);
rightLayout -> addStretch( 1 );
QHBoxLayout * mainLayout = new QHBoxLayout( this );
mainLayout -> setMargin( 11 );
mainLayout -> setSpacing( 5 );
mainLayout -> addLayout(leftLayout);
mainLayout -> addLayout(rightLayout);
this -> setWindowTitle(tr( " Find " ));
this -> setFixedHeight(sizeHint().height());
}
void FindDialog::findClicked()
{
QString text = lineEdit -> text();
Qt::CaseSensitivity cs = caseCheckBox -> isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive;
if (backwardCheckBox -> isChecked())
emit findPrev(text,cs); // 发射"向前搜索信号"
else
emit findNext(text,cs); // 发射"向后搜索信号"
}
void FindDialog::enableFindButton( const QString & str)
{
findBtn -> setEnabled( ! str.isEmpty());
}
// 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();
}
#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 findPrev( const QString & str,Qt::CaseSensitivity cs);
private slots: // 声明槽
void findClicked();
void enableFindButton( const QString & str);
private :
QLabel * lable;
QLineEdit * lineEdit;
QCheckBox * caseCheckBox;
QCheckBox * backwardCheckBox;
QPushButton * findBtn;
QPushButton * closeBtn;
};
#endif
// finddialog.cpp
#include < QtGui >
#include " finddialog.h "
FindDialog::FindDialog(QWidget * parent) : QDialog(parent)
{
this -> lable = new QLabel(tr( " Find &what: " ), this );
this -> lineEdit = new QLineEdit( this );
lable -> setBuddy(lineEdit);
caseCheckBox = new QCheckBox(tr( " Match &case " ), this );
backwardCheckBox = new QCheckBox(tr( " Search &backward " ), this );
findBtn = new QPushButton(tr( " &Find " ), this );
findBtn -> setDefault( true );
findBtn -> setEnabled( false );
closeBtn = new QPushButton(tr( " Close " ), this );
QObject::connect(lineEdit,SIGNAL(textChanged( const QString & )), this ,SLOT(enableFindButton( const QString & )));
QObject::connect(findBtn,SIGNAL(clicked()), this ,SLOT(findClicked()));
QObject::connect(closeBtn,SIGNAL(clicked()), this ,SLOT(close()));
QHBoxLayout * topLeftLayout = new QHBoxLayout;
topLeftLayout -> addWidget(lable);
topLeftLayout -> addWidget(lineEdit);
QVBoxLayout * leftLayout = new QVBoxLayout;
leftLayout -> addLayout(topLeftLayout);
leftLayout -> addWidget(caseCheckBox);
leftLayout -> addWidget(backwardCheckBox);
QVBoxLayout * rightLayout = new QVBoxLayout;
rightLayout -> addWidget(findBtn);
rightLayout -> addWidget(closeBtn);
rightLayout -> addStretch( 1 );
QHBoxLayout * mainLayout = new QHBoxLayout( this );
mainLayout -> setMargin( 11 );
mainLayout -> setSpacing( 5 );
mainLayout -> addLayout(leftLayout);
mainLayout -> addLayout(rightLayout);
this -> setWindowTitle(tr( " Find " ));
this -> setFixedHeight(sizeHint().height());
}
void FindDialog::findClicked()
{
QString text = lineEdit -> text();
Qt::CaseSensitivity cs = caseCheckBox -> isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive;
if (backwardCheckBox -> isChecked())
emit findPrev(text,cs); // 发射"向前搜索信号"
else
emit findNext(text,cs); // 发射"向后搜索信号"
}
void FindDialog::enableFindButton( const QString & str)
{
findBtn -> setEnabled( ! str.isEmpty());
}
// 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();
}