2017-06-17 70 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

假設前景表需要與你大概可以使用鼠標事件交互...

fg_table->setAttribute(Qt::WA_TransparentForMouseEvents); 

應該結果在所有的鼠標事件將bg_label

+0

我加了這個,但由於某些原因,表格現在確實接受鼠標事件,可以通過虛線選擇看到,即使我禁用了表格。在點擊小部件之前什麼都沒有發生,現在它按照描述選擇一個小區。 – GoYoshi

+0

如果確實如此,那麼我不相信你使用的代碼就像你所描述的那樣。請修改您的問題以顯示更多相關代碼 - 最好是[mcve]。 –

+0

其實這是我的應用程序中的問題,您的解決方案正常工作正常,因爲我在新程序中嘗試了它。由於解釋有點複雜,沒有人會分享這個特殊問題,我只會接受你的回答,我很高興它現在能夠運作! – GoYoshi