C++ Exercises(三)

//  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();
}

你可能感兴趣的:(C++)