シェルを使用して、または GUI から実行すると、動作が異なるクラスを構築しようとしています。
#include "myclass.h" を使用して両方の形式に含めることができます...
ただし、コンストラクターでは、シェルの実行と GUI の実行を区別したいと思います。
宣言時にコンストラクターに渡されるパラメーターを使用して簡単に実現できますが、オプションを検討したいと思います。
ubuntu で C++ を使用しており、GUI では Qt を使用しています。
X ウィンドウが存在するかどうかを判断する標準的な C の方法:
#include <stdlib.h>
if (NULL == getenv("DISPLAY")) is_gui_present = false;
else is_gui_present = true;
シェルが存在するかどうか、またはアプリケーションがファイルマネージャーなどから実行されたかどうかを判断したい場合は、簡単ではありません。どちらの場合もexec
、シェルまたはファイルマネージャー/GUI プログラムランナーからのシステムコールの呼び出しにすぎません。 (多くの場合、同じパラメーターを使用します)、それを確認するには明示的にフラグを渡す必要があります。
PS私はそれを行う方法を見つけました:変数「TERM」の環境を確認してください-シェル用に設定され、Qtプログラムに継承されますが、GUIプログラムでは設定されないことがよくあります。しかし、これを正確な解決策と見なさないでください。
デスクトップ (ダブルクリックまたはデスクトップ ファイル/スタート メニュー) からプログラムを起動すると、通常、stdin ファイル記述子がパイプにリダイレクトされます。これを検出できます:
#include <cstdio> // fileno()
#include <unistd.h> // isatty()
if (isatty(fileno(stdin)))
// We were launched from the command line.
else
// We were launched from inside the desktop