//==========實現上邊角圓弧========== setWindowFlags(Qt::FramelessWindowHint); QBitmap bmp(this->size()); bmp.fill(); QPainter p(&bmp);// p.setPen(Qt::NoPen);// p.setBrush(Qt::black); p.setRenderHint(QPainter::Antialiasing); //消除鋸齒 //p.drawRoundedRect(bmp.rect(), 20, 20); //四個角都是圓弧 //只要上邊角圓弧 int arcR = 10; //弧度 QRect rect = this->rect(); QPainterPath path; //逆時針 path.moveTo(arcR, 0); path.arcTo(0, 0, arcR * 2, arcR * 2, 90.0f, 90.0f); path.lineTo(0, rect.height()); path.lineTo(rect.width(), rect.height()); path.lineTo(rect.width(), arcR); path.arcTo(rect.width() - arcR * 2, 0, arcR * 2, arcR * 2, 0.0f, 90.0f); path.lineTo(arcR, 0); p.drawPath(path); //p.fillPath(path, QBrush(Qt::Red)); //arm和windows平台沒有這行代碼將顯示一個透明的空空的框 setMask(bmp); //==========實現上邊角圓弧==========
可以放在表單的建構函式中,具體的代碼原理我也沒有詳細看,拿來主意,:-)。
原理應該是使用一個BITMAP來實現表單繪畫,圓角是使用path路徑來逐步畫出來的。
轉自:http://blog.csdn.net/fariel_zhang/article/details/6315463
一些畫圖原理可參考:http://blog.sina.com.cn/s/blog_83dddc170100s0u4.html