新建find_dialog.ui
创建控件
一个:Label, Line Edit
两个:Check Box
两个:Push Button
设置属性
label 的objectName 设为"label",text 属性设为"&Find What:"
line editor 的objectName 设为"lineEdit"
第一个Check Box 的objectName 设为"checkBox_matchCase",,text 属性设为"&Match Case"
另一个Check Box 的objectName 设为"checkBox_matchCase",,text 属性设为"&Match Case"
第一个Push Button 的objectName 设为"button_find",text 属性设为"&Find"
另一个Push Button 的objectName 设为"button_close",text 属性设为"&Close"
窗体的objectName 设为"FindDialog",,windowTitle 属性设为"Find"
设置label 的buddy
布局控件
QHBoxLayout layout 包含label,Line Edit
QHBoxLayout mainLayout 包含leftLayout,rightLayout
QVBoxLayout leftLayout 包含layout,两个Check Box
QVBoxLayout rightLayout 包含两个Push Button
选中窗体 ->设成横向布局 ->Adjust Size
保存
从find_dialog.ui 生成ui_find_dialog.h 加入工程
加入main.cpp
//
// main.cpp
#include <QApplication>
#include <QDialog>
#include "ui_find_dialog.h"
#pragma comment(lib, "QtCore4.lib")
#pragma comment(lib, "QtGui4.lib")
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Ui::FindDialog ui;
QDialog *dialog = new QDialog;
ui.setupUi(dialog);
ui.rightLayout->addStretch(); // 亮点 实现对齐
dialog->setFixedHeight(dialog->sizeHint().height()); // 亮点 设置适合的高度 不让用户调整,一调界面就会乱掉
dialog->show();
return app.exec();
}
//
运行
加入find_dialog.h
//
// find_dialog.h
#ifndef FIND_DIALOG_H
#define FIND_DIALOG_H
#include "ui_find_dialog.h"
#include <QDialog>
// 亮点 多继承
class FindDialog : public QDialog, public Ui::FindDialog // ? 继承顺序反过来就出错
{
Q_OBJECT
public:
FindDialog();
signals:
void signal_find_next(const QString &, Qt::CaseSensitivity);
void signal_find_previous(const QString &, Qt::CaseSensitivity);
private slots:
void setEnable_4_findButton(const QString &);
void findButton_clicked();
void find_next(const QString &, Qt::CaseSensitivity);
void find_previous(const QString &, Qt::CaseSensitivity);
};
#endif
//
从find_dialog.h 生成moc_find_dialog.cpp,加入工程
加入find_dialog.cpp
//
// find_dialog.cpp
#include "find_dialog.h"
FindDialog::FindDialog()
{
setupUi(this);
rightLayout->addStretch(); // 亮点 实现对齐
setFixedHeight(sizeHint().height()); // 亮点 设置适合的高度 不让用户调整,一调界面就会乱掉
connect(button_close, SIGNAL(clicked()), this, SLOT(close())); // 注意:quit() 函数是QApplication 的
connect(lineEdit, SIGNAL(textChanged(const QString &)), SLOT(setEnable_4_findButton(const QString &)));
connect(button_find, SIGNAL(clicked()), this, SLOT(findButton_clicked()));
connect(this, SIGNAL(signal_find_next(const QString &, Qt::CaseSensitivity)), this, SLOT(find_next(const QString &, Qt::CaseSensitivity)));
connect(this, SIGNAL(signal_find_previous(const QString &, Qt::CaseSensitivity)), this, SLOT(find_previous(const QString &, Qt::CaseSensitivity)));
}
void FindDialog::setEnable_4_findButton(const QString &text)
{
button_find->setEnabled(!text.isEmpty());
}
void FindDialog::findButton_clicked()
{
QString text_4_search = lineEdit->text();
Qt::CaseSensitivity cs =
checkBox_matchCase->isChecked()? Qt::CaseSensitive : Qt::CaseInsensitive;
if (checkBox_Backward->isChecked())
{
// 向后搜索
emit signal_find_previous(text_4_search, cs);
}
else
{
// 向前搜索
emit signal_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 改写成
//
// main.cpp
#include <QApplication>
#include <QDialog>
#include "find_dialog.h"
#pragma comment(lib, "QtCore4.lib")
#pragma comment(lib, "QtGui4.lib")
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
FindDialog *dialog = new FindDialog();
dialog->show();
return app.exec();
}
//