1. 程式人生 > >Qt中給透明對話方塊新增border-image樣式

Qt中給透明對話方塊新增border-image樣式

QDialog是可設定border-image樣式的,但假如對話方塊設定了Qt::WA_TranslucentBackground屬性,再show出來則發現,背景空空如也,完全被穿透,只有子控制元件懸在上面。這是因為,開啟Qt::WA_TranslucentBackground屬性還會導致Qt::WA_NoSystemBackground的開啟,而它被開啟後,繪製事件則不再繪製border-image中設定的圖片了。

解決的辦法為:

  1. setAttribute(Qt::WA_TranslucentBackground); 之後再新增 setAttribute(Qt::WA_NoSystemBackground, false);
  2. QDialog的樣式表中新增 background-color: transparent;

比如下面這段程式碼,我給一個無邊框的對話方塊加上了毛邊,那層細線就是。

setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);

setAttribute(Qt::WA_TranslucentBackground);
setAttribute(Qt::WA_NoSystemBackground, false);
	
setStyleSheet("QDialog { border-image: url(border.png) 5 5 5 5; border-width: 5 5 5 5; background-color: transparent; }");