测试环境:win10、Qt Creator 4.11.1、5.14.2版本SDK
当使用QPainter绘制圆角矩形时,发现圆角不平滑:
示例代码:
sawtooth.h
#ifndef SAWTOOTH_H
#define SAWTOOTH_H
#include <QWidget>
class Sawtooth : public QWidget
{
Q_OBJECT
public:
explicit Sawtooth(QWidget *parent = nullptr);
signals:
protected:
void paintEvent(QPaintEvent *event) override;
};
#endif // SAWTOOTH_H
sawtooth.cpp
#include "sawtooth.h"
#include <QPainter>
Sawtooth::Sawtooth(QWidget *parent) : QWidget(parent)
{
resize(100, 100);
}
void Sawtooth::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
// painter.setRenderHint(QPainter::Antialiasing); //解决绘图有锯齿
painter.setPen(QColor(0, 0, 255));
QRect rect(10, 10, 22, 22);
painter.drawRoundedRect(rect, 4, 4);
}
main.cpp
#include <QApplication>
#include "sawtooth.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Sawtooth w;
w.show();
return a.exec();
}
分析:
在绘图时,容易产生锯齿,很幸运QPainter考虑绘图有锯齿问题。
解决办法:
painter.setRenderHint(QPainter::Antialiasing); //解决绘图有锯齿
效果如下: