Qt メニュー バー、ツールバー、ステータス バー

Qt は、ユーザーがインターフェイスとやり取りする要素を、QAction クラスで表される「アクション」に抽象化します。メニューやツールバーに QAction を追加できます。期間中、リソース ファイルの使用、オブジェクト モデル、レイアウト マネージャーなど、いくつかの詳細も詳しく紹介しました。このセクションでは、メニュー バー、ツールバー、およびステータス バーについて詳しく紹介します。

ウィンドウはまだ QMainWindow クラスの上に構築されていると想定しているため、開発がはるかに簡単になります。もちろん、実際の開発プロセスでは、QMainWindow は通常「メイン ウィンドウ」としてのみ使用され、ダイアログ ウィンドウは QDialog クラスをより多く使用します。後で説明するように、QDialog クラスには、menuBar() や toolBar() など、QMainWindow クラスが提供するいくつかの便利な関数がありません。

openAction = new QAction(QIcon(":/images/open_Icon"), tr("&Open..."), this);
openAction->setShortcuts(QKeySequence::Open);
openAction->setStatusTip(tr("Open an existing file"));
connect(openAction, &QAction::triggered, this, &MainWindow::open);

QMenu *file = menuBar()->addMenu(tr("&File"));
file->addAction(openAction);

QToolBar *toolBar = addToolBar(tr("&File"));
toolBar->addAction(openAction);

Qt が menuBar() 関数を使用してメニュー バーを作成することがわかります。menuBar() は QMainWindow が提供する関数であるため、QWidget や QDialog にはありません。この関数は、ウィンドウのメニュー バーを返します。メニュー バーがない場合は、新しいメニュー バーを作成します。これは、menuBar() 関数の戻り値を直接使用できる理由も説明しています。結局のところ、メニュー バー オブジェクトを作成していないのです! 結局のところ、これが menuBar() によって作成され、返されたものです。

Qt では、メニューを表すクラスは QMenuBar です (この名前を思いついたはずです)。QMenuBar は、ウィンドウの上部にあるメニュー バーを表します。addMenu() 関数を使用してメニューを追加します。引数として文字列のみを指定しましたが、Qt はそれを新しく作成されたメニューのテキストとして表示しません。アンパサンドについては、これがメニューのショートカット キーを作成することを既に説明しました。メニュー オブジェクトを作成すると、 addAction() 関数の役割であるメニューに QAction を追加できます。

以下の QToolBar セクションは非常に似ています。名前が示すように、QToolBar はツールバーです。addToolBar() 関数を使用して新しいツールバーを追加します。以前の menuBar() が addToolBar() になっているのはなぜですか? ウィンドウにはメニュー バーが 1 つしかありませんが、複数のツールバーがある場合があります。コードを少し変更すると、次のようになります。

QToolBar *toolBar = addToolBar(tr("&File"));
toolBar->addAction(openAction);

QToolBar *toolBar2 = addToolBar(tr("Tool Bar 2"));
toolBar2->addAction(openAction);

2 つのツールバーが表示されます。

ツールバーは、固定、フローティングなどに設定できます。具体的な設定については、Qt のドキュメントを参照してください。

前に述べたように、QAction::setStatusTip() を使用して、ステータス バーにアクションのプロンプト テキストを設定します。しかし、ここでボタンの上にマウスを置くと、プロンプト テキストが表示されません。理由は簡単です。ステータス バーを追加していません。追加する方法は?以前の QMainWindow::menuBar() と同様に、QMainWindow には statusBar() 関数があります。この関数を追加しましょう:

statusBar();

一見何の変哲もない statusBar() を追加しましたが、以前の menuBar() の実装と同様に、この関数は QStatusBar オブジェクトを返します。そうでない場合は、最初に作成してから返します。

QStatusBar は QWidget を継承しているため、他の QWidget サブクラスをステータス バーに追加して、Photoshop ウィンドウの下部に似た比例表示とグリッド スイッチを備えた複雑なステータス バーを実現できます。QStatusBar の詳細については、Qt のドキュメントを参照してください。

これらの関数のない QDialog または QWidget はどうですか? QToolBar と QStatusBar はどちらも QWidget のサブクラスであるため、レイアウト マネージャーを使用して別の QWidget に追加できます。QLayout レイアウトは、メニュー バーを簡単に追加できる setMenuBar() 関数を提供します。詳細については、ドキュメントを参照してください。

この記事の利点は、 Qt開発学習教材パッケージ、テクニカル ビデオ (C++ 言語の基礎、Qt プログラミングの概要、QT シグナルとスロット メカニズム、QT インターフェイス開発イメージの描画、QT ネットワーク、QT データベース プログラミング、QT を含む) を無料で受け取ることです。プロジェクトコンバット、QSS、OpenCV、クイックモジュール、インタビュー質問など) ↓↓↓↓↓↓下記参照↓↓ 記事下部をクリックして料金を受け取る↓↓

おすすめ

転載: blog.csdn.net/m0_60259116/article/details/128791641