我正在开发一个应用程序,我需要使用Painter填充Pixmap的颜色。 Pixmap是矩形类型,有(底边)2个圆角。前2个角是平的/正常的。
我尝试使用Qt的drawRoundedRect()API,但它会使矩形的所有角都变圆。我需要绘制矩形,只有两个圆角和另外两个圆角。
如果有人遇到这种情况,请向我建议解决方案。
由于
答案 0 :(得分:15)
您可以使用QPainterPath:
QPainterPath path;
path.setFillRule( Qt::WindingFill );
path.addRoundedRect( QRect(50,50, 200, 100), 20, 20 );
path.addRect( QRect( 200, 50, 50, 50 ) ); // Top right corner not rounded
path.addRect( QRect( 50, 100, 50, 50 ) ); // Bottom left corner not rounded
painter.drawPath( path.simplified() ); // Only Top left & bottom right corner rounded
答案 1 :(得分:4)
您可以使用样式表(在运行时或加载文件qss)。你可以很容易地做到这一点:
QString str = "bottom-right-radius: 10px; top-right-radius: 0px....";
box->setStylesheet(str);
我认为该框是QLabel内的像素图(label-> setPixmap(...))
OR
将对象名称设置为某个(标签),然后使用
QLabel#name {bottom-right-radius:10px ...}
在加载的样式表中。
检查此网站。它有助于: http://border-radius.com/
答案 2 :(得分:0)
延长Romha Korev的答案。这里是一个只有圆角顶部(左上角,右上角)的盒子的例子。角落中的矩形是根据主矩形计算的!
qreal left = 5;
qreal top = 10;
qreal width = 100;
qreal height = 20;
QRectF rect(left, top, width, height);
QPainterPath path;
path.setFillRule( Qt::WindingFill );
path.addRoundedRect(rect, 5, 5 );
qreal squareSize = height/2;
path.addRect( QRect( left, top+height-squareSize, squareSize, squareSize) ); // Bottom left
path.addRect( QRect( (left+width)-squareSize, top+height-squareSize, squareSize, squareSize) ); // Bottom right
painter->drawPath( path.simplified() ); // Draw box (only rounded at top)