//findDialog.h 头文件
1 //finddialog.h 2 #ifndef FINDDIALOG_H 3 #define FINDDIALOG_H 4 5 #include <QDialog> 6 7 class QCheckBox; 8 class QLabel; 9 class QLineEdit; 10 class QPushButton; 11 12 13 class FindDialog : public QDialog 14 { 15 Q_OBJECT 16 17 public: 18 FindDialog(QWidget *parent = 0); 19 signals: 20 void findNext(const QString &str,Qt::CaseSensitivity cs); 21 void findPrevious(const QString &str,Qt::CaseSensitivity cs); 22 private slots: 23 void findClicked(); 24 void enableFindButton(const QString &text); 25 private: 26 QLabel *label; 27 QLineEdit *lineEdit; 28 QCheckBox *caseCheckBox; 29 QCheckBox *backwardCheckBox; 30 QPushButton *findButton; 31 QPushButton *closeButton; 32 }; 33 34 #endif // FINDDIALOG_H
//findDialog.cpp 实现文件
1 //finddialog.cpp 2 #include <QtGui> 3 #include "finddialog.h" 4 5 FindDialog::FindDialog(QWidget *parent):QDialog(parent) 6 { 7 label = new QLabel(tr("Find &what")); //tr()函数是把他们翻译成其他语言的标记 8 lineEdit = new QLineEdit; 9 label->setBuddy(lineEdit); //设置了行编辑器作为标签的伙伴(buddy) 10 //所谓“buddy”是指一个窗口部件,它可以在按下标签的快捷键时接受焦点(focus) 11 caseCheckBox = new QCheckBox(tr("Match &case")); 12 backwardCheckBox = new QCheckBox(tr("Search &backward")); 13 14 findButton = new QPushButton(tr("&Find")); 15 findButton->setDefault(true); //setDefault()让Find按钮成为对话框的默认按钮(default button)。 16 //default button 就是指当用户按下Enter健时能够按下对应的按钮 17 findButton->setEnabled(false); //默认禁止,显示灰色 18 closeButton = new QPushButton(tr("Close")); 19 connect(lineEdit,SIGNAL(textChanged(const QString &)),this,SLOT(enableFindButton(const QString &))); 20 connect(findButton,SIGNAL(clicked()),this,SLOT(findClicked())); 21 connect(closeButton,SIGNAL(clicked()),this,SLOT(close())); 22 23 QHBoxLayout *topLeftLayout = new QHBoxLayout; 24 topLeftLayout->addWidget(label); 25 topLeftLayout->addWidget(lineEdit); 26 QVBoxLayout *leftLayout = new QVBoxLayout; 27 leftLayout->addLayout(topLeftLayout); 28 leftLayout->addWidget(caseCheckBox); 29 leftLayout->addWidget(backwardCheckBox); 30 QVBoxLayout *rightLayout = new QVBoxLayout; 31 rightLayout->addWidget(findButton); 32 rightLayout->addWidget(closeButton); 33 rightLayout->addStretch(); //添加分隔符(Stretch) 34 35 QHBoxLayout *mainLayout = new QHBoxLayout; 36 mainLayout->addLayout(leftLayout); 37 mainLayout->addLayout(rightLayout); 38 this->setLayout(mainLayout); 39 40 setWindowTitle(tr("Find")); 41 setFixedHeight(sizeHint().height()); //让窗口具有一个固定的高度,对话框 42 43 }; 44 45 void FindDialog::findClicked() 46 { 47 QString text = lineEdit->text(); //取编辑框中的文本保存在一个String中 48 Qt::CaseSensitivity cs = caseCheckBox->isChecked()?Qt::CaseSensitive:Qt::CaseInsensitive;//Qt::CaseSensitivity 是一个枚举类型 49 if(backwardCheckBox->isChecked()) 50 emit findPrevious(text,cs); 51 else 52 emit findNext(text,cs); 53 } 54 55 void FindDialog::enableFindButton(const QString &text) 56 { 57 findButton->setEnabled(!text.isEmpty()); 58 }
//main.cpp 测试函数
1 //main.cpp 2 #include <QApplication> 3 #include "finddialog.h" 4 5 int main(int argc,char *argv[]) 6 { 7 QApplication app(argc,argv); 8 FindDialog *dialog = new FindDialog; 9 dialog->show(); 10 11 return app.exec(); 12 }
//执行结果