QtCreator の便利な使い方

<!--
※ (2023/04/11追記) インストール手順を書いてませんでした。以下の記事を参照しながらmingw-winlibs と qt-creator を入れてください。

https://qiita.com/javacommons/items/1d71b0f2c12ef4713617

<b>インストールが終わったら、デスクトップの「QtCreator」アイコンをダブルクリックして起動できます。
起動後は QtCreator のアイコンをタスクバーから右クリックしてピン止めしておくといいでしょう。
デスクトップにアイコンがない場合は、Windowsキーを押して「qtc」と入力すれば「QtCreator」のアイコンが出てきます。</b>

-->

## QtCreator の特長

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140610/80b9ad95-3d69-e228-47cc-ef9cd67edd52.png)

QtCreator には以下のような優れた特徴があります。

* 高性能なエディタ
    * シンタックスハイライト機能
        * 文脈依存のコード補完機能
        * 入力中の静的コードチェック
        * GUI のデザイン機能
    * 高機能なナビゲーションツール
        * ファイル、クラス、メソッド、ドキュメント等への高速なアクセス
        * シンボルの追跡
    * ビルド、実行、デバッグ機能
    * ソースコード管理ツールに対応
    * プラグイン形式による拡張が可能
    * クロスプラットフォームで動作するため、どのプラットフォームでも同じ操作で開発ができる
    * 軽快に動作

## QtCreator の使い方

QtCreatorを起動したら、メニューから「ファイル」⇒「New Project」を選択して、「非Qtプロジェクト」⇒「C++アプリケーション」を選択します。
名前をアルファベットと数字で入力し、「次へ」。ビルドシステム「CMake」のままで「次へ」。「キット」を選択して「次へ」。
「バージョン管理に追加」はお好みで「完了」。

```cpp:main.cpp
#include <iostream>

using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    return 0;
}
```

上記のソースが自動作成されています。
Ctrl-Shift-B でビルド。
Ctrl-R で実行。
CMakeLists.txt を変更した後は、「ビルド」⇒「CMakeの実行」を選択してください。(但し、変更して保存すると自動的に実行されるようですが)

機能の説明のために、クラスのソースを追加します。
左側のツリーからプロジェクト名を展開して「Source Files」ノードを右クリックして、「新しいファイルを追加」を選択します。
「C/C++」から「C++クラス」を選択して「選択」をクリック。「クラス名」に「MyClass」と入力して(他はいじらず)「次へ」。
「バージョン管理に追加」はお好みで「完了」。ファイル名をクリップボードにコピーするかどうか聞かれるので「Yes」。

CMakeLists.txt が開かれるので：

```
add_executable(test02 main.cpp)
```

の部分に張り付けて

```
add_executable(test02 main.cpp myclass.h myclass.cpp)
```

のようにします。

MyClass の追加で以下のようなソースファイルが自動作成されます。

```cpp:myclass.h
#ifndef MYCLASS_H
#define MYCLASS_H

class MyClass
{
public:
    MyClass();
};

#endif // MYCLASS_H
```

```cpp:myclass.cpp
#include "myclass.h"

MyClass::MyClass()
{

}
```

----

ここで、myclass.h にメソッドのプロトタイプを追加します。

```cpp:myclass.h
#ifndef MYCLASS_H
#define MYCLASS_H

class MyClass
{
public:
    MyClass();
    int add2(int a, int b); // ← 追加した
};

#endif // MYCLASS_H
```

myclass.cpp に定義を追加したいので、myclass.h の add2 の上にカーソルを合わせて「Alt-ENTER」を押します。
コンテクストメニューから「myclass.cpp に定義を追加」を選択します。
すると、myclass.cpp が自動的に開かれて以下のように MyClass::add2() の定義(中身は空)が自動追加されます。(便利機能①)

```cpp:myclass.h
#include "myclass.h"

MyClass::MyClass()
{

}

int MyClass::add2(int a, int b)
{

}
```

もう一度、ヘッダ(myclass.h)を見たい場合は「F4」を押せば、ソースとヘッダをいったりきたりできます。
また、「#include "myclass.h"」の myclass.h の上にカーソルを置いて「F2」を押すことによりヘッダを開くことができます。
これは自作のヘッダ以外にシステムヘッダも開くことができます。
(また、F2 は、関数名等にカーソルを合わせて、その定義に飛ぶためにも使えます)

----

今度は、myclass.cpp の add2 の上にカーソルを合わせて「Alt-ENTER」を押します。「定義を myclass.h へ移動する」を選択します。
そうすると、myclass.h に自動移動して、以下のようになります。(また、Alt-ENTER で .cpp に戻すこともできます)

```cpp:myclass.h
#ifndef MYCLASS_H
#define MYCLASS_H

class MyClass
{
public:
    MyClass();
    int add2(int a, int b)
    {

    }
};

#endif // MYCLASS_H
```

----

こんどは、インターフェースクラスや、仮想関数を持った親クラスのメソッドをオーバーライドする手順を紹介します。
以下のように修正しました。親クラス(この場合はインターフェースクラス)を追加して、「class MyClass: public Animal」で継承を定義しました。

```cpp:myclass.h
#ifndef MYCLASS_H
#define MYCLASS_H

// インターフェースクラス
struct Animal
{
    virtual void say() = 0; // 純粋仮想関数
};

class MyClass: public Animal
{
public:
    MyClass();
    int add2(int a, int b);
};

#endif // MYCLASS_H
```

ここで、「class MyClass」の名前(MyClass)の部分にカーソルを合わせて「Alt-ENTER」を押します。
「基底クラスの仮想関数を追加する」を選択します。「追加する仮想関数」を選択して「OK」をクリックします。(便利機能②)

```cpp:myclass.h
#ifndef MYCLASS_H
#define MYCLASS_H

// インターフェースクラス
struct Animal
{
    virtual void say() = 0; // 純粋仮想関数
};

class MyClass: public Animal
{
public:
    MyClass();
    int add2(int a, int b);

    // Animal interface
public:
    void say();
};

#endif // MYCLASS_H
```

上記のようになります。

また、「追加する仮想関数」を選択するダイアログで：

* 「実装ファイルに定義を追加する」をコンボボックスから選んで
* 関数宣言に "virtual" を追加kする、をチェックして
* 関数宣言に "override" 修飾子を追加する、もチェックして

から「OK」をクリックすると・・・

```cpp:myclass.h(virtualとoverrideが付いた)
#ifndef MYCLASS_H
#define MYCLASS_H

// インターフェースクラス
struct Animal
{
    virtual void say() = 0; // 純粋仮想関数
};

class MyClass: public Animal
{
public:
    MyClass();
    int add2(int a, int b);

    // Animal interface
public:
    virtual void say() override;
};

#endif // MYCLASS_H
```

```cpp:myclass.cpp(.cppにもsay()の空定義が追加された)
#include "myclass.h"

MyClass::MyClass()
{

}

int MyClass::add2(int a, int b)
{

}

void MyClass::say()
{
}
```

どうでしょうか、g++ と CMake があれば Qt SDK なしで、QtCreator が使えるので、これらの便利な機能を使ってみてください。

それでは！

以下の記事もよろしくお願いいたします。<b>Qt Creator で開発したソースが Visual Studio で文字化けしてしまうのを解決します。</b>

https://qiita.com/javacommons/items/45e880ea5408a97704fa