Qt45 写一个可复用的查找对话框界面

学习自唐佐林老师Qt


在这里插入图片描述

FindDialog.h

#ifndef _FINDDIALOG_H_
#define _FINDDIALOG_H_

#include <QDialog>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QRadioButton>
#include <QCheckBox>
#include <QGroupBox>

//查找对话框
class FindDialog : public QDialog
{
    Q_OBJECT

protected:
    QGroupBox m_radioGrpBx;//容器 用于放置两个单选按钮 QRadioButton

    //网格布局管理器,水平布局管理器
    QGridLayout m_layout;
    QHBoxLayout m_hbLayout;

    QLabel m_findLbl;//查找标签
    QLineEdit m_findEdit;//查找文本输入框
    QPushButton m_findBtn;//查找按钮 查找下一个
    QPushButton m_closeBtn;//关闭按钮
    QCheckBox m_matchChkBx; //复选框
    QRadioButton m_forwardBtn;//单选按钮 向前查找
    QRadioButton m_backwardBtn;//单选按钮 向后查找

public:
    explicit FindDialog(QWidget* parent = 0);
    bool event(QEvent* evt);//重写事件处理
    
signals:
    
public slots:
    
};

#endif // _FINDDIALOG_H_

FindDialog.cpp

#include "FindDialog.h"
#include <QEvent>

/*
  QDialog(parent, Qt::WindowCloseButtonHint | Qt::Drawer)
  窗口选项1:Qt::WindowCloseButtonHin 只显示一个关闭按钮
  窗口选项2:Qt::Drawe 当前对话框 不显示左上角图标
*/
FindDialog::FindDialog(QWidget *parent) : QDialog(parent, Qt::WindowCloseButtonHint | Qt::Drawer)
{
    m_findLbl.setText("Find What:");
    m_findBtn.setText("Find Next");
    m_closeBtn.setText("Close");
    m_matchChkBx.setText("Match Case");
    m_backwardBtn.setText("Backward");
    m_forwardBtn.setText("Forward");
    m_forwardBtn.setChecked(true);//默认被选取
    m_radioGrpBx.setTitle("Direction");//m_radioGrpBx容器 放置两个单选按钮 QRadioButton,设置标题

    //添加到水平布局管理器
    m_hbLayout.addWidget(&m_forwardBtn);
    m_hbLayout.addWidget(&m_backwardBtn);

    m_radioGrpBx.setLayout(&m_hbLayout);

    m_layout.setSpacing(10);
    m_layout.addWidget(&m_findLbl, 0, 0);
    m_layout.addWidget(&m_findEdit, 0, 1);
    m_layout.addWidget(&m_findBtn, 0, 2);
    m_layout.addWidget(&m_matchChkBx, 1, 0);
    m_layout.addWidget(&m_radioGrpBx, 1, 1);
    m_layout.addWidget(&m_closeBtn, 1, 2);

    //将布局设置到查找对话框中
    setLayout(&m_layout);
    setWindowTitle("Find");//设置窗口标题
}

//重写事件处理
bool FindDialog::event(QEvent* evt)
{
    //判断有没有收到 关闭 事件
    if( evt->type() == QEvent::Close )
    {
        hide();//隐藏当前对话框

        return true; //返回true 代表当前事件已经被处理了
    }

    return QDialog::event(evt);//其他事件 直接交给父类事件处理函数
}

//创建智能指针 Qt中的智能指针,指向查找对话框
QSharedPointer m_pFindDlg;

//初始化智能指针
m_pFindDlg(new FindDialog(this))

//打开查找对话框
m_pFindDlg->show();

在这里插入图片描述

Guess you like

Origin blog.csdn.net/LinuxArmbiggod/article/details/115719442