2017-06-17 3 views
0

私のアプリケーションでは、フォアグラウンドにテーブルがあります。それは透明な背景を持っているので、私はそれを介してイメージを持つラベルを見ることができます。テーブルとラベルのサイズはまったく同じです。テーブルの背後にあるレイヤーのラベルに描画する

テーブルが表示されていても使用できない状態で、ラベルに描画したいと思います。ラベルはテーブルの背後にあるレイヤーなので、テーブルを無効にしてフォーカスを無効にしても、ラベルを描画することはできません。ラベルがフォアグラウンドにある場合にのみ機能しますが、これはテーブルがもう表示されないことを意味します。

私はすぐに私はボタンを押して描画したい:しかし、働いていない

void MainWindow::on_btn_draw_clicked() 
{ 
    fg_table->setFocusPolicy(Qt::NoFocus); 
    fg_table->setEnabled(false); 
    bg_label->setFocusPolicy(Qt::StrongFocus); 
    bg_label->setFocus(); 
} 

。テーブルは無効になっており、使用できません(これは正しい)が、bg_labelに描画することはできません。

デザイナでは、bg_labelはQLabelから継承するクラス 'DrawLabel'のプレースホルダです。クラスでは描画が可能になり、さまざまなマウスイベントに反応することができます。すべてがうまく動作し、理論的に描くことができますが、bg_labelがテーブルの後ろにあるレイヤーである場合は表示されません。

は、私はあなたが/上げる

bg_label->activateWindow(); 
    bg_label->raise(); 

とウィジェットの層を下げることができることを知っているが、これは私が欲しいものではありません。レイヤーは変更しないでください。ちょうどbg_labelのテーブルの後ろに描画したいと思います。

これを達成する方法はありますか?私はどこでも同じような問題は見ていません。

+0

「私はそれを上手に描くことができません」ということをより正確に説明する必要があると思います。ペイントイベントを受け取っていないか、ユーザーイベントと対話していないことを意味しますか? –

+0

私はこの例のように私のラベルを描くことができます:http://doc.qt.io/qt-5/qtwidgets-widgets-scribble-example.html これは私もマウスのプレス、移動、リリースのイベントがあることを意味しますペイントイベントなどがあります。ラベルがトップレイヤーのときはすべてうまく動作しますが、テーブルの背後にあるので動作しません。マウスイベントが呼び出されないため、何も描画されません。 – GoYoshi

答えて

1

fg_tableが視覚的に透明であるということは無関係です。単純な事実は、fg_tableがすべてのマウスイベントを受信するということです。それが受け入れられないものは、必ずしも視覚的に下に見えるウィジェットではなく、親に伝えられます。すなわち、bg_labelです。

bg_labelに行くすべてのマウスイベントで結果必要があることを...フォアグラウンドテーブルあなたはおそらく使用できるマウスイベントと対話する必要はありません

fg_table->setAttribute(Qt::WA_TransparentForMouseEvents); 

を仮定。

+0

私はこれを追加しましたが、テーブルを無効にしたにもかかわらず、何らかの理由でテーブルがマウスイベントを受け付けました。ウィジェットをクリックしたときに何も起こらないうちに、ここで説明したようにセルが選択されます。 – GoYoshi

+0

これが本当の場合は、使用しているコードがあなたが説明したとおりであるとは確信していません。より関連性の高いコードを表示するには、質問を編集してください。好ましくは[mcve]です。 –

+0

実際には私のアプリケーションでは問題でしたが、新鮮なプログラムで試してみると、あなたのソリューションはうまく動作します。説明するのが少し複雑で、誰もこの特別な問題を分かち合うことはないので、私はあなたの答えを受け入れて、今はうまくいきます! – GoYoshi

関連する問題