トップ > Qt Creatorを使う > TextFinderクラスの実装

TextFinderクラスの実装

QtCreatorで自動生成されたtextfinder.hは既に必要なヘッダーファイルのインクルードやコンストラクタ、デストラクタが宣言されてます。
ここではテキストファイルを読み込んで、QTextEditでその内容を表示するためのメンバ関数を宣言します。



privateセクションに宣言されているUi::TextFinderポインターの下にloadTextFile関数を宣言します。

cpp
private slots:
    void on_findButton_clicked();

private:
    Ui::TextFinder *ui;
    void loadTextFile();

これでヘッダーファイルは完成です。
次はtextfinder.cppの実装を行っていきます。

loadTextFileの実装

まずはヘッダーファイルに宣言したloadTextFile関数の実装を行います。

cpp
void TextFinder::loadTextFile()
{
    QFile inputFile(":/input.txt");
    inputFile.open(QIODevice::ReadOnly);
    
    QTextStream in(&inputFile);
    QString line = in.readAll();
    inputFile.close();
    
    ui->textEdit->setPlainText(line);
    QTextCursor cursor = ui->textEdit->textCursor();
    cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor, 1);
}

QFileで開いたテキストファイルをQTextStreamで読み込みます。
テキストファイルは、後述するリソースファイルとして読み込むため、パスは:/input.txtに設定します。
読み込んだテキストはQTextEditのsetPlainText()で表示します。

QFileとQTextStreamを使うためにtextfinder.cppは次のようにそれぞれのヘッダーファイルをインクルードしておきます。

cpp
#include <QFile>
#include <QTextStream>
#include "textfinder.h"
#include "ui_textfinder.h"

実装したloadTextFileはコンストラクタで呼び出します。

cpp
TextFinder::TextFinder(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::TextFinder)
{
    ui->setupUi(this);
    loadTextFile();
}

on_findButton_clickedスロットの実装

Findボタンが押された際のスロットの実装です。
フォームデザイナーでの作業で、枠は追加されているため、中身を実装します。

cpp
void TextFinder::on_findButton_clicked()
{
    QString searchString = ui->lineEdit->text();
    ui->textEdit->find(searchString, QTextDocument::FindWholeWords);
}

lineEditからキーワードを取得し、QTextEditのfind関数でキーワードを検索します。

QtCreatorで自動生成されたtextfinder.cppでui_textfinder.hという存在しないファイルをインクルードしていますが、これはコンパイル時にユーザーインターフェイスコンパイラ(uic)によって生成されるものです。
on_findButton_clickedスロットはui_textfinder.hで次のようにシグナルと接続されます。

cpp
QMetaObject::connectSlotsByName(TextFinder);

次はリソースファイルを作成します。



前へ 次へ