環境:linux,qt5.6.3 交叉編譯
2個視窗疊加,把上面視窗設定透明,控制元件不透明,結果上面視窗透明部分顯示黑色,
上面視窗建構式設定如下:
ui->setupUi(this);
setAutoFillBackground(false);
setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
setAttribute(Qt::WA_TranslucentBackground,true);//設定主表單背景透明,子控制元件不收影響
move(START_X+10, START_Y+45);
效果如下:圈出來的4個角應該是透明的,結果顯示黑色。

我上面的視窗是218*250的矩形,然后我把視窗設定為透明,在視窗內申請一個qlable控制元件,控制元件是一個218*250,qlable控制元件設定背景圖片為218*250,背景圖片的4個角是透明色的。
4個角顯示時候是透明的,那么應該顯示視窗的底色,而視窗是透明的,他就應該下面視窗內容,結果它卻顯示黑色!!
大佬救命,請問這是怎么回事?怎么解決?
uj5u.com熱心網友回復:
先用drawRoundedRect畫一個圓角矩形,然后使用setmask過濾,最后把你的背景圖片畫上去,我是這樣做圓角視窗的,你可以試試
void MainFrame::setWindowCircle()
{
//生成一張位圖
QBitmap objBitmap(size());
//QPainter用于在位圖上繪畫
QPainter painter(&objBitmap);
//填充位圖矩形框(用白色填充)
painter.fillRect(rect(),Qt::white);
painter.setBrush(QColor(0,0,0));
//在位圖上畫圓角矩形(用黑色填充)
painter.drawRoundedRect(this->rect(),10,10);
//使用setmask過濾即可
setMask(objBitmap);
}
void MainFrame::paintEvent(QPaintEvent *event)
{
setWindowCircle();
QPainter painter(this);
painter.drawPixmap(QRect(0, 0, this->width(), this->height()), QPixmap(":/images/frame_1.jpg"));
}
不過我linux沒怎么用過,不知道一不一樣
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/280825.html
標籤:Qt
