QShaderDescription Class
シェーダーのインターフェイスを記述します。詳細...
ヘッダー | #include <QShaderDescription> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
以来: | Qt 6.6 |
- 継承メンバを含む全メンバのリスト
- QShaderDescriptionは、Rendering in 3D に含まれています。
パブリックタイプ
(since 6.6) struct | BlockVariable |
(since 6.6) struct | BuiltinVariable |
(since 6.6) struct | InOutVariable |
(since 6.6) struct | PushConstantBlock |
(since 6.6) struct | StorageBlock |
(since 6.6) struct | UniformBlock |
enum | BuiltinType { PositionBuiltin, PointSizeBuiltin, ClipDistanceBuiltin, CullDistanceBuiltin, VertexIdBuiltin, …, InstanceIndexBuiltin } |
enum | ImageFlag { ReadOnlyImage, WriteOnlyImage } |
flags | ImageFlags |
enum | ImageFormat { ImageFormatUnknown, ImageFormatRgba32f, ImageFormatRgba16f, ImageFormatR32f, ImageFormatRgba8, …, ImageFormatR8ui } |
enum | QualifierFlag { QualifierReadOnly, QualifierWriteOnly, QualifierCoherent, QualifierVolatile, QualifierRestrict } |
flags | QualifierFlags |
enum | TessellationMode { UnknownTessellationMode, TrianglesTessellationMode, QuadTessellationMode, IsolineTessellationMode } |
enum | TessellationPartitioning { UnknownTessellationPartitioning, EqualTessellationPartitioning, FractionalEvenTessellationPartitioning, FractionalOddTessellationPartitioning } |
enum | TessellationWindingOrder { UnknownTessellationWindingOrder, CwTessellationWindingOrder, CcwTessellationWindingOrder } |
enum | VariableType { Unknown, Float, Vec2, Vec3, Vec4, …, Half4 } |
パブリック関数
QShaderDescription() | |
QShaderDescription(const QShaderDescription &other) | |
~QShaderDescription() | |
QList<QShaderDescription::InOutVariable> | combinedImageSamplers() const |
std::array<uint, 3> | computeShaderLocalSize() const |
QList<QShaderDescription::BuiltinVariable> | inputBuiltinVariables() const |
QList<QShaderDescription::InOutVariable> | inputVariables() const |
bool | isValid() const |
QList<QShaderDescription::BuiltinVariable> | outputBuiltinVariables() const |
QList<QShaderDescription::InOutVariable> | outputVariables() const |
QList<QShaderDescription::PushConstantBlock> | pushConstantBlocks() const |
void | serialize(QDataStream *stream, int version) const |
QList<QShaderDescription::StorageBlock> | storageBlocks() const |
QList<QShaderDescription::InOutVariable> | storageImages() const |
QShaderDescription::TessellationMode | tessellationMode() const |
uint | tessellationOutputVertexCount() const |
QShaderDescription::TessellationPartitioning | tessellationPartitioning() const |
QShaderDescription::TessellationWindingOrder | tessellationWindingOrder() const |
QByteArray | toJson() const |
QList<QShaderDescription::UniformBlock> | uniformBlocks() const |
QShaderDescription & | operator=(const QShaderDescription &other) |
静的パブリックメンバー
QShaderDescription | deserialize(QDataStream *stream, int version) |
関連する非メンバー
bool | operator==(const QShaderDescription &lhs, const QShaderDescription &rhs) |
詳細説明
警告 QShader や QShaderDescription を含む Qt GUI モジュールのQRhi ファミリーのクラスは、限られた互換性しか保証していません。これらのクラスにはソース互換性もバイナリ互換性も保証されていません。つまり、APIはアプリケーションが開発されたQtバージョンでのみ動作することが保証されています。しかし、ソース互換性のない変更は最小限にとどめることを目的としており、マイナーリリース(6.7、6.8など)のみで行われます。これらのクラスをアプリケーションで使用するには、Qt::GuiPrivate
(CMake を使用している場合)にリンクし、rhi
のプレフィックスを付けてヘッダをインクルードします(例:#include <rhi/qshaderdescription.h>
)。
シェーダには通常、入力と出力のセットがあります。たとえば、バーテックスシェーダはいくつかの入力変数を持ち、 アプリケーションが提供するデータ(モデルビュー行列など)にアクセスするた めに、1 つまたは複数のユニフォームバッファを使用することができます。フラグメントステージのシェーダは、(単純なセットアップでは)バー テックスステージからデータを受け取り、ユニフォームバッファ、イ メージ、サンプラからのデータにも依存するかもしれません。
頂点入力とユニフォームバッファのレイアウト(メンバの名前は何か、サイズ、オフセットなど)に関しては、アプリケーションとフレームワークは実行時に動的にこれを発見する必要があるかもしれません。これは、シェーダーがビルトインではなく、ユーザーのような外部エンティティによって提供される場合に典型的です。
近代的で無駄のないグラフィックス API は、もはや実行時にシェーダ反射情報を照会する方法を提供しないかもしれません。そのため、このようなデータはQShaderBaker によって自動的に生成され、QShader ごとに QShaderDescription オブジェクトとして提供されます。
例
次の頂点シェーダを見てみましょう:
#version 440 layout(location = 0) in vec4 position; layout(location = 1) in vec3 color; layout(location = 0) out vec3 v_color; layout(std140, binding = 0) uniform buf { mat4 mvp; float opacity; } ubuf; void main() { v_color = color; gl_Position = ubuf.mvp * position; }
このシェーダには 2 つの入力があります:vec4
タイプを持つ 0 の位置のposition
と、vec3
タイプを持つ 1 の位置のcolor
です:v_color
出力は1つです。さらに重要なのは、バインディング0に68バイトのサイズを持つ一様ブロックがあり、オフセット0にmvp
という名前の4x4行列、オフセット64にopacity
という浮動小数点数の2つのメンバがあります。
これらはすべてQShaderDescriptionオブジェクトによって記述されます。QShaderDescription は、QDataStream を介して JSON やバイナリ形式にシリアライズすることができ、このバイナリ形式からデシリアライズすることもできます。実際には、QShader が関連する QShaderDescription を自動的に処理するため、この処理が必要になることはほとんどありませんが、上記のシェーダの QShaderDescription を(qsb
ツールの-d
オプションで実行されるように)JSON として書き出すと、次のようになります:
{ "inputs": [ { "location": 1, "name": "color", "type": "vec3" }, { "location": 0, "name": "position", "type": "vec4" } ], "outputs": [ { "location": 0, "name": "v_color", "type": "vec3" } ], "uniformBlocks": [ { "binding": 0, "blockName": "buf", "members": [ { "matrixStride": 16, "name": "mvp", "offset": 0, "size": 64, "type": "mat4" }, { "name": "opacity", "offset": 64, "size": 4, "type": "float" } ], "set": 0, "size": 68, "structName": "ubuf" } ] }
C++ API では、上記のようなデータ構造にアクセスできます。C++のAPIでは、上記のようなデータ構造にアクセスすることができます。簡単にするために、内部構造体にはパブリックデータメンバーしか含まれていません。
QShaderBaker およびQShaderも参照して ください。
メンバ型ドキュメント
enum QShaderDescription::BuiltinType
内蔵変数タイプ。
定数 | 値 |
---|---|
QShaderDescription::PositionBuiltin | 0 |
QShaderDescription::PointSizeBuiltin | 1 |
QShaderDescription::ClipDistanceBuiltin | 3 |
QShaderDescription::CullDistanceBuiltin | 4 |
QShaderDescription::VertexIdBuiltin | 5 |
QShaderDescription::InstanceIdBuiltin | 6 |
QShaderDescription::PrimitiveIdBuiltin | 7 |
QShaderDescription::InvocationIdBuiltin | 8 |
QShaderDescription::LayerBuiltin | 9 |
QShaderDescription::ViewportIndexBuiltin | 10 |
QShaderDescription::TessLevelOuterBuiltin | 11 |
QShaderDescription::TessLevelInnerBuiltin | 12 |
QShaderDescription::TessCoordBuiltin | 13 |
QShaderDescription::PatchVerticesBuiltin | 14 |
QShaderDescription::FragCoordBuiltin | 15 |
QShaderDescription::PointCoordBuiltin | 16 |
QShaderDescription::FrontFacingBuiltin | 17 |
QShaderDescription::SampleIdBuiltin | 18 |
QShaderDescription::SamplePositionBuiltin | 19 |
QShaderDescription::SampleMaskBuiltin | 20 |
QShaderDescription::FragDepthBuiltin | 22 |
QShaderDescription::NumWorkGroupsBuiltin | 24 |
QShaderDescription::WorkgroupSizeBuiltin | 25 |
QShaderDescription::WorkgroupIdBuiltin | 26 |
QShaderDescription::LocalInvocationIdBuiltin | 27 |
QShaderDescription::GlobalInvocationIdBuiltin | 28 |
QShaderDescription::LocalInvocationIndexBuiltin | 29 |
QShaderDescription::VertexIndexBuiltin | 42 |
QShaderDescription::InstanceIndexBuiltin | 43 |
enum QShaderDescription::ImageFlag
flags QShaderDescription::ImageFlags
イメージフラグ。
定数 | 値 |
---|---|
QShaderDescription::ReadOnlyImage | 1 << 0 |
QShaderDescription::WriteOnlyImage | 1 << 1 |
ImageFlags 型はQFlags<ImageFlag> の typedef です。これは、ImageFlag 値の OR の組み合わせを格納します。
enum QShaderDescription::ImageFormat
画像フォーマット
定数 | 値 |
---|---|
QShaderDescription::ImageFormatUnknown | 0 |
QShaderDescription::ImageFormatRgba32f | 1 |
QShaderDescription::ImageFormatRgba16f | 2 |
QShaderDescription::ImageFormatR32f | 3 |
QShaderDescription::ImageFormatRgba8 | 4 |
QShaderDescription::ImageFormatRgba8Snorm | 5 |
QShaderDescription::ImageFormatRg32f | 6 |
QShaderDescription::ImageFormatRg16f | 7 |
QShaderDescription::ImageFormatR11fG11fB10f | 8 |
QShaderDescription::ImageFormatR16f | 9 |
QShaderDescription::ImageFormatRgba16 | 10 |
QShaderDescription::ImageFormatRgb10A2 | 11 |
QShaderDescription::ImageFormatRg16 | 12 |
QShaderDescription::ImageFormatRg8 | 13 |
QShaderDescription::ImageFormatR16 | 14 |
QShaderDescription::ImageFormatR8 | 15 |
QShaderDescription::ImageFormatRgba16Snorm | 16 |
QShaderDescription::ImageFormatRg16Snorm | 17 |
QShaderDescription::ImageFormatRg8Snorm | 18 |
QShaderDescription::ImageFormatR16Snorm | 19 |
QShaderDescription::ImageFormatR8Snorm | 20 |
QShaderDescription::ImageFormatRgba32i | 21 |
QShaderDescription::ImageFormatRgba16i | 22 |
QShaderDescription::ImageFormatRgba8i | 23 |
QShaderDescription::ImageFormatR32i | 24 |
QShaderDescription::ImageFormatRg32i | 25 |
QShaderDescription::ImageFormatRg16i | 26 |
QShaderDescription::ImageFormatRg8i | 27 |
QShaderDescription::ImageFormatR16i | 28 |
QShaderDescription::ImageFormatR8i | 29 |
QShaderDescription::ImageFormatRgba32ui | 30 |
QShaderDescription::ImageFormatRgba16ui | 31 |
QShaderDescription::ImageFormatRgba8ui | 32 |
QShaderDescription::ImageFormatR32ui | 33 |
QShaderDescription::ImageFormatRgb10a2ui | 34 |
QShaderDescription::ImageFormatRg32ui | 35 |
QShaderDescription::ImageFormatRg16ui | 36 |
QShaderDescription::ImageFormatRg8ui | 37 |
QShaderDescription::ImageFormatR16ui | 38 |
QShaderDescription::ImageFormatR8ui | 39 |
enum QShaderDescription::QualifierFlag
flags QShaderDescription::QualifierFlags
Qualifier フラグ。
定数 | 値 |
---|---|
QShaderDescription::QualifierReadOnly | 1 << 0 |
QShaderDescription::QualifierWriteOnly | 1 << 1 |
QShaderDescription::QualifierCoherent | 1 << 2 |
QShaderDescription::QualifierVolatile | 1 << 3 |
QShaderDescription::QualifierRestrict | 1 << 4 |
QualifierFlags 型はQFlags<QualifierFlag> の typedef です。QualifierFlags 値の OR の組み合わせを格納します。
enum QShaderDescription::TessellationMode
定数 | 定数 |
---|---|
QShaderDescription::UnknownTessellationMode | 0 |
QShaderDescription::TrianglesTessellationMode | 1 |
QShaderDescription::QuadTessellationMode | 2 |
QShaderDescription::IsolineTessellationMode | 3 |
enum QShaderDescription::TessellationPartitioning
定数 | 定数 |
---|---|
QShaderDescription::UnknownTessellationPartitioning | 0 |
QShaderDescription::EqualTessellationPartitioning | 1 |
QShaderDescription::FractionalEvenTessellationPartitioning | 2 |
QShaderDescription::FractionalOddTessellationPartitioning | 3 |
enum QShaderDescription::TessellationWindingOrder
定数 | 定数 |
---|---|
QShaderDescription::UnknownTessellationWindingOrder | 0 |
QShaderDescription::CwTessellationWindingOrder | 1 |
QShaderDescription::CcwTessellationWindingOrder | 2 |
enum QShaderDescription::VariableType
変数またはブロック・メンバーの型を表す。
定数 | 値 | 説明 |
---|---|---|
QShaderDescription::Unknown | 0 | |
QShaderDescription::Float | 1 | |
QShaderDescription::Vec2 | 2 | |
QShaderDescription::Vec3 | 3 | |
QShaderDescription::Vec4 | 4 | |
QShaderDescription::Mat2 | 5 | |
QShaderDescription::Mat2x3 | 6 | |
QShaderDescription::Mat2x4 | 7 | |
QShaderDescription::Mat3 | 8 | |
QShaderDescription::Mat3x2 | 9 | |
QShaderDescription::Mat3x4 | 10 | |
QShaderDescription::Mat4 | 11 | |
QShaderDescription::Mat4x2 | 12 | |
QShaderDescription::Mat4x3 | 13 | |
QShaderDescription::Int | 14 | |
QShaderDescription::Int2 | 15 | |
QShaderDescription::Int3 | 16 | |
QShaderDescription::Int4 | 17 | |
QShaderDescription::Uint | 18 | |
QShaderDescription::Uint2 | 19 | |
QShaderDescription::Uint3 | 20 | |
QShaderDescription::Uint4 | 21 | |
QShaderDescription::Bool | 22 | |
QShaderDescription::Bool2 | 23 | |
QShaderDescription::Bool3 | 24 | |
QShaderDescription::Bool4 | 25 | |
QShaderDescription::Double | 26 | |
QShaderDescription::Double2 | 27 | |
QShaderDescription::Double3 | 28 | |
QShaderDescription::Double4 | 29 | |
QShaderDescription::DMat2 | 30 | |
QShaderDescription::DMat2x3 | 31 | |
QShaderDescription::DMat2x4 | 32 | |
QShaderDescription::DMat3 | 33 | |
QShaderDescription::DMat3x2 | 34 | |
QShaderDescription::DMat3x4 | 35 | |
QShaderDescription::DMat4 | 36 | |
QShaderDescription::DMat4x2 | 37 | |
QShaderDescription::DMat4x3 | 38 | |
QShaderDescription::Sampler1D | 39 | |
QShaderDescription::Sampler2D | 40 | |
QShaderDescription::Sampler2DMS | 41 | |
QShaderDescription::Sampler3D | 42 | |
QShaderDescription::SamplerCube | 43 | |
QShaderDescription::Sampler1DArray | 44 | |
QShaderDescription::Sampler2DArray | 45 | |
QShaderDescription::Sampler2DMSArray | 46 | |
QShaderDescription::Sampler3DArray | 47 | |
QShaderDescription::SamplerCubeArray | 48 | |
QShaderDescription::SamplerRect | 49 | |
QShaderDescription::SamplerBuffer | 50 | |
QShaderDescription::SamplerExternalOES | 51 | |
QShaderDescription::Sampler | 52 | 個別サンプラー用 |
QShaderDescription::Image1D | 53 | |
QShaderDescription::Image2D | 54 | |
QShaderDescription::Image2DMS | 55 | |
QShaderDescription::Image3D | 56 | |
QShaderDescription::ImageCube | 57 | |
QShaderDescription::Image1DArray | 58 | |
QShaderDescription::Image2DArray | 59 | |
QShaderDescription::Image2DMSArray | 60 | |
QShaderDescription::Image3DArray | 61 | |
QShaderDescription::ImageCubeArray | 62 | |
QShaderDescription::ImageRect | 63 | |
QShaderDescription::ImageBuffer | 64 | |
QShaderDescription::Struct | 65 | |
QShaderDescription::Half | 66 | |
QShaderDescription::Half2 | 67 | |
QShaderDescription::Half3 | 68 | |
QShaderDescription::Half4 | 69 |
メンバ関数ドキュメント
QShaderDescription::QShaderDescription()
新しい空の QShaderDescription を構築します。
注意: 空であることは、新しく構築されたインスタンスに対してisValid() がfalse
を返すことを意味します。
QShaderDescription::QShaderDescription(const QShaderDescription &other)
other のコピーを作成する。
[noexcept]
QShaderDescription::~QShaderDescription()
破壊者。
QList<QShaderDescription::InOutVariable> QShaderDescription::combinedImageSamplers() const
結合されたイメージサンプラーのリストを返す
GLSL/Vulkanシェーダーをソースとして、layout(binding = 1) uniform sampler2D tex;
ユニフォームは以下を生成します:(ここではテキスト形式のJSONとして示されています)
"combinedImageSamplers": [ { "binding": 1, "name": "tex", "set": 0, "type": "sampler2D" } ]
これは、シェーダーの他の言語バージョンも結合イメージサンプラーを使用しなければならないという意味ではありません。たとえば、HLSLバージョンは、Texture2DとSamplerStateオブジェクトをそれぞれレジスタt1とs1で使用するだけでしょう。
std::array<uint, 3> QShaderDescription::computeShaderLocalSize() const
コンピュートシェーダのローカルサイズを返します。
例えば、以下の宣言を持つコンピュートシェーダに対して、この関数は{ 256, 16, 1}を返します。
layout(local_size_x = 256, local_size_y = 16, local_size_z = 1) in;
[static]
QShaderDescription QShaderDescription::deserialize(QDataStream *stream, int version)
stream からロードされた新しいQShaderDescription を返す。version は qsb のバージョンを指定する。
serialize()も参照のこと 。
QList<QShaderDescription::BuiltinVariable> QShaderDescription::inputBuiltinVariables() const
入力として使用されるアクティブなビルトインのリストを返します。例えば、gl_TessCoord と gl_Position の値を読み取るテッセレーション評価シェーダは、TessCoordBuiltin とPositionBuiltin がここにリストされます。
QList<QShaderDescription::InOutVariable> QShaderDescription::inputVariables() const
入力変数のリストを返します。これには、頂点ステージの頂点入力(attributesと呼ばれることもある)と、他のステージの入力(variationingと呼ばれることもある)が含まれる。
bool QShaderDescription::isValid() const
QShaderDescription が変数リストとブロックリストのいずれかに少なくとも1つのエントリーを含んでいれば真を返す。
QList<QShaderDescription::BuiltinVariable> QShaderDescription::outputBuiltinVariables() const
入力として使用されるアクティブな組み込み変数のリストを返します。たとえば、頂点シェーダはPositionBuiltin を出力組込み変数として持つことがよくあります。
QList<QShaderDescription::InOutVariable> QShaderDescription::outputVariables() const
出力変数のリストを返します。
QList<QShaderDescription::PushConstantBlock> QShaderDescription::pushConstantBlocks() const
プッシュ定数ブロックのリストを返します。
注意: Qt Rendering Hardware Interface と組み合わせて使用するシェーダでは、プッシュ定数ブロックに依存しないようにしてください。
void QShaderDescription::serialize(QDataStream *stream, int version) const
QShaderDescription stream version はqsbバージョンを指定する。
deserialize() およびtoJson()も参照のこと 。
QList<QShaderDescription::StorageBlock> QShaderDescription::storageBlocks() const
シェーダー・ストレージ・ブロックのリストを返す。
たとえば、ソースとしてGLSL/Vulkanシェーダーを使用する場合、次のように宣言します。
struct Stuff { vec2 a; vec2 b; }; layout(std140, binding = 0) buffer StuffSsbo { vec4 whatever; Stuff stuff[]; } buf;
は以下を生成します:(ここではテキストJSONとして示されています)
"storageBlocks": [ { "binding": 0, "blockName": "StuffSsbo", "instanceName": "buf", "knownSize": 16, "runtimeArrayStride": 16 "members": [ { "name": "whatever", "offset": 0, "size": 16, "type": "vec4" }, { "arrayDims": [ 0 ], "name": "stuff", "offset": 16, "size": 0, "structMembers": [ { "name": "a", "offset": 0, "size": 8, "type": "vec2" }, { "name": "b", "offset": 8, "size": 8, "type": "vec2" } ], "type": "struct" } ], "set": 0 } ]
注意: ストレージブロックの最後のメンバーのサイズは未定義です。これは、size
0と表示され、配列の次元は[0]
。ストレージブロックのknownSize
は、最後のメンバーのサイズを除外しています。これは、実行時にのみ判明するためです。配列サイズが未定義の最後のメンバに対する、配列項目間のバイト単位のストライドはruntimeArrayStride
である。この値は、指定されたバッファメモリレイアウト標準(std140、std430)の規則に従って決定される。
注意: SSBOは、OpenGL 2.xや3.1より古いOpenGL ESなど、一部のグラフィックスAPIでは利用できない。
QList<QShaderDescription::InOutVariable> QShaderDescription::storageImages() const
イメージ変数のリストを返します。
これらはおそらくコンピュートシェーダーで発生する。例えば、layout (binding = 0, rgba8) uniform readonly image2D inputImage;
:(ここではテキストJSONとして表示)
"storageImages": [ { "binding": 0, "imageFormat": "rgba8", "name": "inputImage", "set": 0, "type": "image2D" } ]
注意: 個別のイメージ・オブジェクトは、OpenGL 2.xや3.1より古いOpenGL ESなど、一部のグラフィックスAPIと互換性がありません。
QShaderDescription::TessellationMode QShaderDescription::tessellationMode() const
テッセレーションコントロールまたは評価シェーダーのテッセレーション実行モードを返します。
設定されていない場合、返される値はUnknownTessellationMode です。
例えば、以下の宣言を持つテッセレーション評価シェーダの場合、関数はTrianglesTessellationMode を返します。
layout(triangles) in;
uint QShaderDescription::tessellationOutputVertexCount() const
出力頂点の数を返します。
例えば、次のような宣言を持つテッセレーションコントロールシェーダーの場合、関数は3を返します。
layout(vertices = 3) out;
QShaderDescription::TessellationPartitioning QShaderDescription::tessellationPartitioning() const
テッセレーションコントロールまたは評価シェーダーのテッセレーション分割モードを返します。
設定されていない場合、返される値はUnknownTessellationPartitioning です。
例えば、以下の宣言を持つテッセレーション評価シェーダーの場合、関数はFractionalOddTessellationPartitioning を返します。
layout(triangles, fractional_odd_spacing, ccw) in;
QShaderDescription::TessellationWindingOrder QShaderDescription::tessellationWindingOrder() const
テッセレーションコントロールまたは評価シェーダーのテッセレーション巻き順を返します。
設定されていない場合、返される値はUnknownTessellationWindingOrder です。
例えば、以下の宣言を持つテッセレーション評価シェーダの場合、関数はCcwTessellationWindingOrder を返します。
layout(triangles, fractional_odd_spacing, ccw) in;
QByteArray QShaderDescription::toJson() const
シリアライズされたJSONテキストバージョンのデータを返します。
注意: JSON テキスト用のデシリアライズ・メソッドは用意されていません。
serialize()も参照 ください。
QList<QShaderDescription::UniformBlock> QShaderDescription::uniformBlocks() const
ユニフォーム・ブロックのリストを返す。
QShaderDescription &QShaderDescription::operator=(const QShaderDescription &other)
このオブジェクトにother を割り当てる。
関連する非会員
[noexcept]
bool operator==(const QShaderDescription &lhs, const QShaderDescription &rhs)
2つのQShaderDescription オブジェクトlhs とrhs が等しい場合、true
を返す。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.