QT学习笔记3

时间:2024-01-16 13:42:20

对话框

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

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

 #ifndef FINDDIALOG_H
#define FINDDIALOG_H #include <QtGui/QDialog>
#include "ui_finddialog.h" class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton; class FindDialog : public QDialog
{
Q_OBJECT public:
FindDialog(QWidget *parent = , Qt::WFlags flags = );
~FindDialog();
signals:
void findNext(const QString &str,Qt::CaseSensitive cs);
void findPrevious(const QString &str,Qt::CaseSensitive cs);
private slots:
void findClicked();
void enableFindButton(const QString &text);
private:
Ui::FindDialogClass ui;
QLabel *label;
QLineEdit *lineEdit;
QCheckBox *caseCheckBox;
QCheckBox *backwardCheckBox;
QPushButton *findButton;
QPushButton *closeButton;
}; #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);进行发射信号
 FindDialog::FindDialog(QWidget *parent, Qt::WFlags flags)
: QDialog(parent, flags)
{
ui.setupUi(this);
label=new QLabel(tr("Find &what:"));
lineEdit=new QLineEdit;
label->setBuddy(lineEdit); caseCheckBox=new QCheckBox(tr("Match &chase"));
backwardCheckBox=new QCheckBox(tr("Search &backford")); findButton=new QPushButton(tr("&Find"));
findButton->setDefault(true);
findButton->setEnabled(false);
closeButton=new QPushButton(tr("Close")); QObject::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); this->setLayout(mainLayout);
this->setWindowTitle(tr(("Find")));
setFixedHeight(sizeHint().height()); } FindDialog::~FindDialog()
{ } void FindDialog::findClicked()
{
QString text=lineEdit->text();
Qt::CaseSensitivity cs=caseCheckBox->isChecked()?Qt::CaseInsensitive:Qt::CaseSensitive;
if (backwardCheckBox->isChecked())
{
emit findPrevious(text,cs);
}else emit findNext(text,cs);
} void FindDialog::enableFindButton(const QString &text)
{
findButton->setEnabled(!text.isEmpty());
}

运行结果

QT学习笔记3