MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Qtの基礎 - ウインドウのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Qtの基礎 - ウインドウ
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == Qtにおいて、ウィンドウのメニューバー、ツールバー、ステータスバーの作成手順を記載する。<br> <br><br> == メニュー == サブメニュー名の<code>&</code>の直後の文字列がニーモニックとして使用される。<br> 下図の"File"は<code>QMenu</code>クラス、"Open"は<code>QAction</code>クラスである。<br> [[ファイル:Qt Basic Window 1.jpg|フレームなし|中央]] <br> "Open"の右側にあるアイコンを選択するとサブメニューを入力できる。<br> サブメニューを入力すると、その親メニュー(上図では、"Open")は<code>QMenu</code>クラスに変更される。<br> <br> 追加したアクションは、Qt Designer画面下にある[アクションエディタ]ペインに表示される。<br> [[ファイル:Qt Basic Window 2.jpg|フレームなし|中央]] <br><br> == ツールバー == ここでは、ツールバーのアイコン(24x24のpng形式が標準)を作成したとする。<br> <br> ==== リソースファイルの作成 ==== [ファイル] - [ファイル/プロジェクトの新規作成] - 画面左の[ファイルとクラス] - [Qt] - [Qt リソースファイル]を選択する。<br> Qtのリソースディレクトリ名をResource、ディレクトリパスはプロジェクト直下とする。<br> <br> ==== リソースエディタを開く ==== Qtのメイン画面左にあるプロジェクトツリーの[Resources]直下に、リソースファイル(.qrc)が表示されるので、<br> リソースファイルを右クリックして、[エディタで開く]を選択する。<br> <br> <u>※注意</u><br> <u>リソースファイルの新規作成時は、自動的にリソースエディタが開く。</u><br> <br> ==== 新規登録 ==== 以下に、リソースファイルが空の場合の登録手順を示す。<br> # まず、リソースエディタを開いて、[Add Prefix]ボタンを押下する。<br>または、プロジェクトツリーにあるリソースファイルを右クリックして、[プレフィックスの追加...]を選択する。 # プレフィックス名に<code>/</code>(スラッシュ)を入力する。 # 次に、[Add Files]ボタンを押下する。 # ファイル選択ダイアログ画面にて、リソースファイルを選択する。([Ctrl] + [A]キーで全選択できる) <br> <u>※注意</u><br> <u>プロジェクトツリーにあるリソースファイルを右クリックして、[既存ファイルの追加...]を選択する場合、既定のプレフィックスが作成される。</u><br> <u>また、プレフィックスには任意の文字列を指定することができる。</u><br> <br> ==== 追加登録 ==== 以下に、リソースを追加する手順を示す。<br> # まず、リソースエディタを開いて、プレフィックスの行を選択する。<br>または、プロジェクトツリーにあるプレフィックス名を右クリックして、[既存のファイルの追加...]を選択する。 # [Add Files]ボタンを押下する。 # ファイル選択ダイアログ画面にて、リソースファイルを選択する。([Ctrl] + [A]キーで全選択できる) <br> <u>※注意</u><br> <u>プロジェクトツリーのプレフィックス(/)を右クリックして、[既存のファイルを追加]を選択して登録することもできる。</u><br> <br> ==== リソースの削除 ==== 以下に、リソースを削除する手順を示す。<br> # 削除するリソースの行を選択する。 # [削除]ボタンを押下して、ファイルの削除画面を表示する。 # ファイル名を確認して、[OK]ボタンを押下する。 <br> <u>※注意</u><br> <u>[Delete file permanently]にチェックを入力して削除する場合、ファイルの実体も削除される。</u><br> <u>プロジェクトツリーで削除するリソースを右クリックして、[Remove...]を選択して削除することもできる。</u><br> <br> ==== リソースの保存 ==== メニューを選択してリソースファイルを上書き保存する。<br> [ファイル] - [<リソースファイル名>の保存]<br> <br><br> == リソースをテキストエディタで編集する == テキストエディタを使用すると、リソースファイルの内容を直接変更することができる。<br> <br> プロジェクトツリーのリソースファイル(.qrc)を右クリックして、[テキストエディタで開く]を選択する。<br> <syntaxhighlight lang="xml"> // リソースのテキストエディタでの編集例 <RCC> <qresource prefix="/"> <file>images/drag.png</file> <file>images/flower.png</file> <file>images/photo.png</file> </qresource> </RCC> </syntaxhighlight> <br> <u>※注意</u><br> <u>テキストエディタでファイルパスの設定を削除しても、ファイルの実体が削除されることはない。</u><br> <br><br> == リソースの使用例 == ==== リソース名の文字列の取得 ==== プロジェクトツリーのプレフィックスの下にリソース名が表示されている。<br> <br> リソース名を右クリックして、[パス ":~" をコピー]を選択する。<br> <br> ==== 使用例 1 ==== ソフトウェアのタイトルバーのアイコンとして使用する。<br> <syntaxhighlight lang="c++"> // プロジェクトディレクトリ直下のimagesディレクトリ内にあるflower.pngファイル setWindowIcon(QIcon(":/images/flower.png")); </syntaxhighlight> <br> ==== 使用例 2 ==== ラベルにセットして、画像として表示する。<br> <syntaxhighlight lang="c++"> // プロジェクトディレクトリ直下のimagesディレクトリ内にあるphoto.pngファイル std::unique_ptr<QLabel> pLabel = std::make_unique<QLabel>(); pLabel->setPixmap(QPixmap(":/images/photo.png")); </syntaxhighlight> <br> ==== 使用例 3 ==== ドラッグ&ドロップにおいて、ドラッグ中の画像として使用する。<br> <syntaxhighlight lang="c++"> // プロジェクトディレクトリ直下のimagesディレクトリ内にあるdrag.pngファイル std::unique_ptr<QDrag> pDrag = std::make_unique<QDrag>(this); qDrag->setPixmap(QPixmap(":/images/drag.png")); </syntaxhighlight> <br> ==== 使用例 3 ==== サブメニューにアイコンを割り当てる手順を示す。<br> # Qt Designer画面下のアクションエディタを右クリックして、[編集...]を選択する。 # [アクションを編集]画面が開くので、[アイコン(I):]項目の[...]ボタンを押下してリソースに登録した画像ファイルを選択する。<br>または、[▼]ボタンを押下して、[ファイルを選択...]から画像ファイルを選択することもできる。 # アクションエディタにて、アクションの左側に選択したアイコンが表示される。 <br> ==== 使用例 4 ==== ツールバーにアイコンを割り当てる手順を示す。<br> # ツールバーの追加は、Qt Designerに表示しているウィンドウを右クリックして、[ツールバーを追加]を選択する。 # ツールバーの追加後、アクションエディタから任意のアクションをツールバーへ、ドラッグ&ドロップする。 <br><br> == ステータスバー == ウインドウまたはダイアログにおいて、ステータスバーを表示する。<br> <syntaxhighlight lang="c++"> #include <QStatusBar> QStatusBar StatusBar; StatusBar->showMessage(tr("ステータスを表示中...")); </syntaxhighlight> <br> ステータスバーにプログレスバーを表示する場合、以下のように記述する。<br> <syntaxhighlight lang="c++"> #include <QStatusBar> QStatusBar StatusBar; QProgressBar bar; StatusBar->addWidget(&bar); bar.setMinimum(0); bar.setMaximum(100); for(int i = 0; i < 100; i++) { bar.setValue(i); // 以下に処理を記述 // ... } StatusBar->removeWidget(&bar); </syntaxhighlight> <br><br> == タブオーダーの設定 == タブオーダーを無効化するには、ウインドウにある全てのウィジェットのタブオーダーを自分自身にする。<br> <syntaxhighlight lang="c++"> QList<QWidget *>widgets = findChildren<QWidget *>(); foreach(QWidget *widget, widgets) { widget->setTabOrder(widget, widget); } </syntaxhighlight> <br><br> == ウインドウおよびウィジェットの形状の変更 == ウインドウおよびプッシュボタン等のウィジェットにおいて、形状を非矩形に変更する、および、背景を画像に変更する手順を記載する。<br> <br> ==== 非矩形ウインドウ ==== まず、型抜き用画像を作成する。<br> 型抜き用画像は、ウインドウの形状を表す部分を描画した画像のことであり、画像以外の箇所を透過ピクセルにする。<br> したがって、型抜き用画像は透過(アルファチャンネル)をサポートするフォーマットで保存する必要がある。<br> <br> これは、[https://inkscape.org/ja/ Inkscape](ソフトウェア)を使用して、ウィンドウの形状を描画してPNG形式で保存する方法を推奨する。<br> <br> 次に、QMainWindowクラスまたはQDialogクラスのコンストラクタにおいて、以下のように記述する。<br> <syntaxhighlight lang="c++"> MainWindow::MainWindow() { Qt::WindowFlags flags = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint | Qt::FramelessWindowHint; setWindowFlags(flags); QPixmap pixmap("window.png"); setMask(pixmap.mask()); // 型抜き画像のサイズに合わせる resize( 300, 300 ); } </syntaxhighlight> <br> ==== ウインドウおよびウィジェットの外観の変更 ==== 例えば、ウインドウの背景色を変更する場合、QMainWindowクラスまたはQDialogクラスのコンストラクタにおいて、以下のように記述する。 <syntaxhighlight lang="c++"> MainWindow::MainWindow() { // 背景色を設定する setStyleSheet("* {background-color : rgb( 255, 255, 128 )}"); // 透過率を設定する setWindowOpacity(0.7); } </syntaxhighlight> <br> また、上記の変更は、Qt Designerから実行することもできる。<br> Qt Designer画面から、ウインドウまたはウィジェットの[プロパティ] - [styleSheet]項目を選択する。<br> [スタイルシートを変更]画面が開くので、[〜を追加]プルダウンから"background-color"と"Opacity"のQSSを追加する。<br> <br> ==== QSSをプロジェクト全体に適用する ==== 一般的に、QSSの設定は各ウィジェットごとに設定するが、プロジェクト全体で共通のQSSを設定することもできる。<br> QSSの書式や構文は、CSSとほぼ同じである。<br> <br> 以下の例は、Qtに付属しているサンプルを参考にしている。(<Qtのインストールディレクトリ>/examples/widgets/stylesheetディレクトリ)<br> まず、MainWindow.qssファイルを作成する。<br> <syntaxhighlight lang="css"> // MainWindow.qss // QPushButtonの設定例 QPushButton { background-color: #000088; border-color: #000044; border-style: solid; border-radius: 5; } QPushButton:hover { background-color: #880000; } QPushButton:pressed { background-color: #008800; } </syntaxhighlight> <br> 次に、MainWindow.qssファイルをQApplicationクラスのsetStyleSheetメソッドに渡す。<br> QApplicationクラスのインスタンスはシングルトンとして生成されているため、そのインスタンスから実行する。<br> また、QSSファイルはリソースとして登録しておくとよい。<br> <br> 以下の例では、main関数でQSSファイルを読み込み、設定している。<br> QSSには、他にも様々なクラスやセレクタが存在する。<br> <syntaxhighlight lang="c++"> #include "MainWindow.h" #include <QtCore> int main(int argc, char *argv[]) { QApplication app(argc, argv); QFile file(":/qss/MainWindow.qss"); file.open( QFile::ReadOnly ); QString strStyles = QLatin1String(file.readAll()); app.setStyleSheet( strStyles ); MainWindow w; w.show(); return app.exec(); } </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:Qt]]
Qtの基礎 - ウインドウ
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse