2013-03-08 94 views
5

我正在研究一个应用程序,我需要使用Painter填充Pixmap的颜色。 Pixmap是矩形类型(底边)2个圆角。顶部2个角落是平坦的/正常的。在Qt中只有两个角落的绘制矩形

我试着使用Qt的drawRoundedRect()API,但它使矩形的所有角都圆了。我需要绘制矩形只有两个角落圆角和其他两个平坦。

如果有人遇到这种情况,请给我解决方案。

感谢

+0

您是否发现任何答案是否正确? – darkgaze 2017-08-29 15:16:12

回答

14

您可以使用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 
+0

非常感谢您的回答。它工作正常。 – user2111197 2013-03-08 12:23:42

+0

它也帮助我,谢谢! – netawater 2013-06-02 09:07:36

+1

@ user2111197如果它解决了您的问题,您应该将其标记为接受的答案 – 2014-09-16 13:24:00

3

您可以使用样式表(在运行时或加载文件QSS)。你可以设法做到这一点很容易:

QString str = "bottom-right-radius: 10px; top-right-radius: 0px...."; 
box->setStylesheet(str); 

我猜想框是QLabel内的像素图(标签> setPixmap(...))

OR

设置对象名称的东西(标签),然后用

QLabel#{名右下半径:10px的...}

在加载样式表。

检查这个站点。它有助于: http://border-radius.com/

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)