この記事では、Qt未経験者にQtの便利さとハードルの低さを伝えることを目的として、Qtについて簡単に紹介し、自作の小さなQtアプリケーション「QCodScreenShot」のソースコードを抜粋して一部紹介します。QtについてQtとは?Qtは、C++で書かれたアプリケーションフレームワークで、一つのソースコードで異なるプラットフォームに向けた実行ファイルを生成できるのが大きな特徴です。OS、Linuxで動くアプリケーションを、同一のソースコードから作成できます。GUIアプリケーションを容易に作成できるという点で知られていますが、GUI以外の便利な機能も多く提供されています。株式会社SRAのHPに、Qtの採用事例が紹介されています。hermit4さんによる記事「Qtで作られたアプリケーションを調べてみる」では、Qtを使って開発されているアプリケーションが紹介されています。QtのライセンスQtを商用利用したい開発者にとってハードルとなるのが、Qtのライセンスです。Qtは商用有償ライセンスとGPL/LGPLのデュアルライセンスを採用しており、LGPLv3を選択すればソースコードを公開しないプロプライエタリ開発も可能ですが、スタティックリンクをした場合はソースコードまたはオブジェクトファイルを配布しなければならない等制約があります。詳細は、株式会社SRAが公開しているLGPLライセンスについての注意点をご確認ください。Creator」は、Qtの開発を支援することを目的として提供されているIDEです。ライセンスに則り、無料で利用することが出来ます。直感的に操作でき、Qtの開発をするうえで便利な機能が多く含まれますので、Qtインストール時に同時にインストールすることをおすすめします。Creatorには、Qtアプリケーションを編集するための便利なモードがあります。編集モード編集モードは、コード編集のためのモードです。高度な省入力補完機能を持ち、F1キーでカーソル部分のクラスやメソッドについてのヘルプ画面を開くなど、コード編集のための機能が充実しています。デザインモードデザインモードでは、パーツを選び、ドラッグ&ドロップすることでGUIを作成することができます。作成したGUIは.uiという拡張子で保存されます。ヘルプモードヘルプモードでは、Qtライブラリの仕様を確認できます。豊富なサンプルがあり、わかりやすく解説されています。「編集モード」にて前述の通り、編集モードで調べたい対象にカーソルをあわせ、F1キーを押すことでいつでも開くことができるので、わからないことがあるときも検索などで手が止まることがありません。アプリケーションの紹介ここでは、自作アプリケーション「QCodScreenShot」について紹介します。QCodScreenShotは、Windowsで動作確認済のデスクトップアプリケーションです。外観アイコンを並べたシンプルな外観です。MONO」さんのものを利用させていただいています。任意の範囲のスクリーンショット撮影が行なえます。上記のように画面上でドラッグして範囲を指定すると、下記のスクリーンショットが取得できます。以下のように、任意の場所に矢印を描画することもできます。タイマー機能タイマーのアイコンを押すと下記のようにカウントダウンがはじまり、0になるとスクリーンショットを撮影します。設定機能さまざまなパラメータを設定できます。実装解説ここからは本アプリケーションの実装について一部紹介し、Qtの便利さを紹介していきます。本アプリケーションは、なるべく本来の用途の邪魔にならないよう、タイトルバーやボタンのないUIになっています。Qtではこのようなウィンドウを簡単に実装することができます。...}上記処理は、MainWindowクラス生成時に一度だけ実行されるinitializeメソッドの一部です。QWidgetクラスのsetWindowFlagsメソッドを用いて、Qt::FramelessWindowHintを設定しています。アプリケーションのウィンドウを常に最前面表示する処理も、「フレームレス」と同様に実装できます。...}Qt::FramelessWindowHintフラグに加え、Qt::WindowStaysOnTopHintフラグを設定します。条件分岐では、「常に最前面表示」の設定が真となっているかどうかを判断しています。保存先ファイルパスとして指定された文字列について、指定されたパスにすでにファイルが存在する際に、上書きしてよいかユーザに確認する処理について紹介します。}QFile::exists()メソッドにより、ファイルの存在を確認します。存在しない場合、そのまま保存してかまわないため、trueを返します。上書き確認をするかどうか確認します。確認しない設定であれば、そのまま上書きしてよいので、trueを返します。ユーザーに対し、上書き確認を行います。QMessageBoxクラスのstaticメソッドであるquestionは、ユーザーに簡単な問いかけをするのに非常に便利です。Yes、Noいずれかのボタンを表示し、ユーザーが押したボタンを戻り値として返します。(Yes、No以外のボタンを表示することもできます)戻ってきたボタンがQMessageBox::Yesであればそのまま保存でき、Noであれば保存してはいけないので、そのまま条件式とします。tr()「ファイルの上書き確認」のソースにて、文字列がtr()という関数内に存在することにお気づきの方もいるかもしれません。これは、翻訳が必要な文字列であるということをQtの翻訳のしくみに伝えるための特別な関数です。Qtアプリを国際化してみようという記事で詳細を書きました。よろしければそちらもご覧ください。スクリーンショットに矢印を追加このアプリケーションは、作成したスクリーンショットに矢印を描画できます。ここでは、スクリーンショット画像に矢印の画像を合成する処理を紹介します。元イメージを複製する。元イメージ上に描画を行うための`QPainter`オブジェクトを作成。矢印の画像を読みこむ。指定された点に矢印の先端を描画できるよう、painterの位置をずらす。矢印の画像を描画する。矢印の画像を描画した画像を返す。newImage;}おわりにコード全体はGitHubにあります本記事では一部の実装について紹介しましたが、コード全体はGitHubに置いてありますので、Qtでの開発に興味がありましたら是非ご覧ください。w...github.com手探りで実装している部分もあるのですぐに答えることをお約束はできませんが、不明な点などあればコメントやTwitterなどでお声がけいただければ適宜当記事に追記したいと思います。QtのインストールQtのインストールは以下リンクから行えます。デスクトップアプリケーションづくりに挑戦してみてください。コメントをキャンセルメールアドレスが公開されることはありません。