Ying
31st August 2011, 21:49
Hi all
I am new to this great and helpful forum! I solved many problems with solutions here posted. So here is my contribution:
Actually we are programming a login manager for Linux/Unix systems: LINK (http://forum.manjarolinux.org/viewtopic.php?id=104)
We are now in a state, where we are concentrating on the theme management and style. Therefore I needed a function to create a widget with rounded corners. But I wanted to have the ability to give each corner a different radius. I found here some small code examples, but only for adjusting all corners with the same radius. So, I want to fill this gap. Here is my code example, to give a widget rounded corners, with the ability to give each corner a different radius:
void Widget::setRoundedCorners(int radius_tl, int radius_tr, int radius_bl, int radius_br) {
QRegion region(0, 0, width(), height(), QRegion::Rectangle);
// top left
QRegion round (0, 0, 2*radius_tl, 2*radius_tl, QRegion::Ellipse);
QRegion corner(0, 0, radius_tl, radius_tl, QRegion::Rectangle);
region = region.subtracted(corner.subtracted(round));
// top right
round = QRegion(width()-2*radius_tr, 0, 2*radius_tr, 2*radius_tr, QRegion::Ellipse);
corner = QRegion(width()-radius_tr, 0, radius_tr, radius_tr, QRegion::Rectangle);
region = region.subtracted(corner.subtracted(round));
// bottom right
round = QRegion(width()-2*radius_br, height()-2*radius_br, 2*radius_br, 2*radius_br, QRegion::Ellipse);
corner = QRegion(width()-radius_br, height()-radius_br, radius_br, radius_br, QRegion::Rectangle);
region = region.subtracted(corner.subtracted(round));
// bottom left
round = QRegion(0, height()-2*radius_bl, 2*radius_bl, 2*radius_bl, QRegion::Ellipse);
corner = QRegion(0, height()-radius_bl, radius_bl, radius_bl, QRegion::Rectangle);
region = region.subtracted(corner.subtracted(round));
setMask(region);
}
Roland ;)
I am new to this great and helpful forum! I solved many problems with solutions here posted. So here is my contribution:
Actually we are programming a login manager for Linux/Unix systems: LINK (http://forum.manjarolinux.org/viewtopic.php?id=104)
We are now in a state, where we are concentrating on the theme management and style. Therefore I needed a function to create a widget with rounded corners. But I wanted to have the ability to give each corner a different radius. I found here some small code examples, but only for adjusting all corners with the same radius. So, I want to fill this gap. Here is my code example, to give a widget rounded corners, with the ability to give each corner a different radius:
void Widget::setRoundedCorners(int radius_tl, int radius_tr, int radius_bl, int radius_br) {
QRegion region(0, 0, width(), height(), QRegion::Rectangle);
// top left
QRegion round (0, 0, 2*radius_tl, 2*radius_tl, QRegion::Ellipse);
QRegion corner(0, 0, radius_tl, radius_tl, QRegion::Rectangle);
region = region.subtracted(corner.subtracted(round));
// top right
round = QRegion(width()-2*radius_tr, 0, 2*radius_tr, 2*radius_tr, QRegion::Ellipse);
corner = QRegion(width()-radius_tr, 0, radius_tr, radius_tr, QRegion::Rectangle);
region = region.subtracted(corner.subtracted(round));
// bottom right
round = QRegion(width()-2*radius_br, height()-2*radius_br, 2*radius_br, 2*radius_br, QRegion::Ellipse);
corner = QRegion(width()-radius_br, height()-radius_br, radius_br, radius_br, QRegion::Rectangle);
region = region.subtracted(corner.subtracted(round));
// bottom left
round = QRegion(0, height()-2*radius_bl, 2*radius_bl, 2*radius_bl, QRegion::Ellipse);
corner = QRegion(0, height()-radius_bl, radius_bl, radius_bl, QRegion::Rectangle);
region = region.subtracted(corner.subtracted(round));
setMask(region);
}
Roland ;)