QT手工代码完成查找对话框(Find Dialog)

今天又学了第二章,手工完成了一个查找对话框(Find Dialog)。下面贴出代码与大家共享哈。

代码如下:

1.finddialog.h

#ifndef FINDDIALOG_

#define FINDDIALOG_

#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 findPrevious(const QString &str, Qt::CaseSensitivity cs);//向前查找信号

private slots:
void findClicked(); //find 按钮点击后使用这个槽处理clicked()信号
void enableFindButton(const QString &text); //当行编辑器中有文字后用该槽使 find 按钮可以按下

private: //声明 find dialog 所需的各个组件
QLabel label;
QLineEdit
lineEdit;
QCheckBox backwardCheckBox;
QCheckBox
caseCheckBox;
QPushButton findButton;
QPushButton
closeButton;
};

#endif

 

2.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); //使得find 按钮成为默认按钮
findButton->setEnabled(false); //使得 find 按钮不能按下

closeButton = new QPushButton(tr(“&Quit”));

//用信号与槽连接find按钮和行编辑器。当行编辑器有文字后,使得按钮能够按下
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);

QHBoxLayout *Layout = new QHBoxLayout;
Layout->addLayout(leftLayout);
Layout->addLayout(rightLayout);

setLayout(Layout);//设置窗口布局
setWindowTitle(“Find Dialog”);//设置窗口标题
setFixedHeight(sizeHint().height());//设置窗口理想大小
}

void FindDialog::findClicked() //槽函数实现
{
QString text = lineEdit->text();
Qt::CaseSensitivity cs = caseCheckBox->isChecked() ? Qt::CaseSensitive : Qt::CaseInsensitive;
if(backwardCheckBox->isChecked())
emit findPrevious(text, cs); //根据case多选框是否勾选来选择发送findPrevious信号还是findNext信号
else
emit findNext(text, cs);
}

void FindDialog::enableFindButton(const QString &text)
{
findButton->setEnabled(!text.isEmpty()); //如果行编辑器有文字,则使能find按钮
}

 

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

 

这三个函数就完成了查找窗口的实现。比较简单的。嘿嘿