C++是面向对象的语言,即封装类——将对象的数据、行为等等封装在一起。 C++和Qt都提供了基类,但在使用过程中往往是不够的,因此,面向对象的编程思想是:运用现有的类封装自己的类,以便使用,也是C语言中的模块化思想。
查找对话框
因为Qt中没有finddialog类,所有需要利用基类来进行封装,之后再再应用程序中使用这个类。
以上就是finddialog类的封装过程,包括了私有数据、信号和槽,即行为方式。
finddialog.cpp中对这些行为进行实现:
#include <QtGui> #include <Qt> #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("Math &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::CaseSensitivity : Qt::CaseInsensitive; if(backwardCheckBox->isChecked()) { emit findPrevious(text,cs); } else { emit findNext(text,cs); } } void FindDialog::enableFindButton(const QString &text) { findButton->setEnabled(!text.isEmpty()); } FindDialog::~FindDialog() { }