Qtでの検索ダイアログ実装

検索ダイアログの概要

検索ダイアログは多くのアプリケーションで使用される共通コンポーネントです。本実装では、様々なプロジェクトで再利用可能な検索ダイアログの開発を目指します。

機能要件

  • 再利用可能なソフトウェア部品として設計
  • テキストボックス内の指定文字列検索
  • 検索方向の指定機能
  • 大文字小文字の区別オプション
  • 閉じるボタンクリック時の非表示動作

クラス設計とレイアウト

検索ダイアログヘッダファイル

#ifndef SEARCHDIALOG_H
#define SEARCHDIALOG_H

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

class SearchDialog : public QDialog
{
    Q_OBJECT

private:
    QGridLayout mainLayout;
    QGroupBox directionGroup;
    QHBoxLayout directionLayout;
    
    QLabel searchLabel;
    QLineEdit searchField;
    QPushButton searchButton;
    QCheckBox caseSensitiveCheck;
    QRadioButton forwardOption;
    QRadioButton backwardOption;
    QPushButton closeButton;

public:
    explicit SearchDialog(QWidget* parent = nullptr);
    bool event(QEvent* e);

};

#endif // SEARCHDIALOG_H

検索ダイアログ実装ファイル

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

SearchDialog::SearchDialog(QWidget* parent) 
    : QDialog(parent, Qt::WindowCloseButtonHint | Qt::Drawer)
{
    setWindowTitle("検索");
    searchLabel.setText("検索文字列:");
    searchButton.setEnabled(false);
    searchButton.setText("次を検索");
    caseSensitiveCheck.setText("大文字小文字を区別");
    forwardOption.setText("前方検索");
    backwardOption.setChecked(true);
    backwardOption.setText("後方検索");
    closeButton.setText("閉じる");
    directionGroup.setTitle("検索方向");

    directionLayout.addWidget(&forwardOption);
    directionLayout.addWidget(&backwardOption);
    directionGroup.setLayout(&directionLayout);

    mainLayout.setSpacing(10);
    mainLayout.addWidget(&searchLabel, 0, 0);
    mainLayout.addWidget(&searchField, 0, 1);
    mainLayout.addWidget(&searchButton, 0, 2);
    mainLayout.addWidget(&caseSensitiveCheck, 1, 0);
    mainLayout.addWidget(&directionGroup, 1, 1);
    mainLayout.addWidget(&closeButton, 1, 2);

    setLayout(&mainLayout);
}

bool SearchDialog::event(QEvent* e)
{
    if(e->type() == QEvent::Close) {
        hide();
        return true;
    }
    return QDialog::event(e);
}

テキストエディタの関連修正

ヘッダファイル、UIファイル、スロット実装ファイルにおいて、検索ダイアログの統合に関する修正が必要となります。

実装の特徴

  • QDialogを継承した再利用可能な検索ダイアログ
  • レイアウトマネージャのネストによるインターフェース構築
  • GUIプログラミングの典型的な実装例

タグ: Qt 検索ダイアログ QDialog レイアウトマネージャ GUI開発

8月5日 14:00 投稿