TextFinderクラスの実装
QtCreatorで自動生成されたtextfinder.hは既に必要なヘッダーファイルのインクルードやコンストラクタ、デストラクタが宣言されてます。
ここではテキストファイルを読み込んで、QTextEditでその内容を表示するためのメンバ関数を宣言します。
privateセクションに宣言されているUi::TextFinderポインターの下にloadTextFile関数を宣言します。
private slots:
void on_findButton_clicked();
private:
Ui::TextFinder *ui;
void loadTextFile();
これでヘッダーファイルは完成です。
次はtextfinder.cppの実装を行っていきます。
loadTextFileの実装
まずはヘッダーファイルに宣言したloadTextFile関数の実装を行います。
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は次のようにそれぞれのヘッダーファイルをインクルードしておきます。
#include <QFile>
#include <QTextStream>
#include "textfinder.h"
#include "ui_textfinder.h"
実装したloadTextFileはコンストラクタで呼び出します。
TextFinder::TextFinder(QWidget *parent) :
QWidget(parent),
ui(new Ui::TextFinder)
{
ui->setupUi(this);
loadTextFile();
}
on_findButton_clickedスロットの実装
Findボタンが押された際のスロットの実装です。
フォームデザイナーでの作業で、枠は追加されているため、中身を実装します。
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で次のようにシグナルと接続されます。
QMetaObject::connectSlotsByName(TextFinder);
次はリソースファイルを作成します。