2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Qtはいいぞ

Last updated at Posted at 2022-02-13

投稿テストついでに最近私が使用しているQtについて

#Qtはいいぞ
Qtとは……の様な解説は解説サイトにお任せするとして、私がQtを使っている理由とかメリットとかを。

  1. 開発が楽
  2. GUI関係の拡張が楽
  3. 3Dも扱える

######開発が楽
これに尽きます。マルチプラットフォーム対応なんかもありますが、それもあってWin32APIから解放されると言うだけで天国です。Windowsは歴史があるので仕方ない点もありますが、例えばウィンドウを作る、文字を描画する、図形描画する、3D描画する、音を鳴らす。とかAPIがごっちゃごちゃでドキュメントもバラバラです。それが一本化されてるだけで天国です。

######GUI関係の拡張が楽
GUIライブラリとも言われているだけあって拡張が楽です。ボタン押したら何かが動作する。みたいなイベント駆動型の処理もらくちんですし、

######3Dも扱える
OpenGLの便利なラッパークラスが充実してます。これはQt側で用意したものを使ったり使わなかったりでXISMOでは使っていますがVCapStudioだと使わずに直接OpenGL叩いてます。(XISMOでも全部使ってる訳でもないです。)
例えば頂点バッファを使うには

QOpenGLBuffer* vertexBuf = new QOpenGLBuffer();
vertexBuf->create();
vertexBuf->bind();
vertexBuf->allocate(data, vertCount * sizeof(QVector3D));

こんな感じで使います。戻り値を書いてませんが、createだったりbindがboolで帰ってくるので、すんごい分かりやすいです。こう言うクラス設計がQt全体である程度統一されているのでなにかと便利です。アニメーションとかで頂点バッファのポインタが欲しい時は

QVector3D *verts = (QVector3D*)vertexBuf->map(QOpenGLBuffer::WriteOnly);

こんな感じで取得出来て、例えば以下の様に頂点データが更新できます。

vertexBuf->bind();
QVector3D *verts = (QVector3D*)vertexBuf->map(QOpenGLBuffer::WriteOnly);
verts[0] = QVector3D(0,0,0);
verts[1] = QVector3D(1,1,1);
vertexBuf->unmap();
vertexBuf->release();

……ら…楽だし……分かりやすい!
強いて言えば算術関係のクラスはそこまで充実していないのでこの辺は昔から使っている自前のものを使いまわしています。Quaternionのクラスなんかもありますが最低限の実装と言う感じです。

投稿テストついでにちょっとQtの話をしましたが、基本的には自分用メモみたいな感じで使う予定なので、技術的に突っ込んだことはあまり書かないと思います。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?