QT学习笔记3

对话框

   新建了一个对话框,在新建项目选择类型时是Dialog即可。

   添加的代码如下,注意QCheckBox 并没有添加头文件定义,只是加了类的前向声明。因为我们仅仅使用的是指针,并不涉及到这些类的函数,因此并不需要include它们的头文件——当然,你想直接引入头文件也可以,不过那样的话编译速度就会慢一些。不过实验发现 还是需要添加头文件

 1 #ifndef FINDDIALOG_H
 2 #define FINDDIALOG_H
 3 
 4 #include <QtGui/QDialog>
 5 #include "ui_finddialog.h"
 6 
 7 class QCheckBox; 
 8 class QLabel; 
 9 class QLineEdit; 
10 class QPushButton; 
11 
12 class FindDialog : public QDialog
13 {
14     Q_OBJECT
15 
16 public:
17     FindDialog(QWidget *parent = 0, Qt::WFlags flags = 0);
18     ~FindDialog();
19 signals:
20     void findNext(const QString &str,Qt::CaseSensitive cs);
21     void findPrevious(const QString &str,Qt::CaseSensitive cs);
22 private slots:
23     void findClicked();
24     void enableFindButton(const QString &text);
25 private:
26     Ui::FindDialogClass ui;
27     QLabel *label;
28     QLineEdit *lineEdit;
29     QCheckBox *caseCheckBox;
30     QCheckBox *backwardCheckBox;
31     QPushButton *findButton;
32     QPushButton *closeButton;
33 };
34 
35 #endif // FINDDIALOG_H

cpp文件代码:

1 字符串用tr()函数进行转换。

2 信号和槽函数可以自己定义。

   QObject::connect(lineEdit,SIGNAL(textChanged(const QString&)),this,SLOT(enableFindButton(const QString& )));

这句话中,槽函数就是自己定义的,而且还可以获取信号中的参数,也就是进行参数传递
当然也可以自己定义信号:
signals:
  void findNext(const QString &str,Qt::CaseSensitive cs);自己定义信号,同时可以设置传入的参数
 通过emit findNext (text,cs);进行发射信号
 1 FindDialog::FindDialog(QWidget *parent, Qt::WFlags flags)
 2     : QDialog(parent, flags)
 3 {
 4     ui.setupUi(this);
 5     label=new QLabel(tr("Find &what:"));
 6     lineEdit=new QLineEdit;
 7     label->setBuddy(lineEdit);
 8 
 9     caseCheckBox=new QCheckBox(tr("Match &chase"));
10     backwardCheckBox=new QCheckBox(tr("Search &backford"));
11 
12     findButton=new QPushButton(tr("&Find"));
13     findButton->setDefault(true);
14     findButton->setEnabled(false);
15     closeButton=new QPushButton(tr("Close"));
16 
17     QObject::connect(lineEdit,SIGNAL(textChanged(const QString&)),this,SLOT(enableFindButton(const QString& )));
18     connect(findButton,SIGNAL(clicked()),this,SLOT(findClicked()));
19     connect(closeButton,SIGNAL(clicked()),this,SLOT(close()));
20 
21     QHBoxLayout *topLeftLayout=new QHBoxLayout;
22     topLeftLayout->addWidget(label);
23     topLeftLayout->addWidget(lineEdit);
24 
25     QVBoxLayout *leftLayout=new QVBoxLayout;
26     leftLayout->addLayout(topLeftLayout);
27     leftLayout->addWidget(caseCheckBox);
28     leftLayout->addWidget(backwardCheckBox);
29 
30     QVBoxLayout *rightLayout=new QVBoxLayout;
31     rightLayout->addWidget(findButton);
32     rightLayout->addWidget(closeButton);
33     rightLayout->addStretch();
34     
35     QHBoxLayout *mainLayout=new QHBoxLayout;
36     mainLayout->addLayout(leftLayout);
37     mainLayout->addLayout(rightLayout);
38 
39     this->setLayout(mainLayout);
40     this->setWindowTitle(tr(("Find")));
41     setFixedHeight(sizeHint().height());
42     
43 }
44 
45 FindDialog::~FindDialog()
46 {
47 
48 }
49 
50 
51 void FindDialog::findClicked()
52 {
53    QString text=lineEdit->text();
54    Qt::CaseSensitivity cs=caseCheckBox->isChecked()?Qt::CaseInsensitive:Qt::CaseSensitive;
55    if (backwardCheckBox->isChecked())
56    {
57        emit findPrevious(text,cs);
58    }else emit findNext(text,cs);
59 }
60 
61 void FindDialog::enableFindButton(const QString &text)
62 {
63    findButton->setEnabled(!text.isEmpty());
64 }

运行结果

QT学习笔记3_第1张图片

你可能感兴趣的:(QT学习笔记3)