Sex*_*ast 20 c++ qt rectangles rounded-corners qpainter
我想画一个带圆角的矩形(所有4个角的边框半径相同),特定的颜色填充整个矩形,还有一个单独的边框颜色(比如边框宽1 px).
从我的观察,Qt提供了三种方法- fillRect和drawRect和drawRoundedRect.我试过了,他们不像我想的那样工作.没有像这样的方法fillRoundedRect.这意味着我可以绘制一个圆角矩形,但它不会填充我想要的颜色.
我该怎么做?而且,我读到由于一些混叠问题,角落经常被渲染为不相等.如何将它设置为全部四个相等?会painter.setRenderHint(QPainter::Antialiasing)满足吗?或者我还要做其他事吗?
dte*_*ech 48
您可以创建一个QPainterPath,向其添加圆角矩形,然后填充并描边:
QPainter p(this);
p.setRenderHint(QPainter::Antialiasing);
QPainterPath path;
path.addRoundedRect(QRectF(10, 10, 100, 50), 10, 10);
QPen pen(Qt::black, 10);
p.setPen(pen);
p.fillPath(path, Qt::red);
p.drawPath(path);
Run Code Online (Sandbox Code Playgroud)
请注意,即使使用抗锯齿功能,1 px边框也可能永远不会真正好看,特别是在低DPI桌面显示器上,在高DPI移动设备上,它几乎不可见.

如果您创建矩形QRectF(9.5, 9.5, 100, 50),因为它将使用1 px抗锯齿边框看起来更好,因为它将"捕捉"右侧像素:
