Qt Creator を便利に使いこなそう

# はじめに

みなさんこんにちは。[Qt Champion](http://qt5.jp/qt-champion-2014-2nd.html) の @task_jp です。好きなクラスは [QSharedDataPointer](http://doc.qt.io/qt-5/qshareddatapointer.html)、嫌いなクラスは [QTextDocument](http://doc.qt.io/qt-5/qtextdocument.html) です。

今年からはじめた Qt Advent Calendar ですが、なんといきなり全部埋まってしまうという快挙を成し遂げて密かに感動しています。12月25日まで毎日ワクワクして過ごせるなんて考えただけで幸せですね。

１日目からレベルの高い素晴らしい記事が続いてきたので、この辺でちょっとハードルを下げるために **初心者向けの記事** を書くことにしました。ソースコードを一行も書かない縛りで頑張ります。

# Qt Creator の紹介

[Qt Project](http://qt.io) が Qt とともに開発しているオープンソースの統合開発環境 [Qt Creator](http://qt-project.org/doc/qtcreator/index.html) 便利に使いこなしていますか？

コードエディタとして優秀なだけではなく、デバッガのフロントエンドとして非常に使いやすかったり、バージョン管理システムがシームレスに統合されていたりと、コマンドラインだと面倒くさくて敬遠しがちな機能も Qt Creator であれば簡単に使いこなせて本当にありがたいですね。

この記事では Qt Creator を使いはじめたての人に知ってほしい機能を２つほど紹介します。

## 補完を制する快感を味わおう！

### -> と打つのはめんどくさい
「-」を打って、さらにシフトを押しながら「.」を打つのって本当に面倒くさいですよね。Qt Creator なら「.」と打っただけで、直前の変数がポインタの場合は「->」に自動的に置換して（メソッドの一覧まで出して）くれます。これだけでかなりの労力を省けますよね。（スマートポインタには試さないでね）

**「ui.」とタイプしだけでこうなる**
![ui.](https://qiita-image-store.s3.amazonaws.com/0/13867/d7eab21a-07ee-cdd6-2c2a-87c5c1f57871.png)

### キャメルケース対応の補完を最大限に活用しよう
[QDesignerCustomWidgetCollectionInterface](http://doc.qt.io/qt-5/qdesignercustomwidgetcollectioninterface.html) というクラス名を見ると長くてそれだけで使うのをやめたくなるかと思いますが、Qt Creator であれば「QDCW」あたりまで打てば見事に補完されます。

![qiita1-04.png](https://qiita-image-store.s3.amazonaws.com/0/13867/ab8b3116-a739-84d7-280f-601ed713c54b.png)

[QNAM](http://doc.qt.io/qt-5/qnetworkaccessmanager.html) くらい身近なクラスになると、メーリングリストやバグレポートなどでも、qnam で通じるようになって、逆に正式名称なんだっけ？って感じですね。

小文字から始まるキャメルケースのは最初は小文字で打ちはじめましょう。

> [sslSocket](http://doc.qt.io/qt-5/qsslsocket.html). [cTHE](http://doc.qt.io/qt-5/qsslsocket.html#connectToHostEncrypted)

みたいな感じですね。

大文字のところだけ打つのは最初は頭を使いますが、慣れたら相当便利で気持ちいいので是非積極的に立ち向かいましょう。

同じ頭文字からなる候補が複数ある場合もあると思いますが、`QSLiteral` や `QNReply` のように最後のかたまりは小文字のところも打つようにすることで候補が絞れる確率が飛躍的に高くなります。

この補完はクラス名や名前空間名、変数名、メソッド名、定数名、マクロ名、インクルードするファイル名など様々なところで使用できるので、是非積極的に活用して、タイプ数を半減して開発効率を向上しましょう。

## Ctrl+K （Mac は ⌘+K）を極めよう！
![qiita1-01.png](https://qiita-image-store.s3.amazonaws.com/0/13867/af182a22-8679-3266-81d3-0c3dc6898c07.png)
Qt Creator を最大限に使いこなす鍵が **Locator**（通称 Ctrl+K） です。
この左下の小さなボックスを通して、様々な作業をキーボード操作で行うことができるのが Qt Creator の最大の特徴と言っても過言ではないでしょう。

### ファイルを開く
Ctrl+K で Locator にフォーカスが当たったら、そのまま開きたいファイル名を打ちましょう。
「main.cpp」と打つと、Qt Creator で開いているプロジェクトの中にあるすべての main.cpp を検索して簡単にアクセスできるようになっています。

この機能は部分一致で検索していますので、「正式名称は忘れたけどなんとか manager だったよなー」という場合は「manager.」のように指定することができますし、ワイルドカードにも対応しているので、プロジェクトファイル関連のファイルを開きたいという場合には「\*.pr?」と指定することで「\*.pro」「\*.pri」「\*.prf」などをまとめて検索して開くことも可能です。

### その他の機能を使う
![Ctrl+K](https://qiita-image-store.s3.amazonaws.com/0/13867/16584d33-860a-61d7-5c2c-ff2a936f135e.png)

Ctrl+K で Locator にフォーカスが当たると上記のように使用できる機能の一覧とプレフィックスが表示されます。

#### 任意のコマンドを実行する
> !(スペース)コマンド名(リターン)

で任意のコマンドが実行できます。
> ! chmod +x hoge
! grep hoge -r *
! xdg-open .

のように Qt Creator では対応していない機能の実行や、対応していてもコマンドラインの方が良い場合などにとても便利です。

#### いま開いているファイルの中の C++ のシンボルを検索する
> .(スペース)シンボル名

あるメソッドの実装部分やクラスの定義などに簡単に移動できます。

#### クラス、Enum、関数の定義を検索する
> :(スペース)クラス名

#### ドキュメントを開く
> ?(スペース)ドキュメント名（やクラス名など）

クラス名やメソッド名、変数名などにカーソルを合わせて F1 キーを押すとヘルプを見ることができる Qt Creator ですが、任意のドキュメントにも簡単にアクセスができます。

> ? QString
? Concurrent

#### ファイルを開く
> a(スペース)ファイル名

前述のファイルを開く機能です。この機能はデフォルトがプレフィックスの省略を許可する設定になっているため、明示的にプレフィックスをつける必要は通常はありません。

#### クラス名を検索する
> c(スペース)クラス名

#### ファイルの場所が分かっているファイルを開く
> f(スペース)ファイル名

現在開いているファイルと同じディレクトリ（やその近辺のディレクトリの）ファイルを開く場合や、Qt Creator のプロジェクトの管理外のファイルを開く場合にとても便利です。

> f ../main.cpp
f ~/Documents/test.txt
f /var/log/...

#### 行ジャンプ
> l(スペース)行番号

好きな行にジャンプできます。カラムの指定も可能です。
> l 1
> l 12:40

この機能はよく使用する機能のため、「Ctrl+K, l(スペース)」を短縮して「Ctrl+L」で実行することができます。

#### C++ のメソッド名で検索する
> m(スペース)メソッド名

#### 開いているファイルにアクセスする
> o(スペース)ファイル名

#### 現在のプロジェクト内のファイルを検索する
> p(スペース)ファイル名

#### インターネット検索
> r(スペース)検索用語

bing や google などを指定して任意の語句を検索できます。
検索サービスをカスタマイズすることでさらに便利に使うことも可能です。

#### マクロの実行
> rm(スペース)マクロ名

Qt Creator のマクロの実行が可能です。

#### git タスクを実行する
> git(スペース)タスク名

git の操作もここからできます。

![git](https://qiita-image-store.s3.amazonaws.com/0/13867/5bae1242-9d2f-4c46-aa04-899c150060d3.png)

> git amend
git commit

### 自分用の機能を登録してさらに便利に

#### カスタムフィルタを登録する

自分でフィルタを作成することも可能です。

![Qt 5](https://qiita-image-store.s3.amazonaws.com/0/13867/1f74f884-62ce-27f5-af30-9a87b7b42054.png)

例えば、上記画像のように設定することで、Qt 5 のソースツリー以下の任意のファイルに簡単にアクセスすることができます。

> q qqmlxmlhttp...
q qmake.pro

#### ウェブアクセス用の URL を登録
![r](https://qiita-image-store.s3.amazonaws.com/0/13867/20aec2d0-2be2-718d-0787-cd5d22fe24f6.png)

Web Search のフィルタに URL を登録することでさらに便利にできます。

* https://codereview.qt-project.org/%1
* https://bugreports.qt-project.org/browse/QTBUG-%1

のように登録をして、

> r [52659](https://codereview.qt-project.org/52659) と打って、codereview. を選択して決定
r [42869](https://bugreports.qt-project.org/browse/QTBUG-42869) と打って、bugreports. を選択して決定

のように使います。


# Qt Creator のコミット画面のレイアウトを改善しました

こんな便利な Qt Creator をさらに便利なものにするために、Qt Creator にパッチを送ってみました。

## コミット画面のレイアウト

今までの Qt Creator の git (など) でコミットをする画面がこちらになります。

![vcs submit editor 3.3](https://qiita-image-store.s3.amazonaws.com/0/13867/6df331a5-7c58-030b-dd36-be4feb4e2a9c.png)

一見あまり問題がなさそうですが、コミットするファイルが多くなるととても使いづらくなります。
また、実行などのログペインが表示されるとまったく使い物にならなくなります。
![vcs submit editor with log pane](https://qiita-image-store.s3.amazonaws.com/0/13867/ba11c081-b6b9-c216-389c-c57f19c26063.png)

<blockquote class="twitter-tweet" lang="en"><p>Qt Creator の git のコミットの UI ってなんかイライラするよね</p>&mdash; Tasuku Suzuki (@task_jp) <a href="https://twitter.com/task_jp/status/487065729351442432">July 10, 2014</a></blockquote>

## イライラはお肌に悪いので改善してみました

<blockquote class="twitter-tweet" lang="en"><p>なので５分くらいで適当に改良した成果がこちらになります。/ change vcs submit editor layout <a href="https://t.co/4wWScPKfx1">https://t.co/4wWScPKfx1</a> <a href="https://twitter.com/hashtag/qtjp?src=hash">#qtjp</a>&#10;だれか試してみてくれないかしら。</p>&mdash; Tasuku Suzuki (@task_jp) <a href="https://twitter.com/task_jp/status/487066147175428096">July 10, 2014</a></blockquote>

てな感じで、かわいそうな右半分を上手に活用する形にレイアウトを変えてあげました。

![qiita1-13.png](https://qiita-image-store.s3.amazonaws.com/0/13867/180bd0ee-140f-7585-1614-443eac31c621.png)

これによって、画面全体を広く使うことができ、コミットするファイルが増えた際の一覧性が著しく改善されました。

この変更は Qt Creator の Visual Designer で行ったため [.ui ファイルの diff](https://codereview.qt-project.org/#/c/89549/7/src/plugins/vcsbase/submiteditorwidget.ui) を見てもなにをどう変更したかは読み取りづらいと思いますが、コードを一行も手で書かなくてもこんな改善ができるのはおもしろいですね。

この変更によりコミットメッセージの入力エリアの横幅が狭くなる関係で、コミットメッセージの折り返しがうまく機能しない問題 (https://codereview.qt-project.org/94927 で修正済み) が修正されるまでは取り込めないからちょっと待ってねと言われ、正式な採用までには少し時間がかかりましたが、2014年11月02日に無事取り込まれました。

Qt Creator 3.3 系には入れることができなかったため、みなさんの手に届くのはしばらく先の Qt Creator 3.4 までおあずけとなってしまいましたが、楽しみにお待ちください。

# おわりに

軽量で高機能でとても使いやすい Qt Creator をさらに便利に使いこなすためのテクニックを大きく分けて２つほど紹介しました。この他にも便利な機能がたくさんありますので、色々探してみてください。

Qt Creator はオープンソースプロジェクトとして開発が進められていて、誰でも開発に参加することができます。

Qt Creator は Qt で作られているので Qt ユーザーのみなさんであれば違和感なく理解できると思いますし、Qt Creator の中のコードを見てみるのはいい Qt の勉強になりますよ。

この記事の後半部分が「**あーなんかここをちょっとこうするだけで相当便利になるのになー**」というアイディアや、「[この Qt Creator のバグなんとかならないの？](https://bugreports.qt-project.org/browse/QTCREATORBUG#selectedTab=com.atlassian.jira.plugin.system.project%3Aissues-panel)」とか「[この翻訳したのだれだよ？](https://www.transifex.com/organization/qt-users-jp/dashboard/qt-creator)」という不満を、「**自分で直して取り込んでもらったらみんなのためになるんじゃない？**」という発想に変えていくキッカケになればいいなぁと思います。

というわけでパッチは作ってみたけれどそれをどう本家に還元したらいいかわかんないなーという方は [Qt の勉強会](http://qt-users.doorkeeper.jp/) に参加したり、Twitter で [@task_jp](https://twitter.com/task_jp) に一言声を掛けてもらえればやさしくお手伝いいたします。

明日は @Atsushi4 さんによる「**ETロボコンでQtシール貼って走ってきた話でもいいですか**」です。期待大ですね！

<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>