gtktreeviewヘッダーの高さを取得する方法は?
-
22-07-2019 - |
質問
gtkソースコードを調べましたが、ヘッダーの高さはプライベートです。試してみましたが、期待どおりに動作しませんでした(heightWithHeaderは1?!)
Glib::RefPtr<Gdk::Window> pWindow = treeView.get_bin_window();
treeView.set_headers_visible(true);
pWindow->get_size(width, heightWithHeader);
treeView.set_headers_visible(false);
pWindow->get_size(width, heightWithoutHeader);
r_treeView.set_headers_visible(true);
returnValue = heightWithHeader - heightWithoutHeader;
別の解決策やコードの修正を手伝ってくれませんか?
更新:一定の行数を表示するには、ツリービューの高さを調整する必要があります。これを行うには、コンテナ(スクロールウィンドウ)のサイズをheaderHeight + numberRowsToDisplay * heightOfRowに調整します。
解決
コードが機能しない理由は、「待ちきれない」ためであり、ヘッダーを再び非表示にする前にウィジェットの再描画を行う時間をGTK +に与えていないためです。
GTK +は、再描画が必要な呼び出しを行ってもすぐには描画しません。代わりに、再描画がキューに入れられ、GTK +メインループから一度にすべて実行されます。このように、ウィジェットに2つの変更を順番に行っても、2回の再描画は行われず、1回だけの再描画が行われます。
ちょっとしたハックですが、「クラシック」を試すことができます。 GTK +イベントフラッシングトリック。ヘッダーをオンにした後、次のようなループを挿入します。
while(gtk_events_pending())
gtk_main_iteration();
これは、GTK +のキューにイベントがある限りループし(上記の描画の変更は内部的にイベントです)、それらをフラッシュしてから、制御を戻します。ただし、これにより視覚的なちらつきが発生する可能性が非常に高くなります。
所属していません StackOverflow