2016-11-14 78 views
2

QMLコードのいくつかの部分をオフにする必要があります。このコードはデモ目的で行われており、最終リリースでは削除されるためです。しかし、製品はデモ機能と共に長く使用されるため、デモ機能を備えた別個のブランチを使用することはできません。常に新しい機能をそのブランチにマージすることはできません。だから、このコードを実行するのはいいですが、必要に応じてスイッチを切ったり取り外したりするのは簡単です。 CとC++ではifdefマクロを使っていますが、QMLでも同じことができますか?CスタイルのifdefマクロをQMLでシミュレートするには?

+0

あなたのコードを 'Component'に置き、必要なコンポーネントを使います。 – folibis

答えて

3

あなたは自分のコンポーネントにそれらの部品をリファクタリングすることができた場合は、次の2つのオプションがあります。

  1. File selectors
  2. Loader

を最初のオプションは、おそらくC-スタイルに少し近いです#ifdefマクロはLoaderを使用するよりも、ファイルレベルで動作します。 Loaderを過度に使用しない限り(たとえ大きなビューの代理人として)でも、どちらもうまく機能するはずです。

+0

答えに感謝します。これらの2つのオプションは別のことを行います。私は、動的にロードできるファイルまたはコードのいずれかを別々のコンポーネントに分けていません(実際に作ることはできません)。むしろ、いくつかの関数のフローを変更し、 'Component.onCompleted'などを使用するように、いくつかのプロパティを導入しているコードが散在しているので、両方の方法は本当に役に立ちません。 %同一、これは私に過労に思える。 – rightaway717

+0

あなたは運が悪いと思いますが、残念ながら。 – Mitch

1

#ifdefは、プリプロセッサの命令です。つまり、CまたはC++コンパイラがコードを参照する前にビルド時に処理されたものです。 QMLファイルを処理する前に、作成時にQMLファイルを処理して、選択したテキスト操作言語を使用して同じことを行うことができます。 Qtリソースコンパイラによって。

0

また今、あなたは簡単にデバッグをチェックするためstName.isDebuggingEnable()メソッドを呼び出すことができる機能

Q_INVOKABLE bool isDebuggingEnable() 
{ 
    #ifdef QT_DEBUG 
    return true; 
    #else 
    return false; 
    #endif 
} 

でクラスDebugCを使用して、QML

viewer->rootContext()->setContextProperty("stName", DebugCObj) 

でこのクラスを登録することができます有効にする場合、またはあなたのQMLファイルではありません。そのわずかトリック

+0

お返事ありがとうございます。 2つのコメントがあります。プロジェクトをデバッグ/リリースモードでコンパイルするかどうかを確認するには、新しいマクロを作成するのではなく、 'QT_NO_DEBUG'または' QT_DEBUG'マクロを使用する方が良いでしょう。第二に、これは普通の '' if''のようにC言語の 'ifdef'のようなマクロとは異なりますが、やや異なっています。 – rightaway717

0

QMLはをコンパイルしたが、プリプロセッサディレクティブはQMLで直接を使用することはできませんので、実行時に解釈ではありません。 しかし、C++側からQMLにプロパティを導入することが可能であるため、これに限定されるものではありません。したがって、これらのプロパティに基づいて意思決定を行いながら、C++側に指示を配置することができます。 QML側で使用されます。

関連する問題