Qt文件查找对话框(三)

 

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

//

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值