【実用乾物】Qt Widgetsでプログラミングを始めるには?(四)

Qt は現在、最も先進的で完全なクロスプラットフォーム C++ 開発ツールです。ワンタイムの書き込みを完全に実現するだけでなく、すべてのプラットフォーム上で無差別に実行でき、開発プロセスに必要なほぼすべてのツールを提供します。現在、Qt は 70 以上の業界、数千の企業で使用されており、数百万のデバイスとアプリケーションをサポートしています。

この記事では、C++ と Qt Widgets モジュールを使用してシンプルなメモ帳アプリケーションを実装することで Qt の基本を学びます。Qt Widgets モジュールは、テキスト ファイルを作成し、保存、印刷、または再度開いて編集できる小さなテキスト エディタです。また、ここで設定することもできます使用するフォント。

上記では、ユーザー インターフェイスを設計する際に Qt Designer (デザイナー)、メモ帳のヘッダー ファイル、メモ帳のソース ファイルなどを使用する方法を紹介しましたが、この記事では引き続きユーザー インタラクションを追加する方法を紹介します。引き続きご注目ください。

【実用乾物】Qt Widgetsでプログラミングを始めるには? (1つ)

クリックして Qt ウィジェット コンポーネントをダウンロードしてください(Q technology Exchange: 166830288)

ユーザーインタラクションを追加する

エディターに機能を追加するには、まずメニュー項目とボタンをツールバーに追加します。

[ここに入力] をクリックし、[新規]、[開く]、[保存]、[名前を付けて保存]、[印刷]、[終了] を追加すると、以下のアクション エディターに 5 行のコードが作成されます。アクションをスロットに接続するには、アクションを右クリックして [スロットに移動] > [triggered()] を選択し、指定されたスロットのコードを完成させます。

ツールバーにアクションも追加したい場合は、各 QAction にアイコンを割り当て、QAction をツールバーにドラッグします。関連するアクションのアイコン プロパティにアイコン名を入力してアイコンを割り当てます。QAction がツールバーにドラッグされているときに、アイコンをクリックすると、関連するスロットが開始されます。

newDocument() メソッドを完了します。

void Notepad::newDocument()
{
currentFile.clear();
ui->textEdit->setText(QString());
}

currentFile 変数は、現在編集中のファイルを含むグローバル変数です。clear() はテキスト バッファをクリアします。currentFile 変数は、notepad.h の private セクションで定義されます。

private:
Ui::Notepad *ui;
QString currentFile;
ファイルを開く

notepad.ui で、actionOpen を右クリックし、Go to Slot を選択します。

open() メソッドを完了します。

void Notepad::open()
{
QString fileName = QFileDialog::getOpenFileName(this, "Open the file");
if (fileName.isEmpty())
return;
QFile file(fileName);
currentFile = fileName;
if (!file.open(QIODevice::ReadOnly | QFile::Text)) {
QMessageBox::warning(this, "Warning", "Cannot open file: " + file.errorString());
return;
}
setWindowTitle(fileName);
QTextStream in(&file);
QString text = in.readAll();
ui->textEdit->setText(text);
file.close();
}

QFileDialog::getOpenFileName は、ファイルを選択できるダイアログを開きます。QFile オブジェクト myfile は、選択された file_name をパラメータとして持ち、選択されたファイルを後で使用できるようにグローバル変数 currentFile に保存します。ファイルを file で開きます。このファイルは読み取り専用のテキスト ファイルとして開きます。開けない場合は、警告を発してプログラムを停止します。

QTextStream ストリームがパラメーター myfile に対して定義され、ファイル myfile の内容が QString テキストにコピーされ、setText(text) によってエディターのバッファーにテキストが埋められます。

文書を保存する

ファイルを開くときと同じ方法でファイルを保存するメソッドを作成し、アクション「保存」を右クリックして「スロットに移動」を選択します。

void Notepad::save()
{
QString fileName;
// If we don't have a filename from before, get one.
if (currentFile.isEmpty()) {
fileName = QFileDialog::getSaveFileName(this, "Save");
if (fileName.isEmpty())
return;
currentFile = fileName;
} else {
fileName = currentFile;
}
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QFile::Text)) {
QMessageBox::warning(this, "Warning", "Cannot save file: " + file.errorString());
return;
}
setWindowTitle(fileName);
QTextStream out(&file);
QString text = ui->textEdit->toPlainText();
out << text;
file.close();
}

QFile オブジェクト myfile は、処理中のファイルを含むグローバル変数 current_file にリンクされています。myfile を開けない場合は、エラー メッセージが発行され、メソッドは停止します。QTextStream 出力を作成し、エディター バッファーの内容がプレーン テキストに変換されて、出力に書き込まれます。

ファイルを別の名前で保存する
void Notepad::saveAs()
{
QString fileName = QFileDialog::getSaveFileName(this, "Save as");
if (fileName.isEmpty())
return;
QFile file(fileName);

if (!file.open(QFile::WriteOnly | QFile::Text)) {
QMessageBox::warning(this, "Warning", "Cannot save file: " + file.errorString());
return;
}
currentFile = fileName;
setWindowTitle(fileName);
QTextStream out(&file);
QString text = ui->textEdit->toPlainText();
out << text;
file.close();
}

これはファイルを保存するのと同じプロセスですが、ここでの唯一の違いは、作成するファイルの新しいファイル名を入力する必要があることです。

おすすめ

転載: blog.csdn.net/AABBbaby/article/details/132619007