2016-05-14 22 views
0

QtのQWindow::fromWinID関数を使用してウィジェットを外部ウィンドウに描画したいと思います。クラスまたは名前を使用してxcbからウィンドウIDを取得

残念ながら、特定の名前/クラス(xwininfoとxpropを使用して表示できます)を持つウィンドウを描画する必要があります。私がこれを行うために見つけることができる唯一のコードは、xwininfoとxpropのソースの中にありますが、単純なことをするための不要なコードのようです:いくつかの文字列に等しい特定のプロパティを持つウィンドウを見つけて、 Qtが使用する。残念ながら、私は非常にXCBに精通しており、どのように起動するのか分からないでしょう。

200行のコードなしでこれを行うにはどうすればよいですか?私はこれを行うに見つけることができます

答えて

1

コードだけではxwininfoのソース内にあると本当にxdotoolと一緒に、素晴らしいリソースです

をxprop。

うん、いくつかの文字列

に等しい特定のプロパティを持つウィンドウを見つけることが、これらのツールは、その道を行く理由でこれを行い何もX11内蔵のは、ありません。次に、育児や非育成のウィンドウマネージャ、つまりクライアントウィンドウに降下する必要があるかどうかなど、考慮する必要があります。

もっと簡単な方法はありません。低レベルのXプログラミングは、XlibでもXCBでも、冗長性をもたらします。

xdotoolから抽出された(および使用されている)ライブラリlibxdoを使用することを検討することができます。 xdo_search_windowsにこの機能があります。しかし、ライブラリはXCBではなくXlibを使用します(したがって引き込みます)。 libxdoの先端のための

#include <xdo.h> 

int main() { 
    xdo_t *xdo = xdo_new(NULL); 
    xdo_enter_text_window(xdo, CURRENTWINDOW, "A", 0); 
    return 0; 
} 
+0

ありがとう:

は、ここでは、gcc -lxdo test.cを使用してコンパイルすることができますサンプルプログラムです。しかし、私はそれにリンクすることはできません(少なくともnmのシンボルはリンクした後に定義されていないと定義しています)私のシステムでは '/ usr/lib/libxdo.so'を持っています(そしてリンカーはファイルを見つけることができますが)まだ未定義の参照があります。なぜそれがあるのでしょうか? – rubenvb

+0

@rubenvb私はサンプルプログラムで私の答えを編集し、指示をコンパイルしました。これは私のために働く –

+1

extern "C"をxdo.hインクルードに追加する必要があります。未解決のシンボルがあります。 – rubenvb

関連する問題