http://cid-620792b9d0909341.office.live.com/self.aspx/.Public/src/Qt%e6%96%87%e4%bb%b6%e6%9f%a5%e6%89%be%e5%af%b9%e8%af%9d%e6%a1%86%ef%bc%88%e4%b8%89%ef%bc%89.rar
//
// find_dialog.h
#ifndef Find_Dialog
#define Find_Dialog
#include <QDialog>
class QLabel;
class QLineEdit;
class QHBoxLayout;
class QVBoxLayout;
class QCheckBox;
class QPushButton;
class FindDialog : public QDialog
{
Q_OBJECT
public:
FindDialog();
signals:
void sinal_find_next(const QString &, Qt::CaseSensitivity); // 注意:信号不用定义,声明就好了。发送信号用 emit sinal_find_next(text, cs);
// tips: 不要写写 public signals: 或private signals:
void sinal_find_previous(const QString &, Qt::CaseSensitivity);
private slots:
void setEnabled_4_SearchBox(const QString &);
void SearchButton_Clicked();
void find_next(const QString &, Qt::CaseSensitivity);
void find_previous(const QString &, Qt::CaseSensitivity);
private:
QLabel *label;
QLineEdit *lineEdit;
QVBoxLayout *leftLayout;
QVBoxLayout *rightLayout;
QHBoxLayout *mainLayout;
QHBoxLayout *layout;
QCheckBox *checkBox_matchCase;
QCheckBox *checkBox_backWard;
QPushButton *pushButton_Search;
QPushButton *pushButton_Close;
};
#endif
//
//
// find_dialog.cpp
#include "find_dialog.h"
#include <QLabel>
#include <QLineEdit>
#include <QBoxLayout>
#include <QCheckBox>
#include <QPushButton>
FindDialog::FindDialog()
{
label = new QLabel("Find &what:");
lineEdit = new QLineEdit();
label->setBuddy(lineEdit);
checkBox_matchCase = new QCheckBox("&MatchCase");
checkBox_backWard = new QCheckBox("Find &Backward");
layout = new QHBoxLayout();
layout->addWidget(label);
layout->addWidget(lineEdit);
leftLayout = new QVBoxLayout();
leftLayout->addLayout(layout);
leftLayout->addWidget(checkBox_matchCase);
leftLayout->addWidget(checkBox_backWard);
pushButton_Search = new QPushButton("&Search");
pushButton_Close = new QPushButton("&Close");
pushButton_Search->setEnabled(false); // 禁用search 按钮
rightLayout = new QVBoxLayout();
rightLayout->addWidget(pushButton_Search);
rightLayout->addWidget(pushButton_Close);
rightLayout->addStretch();
mainLayout = new QHBoxLayout();
mainLayout->addLayout(leftLayout);
mainLayout->addLayout(rightLayout);
QObject::connect(pushButton_Close, SIGNAL(clicked()), this, SLOT(close())); // 关联QDialog::close()
QObject::connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(setEnabled_4_SearchBox(const QString &))); // 设置搜索按钮是否可用,在文本改变时
QObject::connect(pushButton_Search, SIGNAL(clicked()), this, SLOT(SearchButton_Clicked())); // 搜索事件
QObject::connect(this, SIGNAL(sinal_find_next(const QString &, Qt::CaseSensitivity)), SLOT(find_next(const QString &, Qt::CaseSensitivity)));
QObject::connect(this, SIGNAL(sinal_find_previous(const QString &, Qt::CaseSensitivity)), this, SLOT(find_previous(const QString &, Qt::CaseSensitivity)));
setLayout(mainLayout);
setFixedHeight(sizeHint().height()); // 固定高度,设置后用户不能调整高度
setWindowTitle("Find"); // 设置窗口标题
}
void FindDialog:: setEnabled_4_SearchBox(const QString &s)
{
this->pushButton_Search->setEnabled(!s.isEmpty()) ;
}
void FindDialog::SearchButton_Clicked() // 亮点
{
QString text_4_search = lineEdit->text();
Qt::CaseSensitivity cs =
checkBox_matchCase->isChecked()? Qt::CaseSensitive : Qt::CaseInsensitive;
if (checkBox_backWard->isChecked())
{
emit sinal_find_previous(text_4_search, cs); //
}
else
{
emit sinal_find_next(text_4_search, cs); // 发送搜索信号
}
}
void FindDialog::find_next(const QString &text, Qt::CaseSensitivity cs)
{
}
void FindDialog::find_previous(const QString &text, Qt::CaseSensitivity cs)
{
}
//
//
// main.cpp
#include <QApplication>
#include "find_dialog.h"
#pragma comment(lib, "QtCore4.lib")
#pragma comment(lib, "QtGui4.lib")
int main(int argc, char **argv)
{
QApplication *app = new QApplication(argc, argv);
FindDialog *d = new FindDialog();
d->show();
app->exec();
}
//