如何在qt creator中画一颗心
How to draw a heart in qt creator
我需要在qt creator上画一颗心,但是我在使用drawArc时遇到了问题。我知道我以错误的方式使用它,但我不知道该怎么做。请帮忙?这就是用 c++ 画心的代码。
HeartDrawableStrategy::draw(QPainter &painter, QRect &rect, double xRatio, double yRatio, QPoint &pos, int size,)
{
//Define the heart points
int newPointX = pos.x();
int newPointY = pos.y()+size/4;
QPoint leftPoint = QPoint(newPointX*xRatio, newPointY*yRatio);
newPointX = pos.x()+size/2;
newPointY = pos.y() + size;
QPoint bottomCenterPoint = QPoint(newPointX*xRatio, newPointY*yRatio);
newPointX = pos.x() + size;
newPointY = pos.y() + size/4;
QPoint rightPoint = QPoint(newPointX*xRatio, newPointY*yRatio);
newPointX = pos.x() + size/2;
newPointY = pos.y() + size/4;
QPoint middlePoint = QPoint(newPointX*xRatio, newPointY*yRatio);
newPointX = pos.x() + size/4;
newPointY = pos.y();
QPoint topLeftPoint = QPoint(newPointX*xRatio, newPointY*yRatio);
newPointX = pos.x() + (size*3/4);
newPointY = pos.y();
QPoint topRightPoint = QPoint(newPointX*xRatio, newPointY*yRatio);
//Draw the heart
QLine line = QLine(leftPoint, bottomCenterPoint);
painter.drawLine(line);
line = QLine(bottomCenterPoint, rightPoint);
painter.drawLine(line);
line = QLine(leftPoint, middlePoint);
painter.drawArc(line);
line = QLine(middlePoint, rightPoint);
painter.drawArc(line);
}
您当前创建了一个 QLine,并尝试用它创建一个圆弧。这不行。
根据 QT Doc
您需要 X 方向的起点、Y 方向的起点、宽度、高度、起始角度和跨度角度。
像那样:
painter.drawArc(x, y, width, height, startAngle, spanAngle);
X 和 Y 是左上角,startAngle 和 spanAngle 必须指定为 1/16 度,即一个完整的圆等于 5760 (16 * 360)。角度的正值表示逆时针方向,负值表示顺时针方向。零度在 3 点钟位置。
下面的代码:
painter.drawArc(10, 20, 80, 60, (30 * 16), (120 * 16);
会画这个:
我需要在qt creator上画一颗心,但是我在使用drawArc时遇到了问题。我知道我以错误的方式使用它,但我不知道该怎么做。请帮忙?这就是用 c++ 画心的代码。
HeartDrawableStrategy::draw(QPainter &painter, QRect &rect, double xRatio, double yRatio, QPoint &pos, int size,)
{
//Define the heart points
int newPointX = pos.x();
int newPointY = pos.y()+size/4;
QPoint leftPoint = QPoint(newPointX*xRatio, newPointY*yRatio);
newPointX = pos.x()+size/2;
newPointY = pos.y() + size;
QPoint bottomCenterPoint = QPoint(newPointX*xRatio, newPointY*yRatio);
newPointX = pos.x() + size;
newPointY = pos.y() + size/4;
QPoint rightPoint = QPoint(newPointX*xRatio, newPointY*yRatio);
newPointX = pos.x() + size/2;
newPointY = pos.y() + size/4;
QPoint middlePoint = QPoint(newPointX*xRatio, newPointY*yRatio);
newPointX = pos.x() + size/4;
newPointY = pos.y();
QPoint topLeftPoint = QPoint(newPointX*xRatio, newPointY*yRatio);
newPointX = pos.x() + (size*3/4);
newPointY = pos.y();
QPoint topRightPoint = QPoint(newPointX*xRatio, newPointY*yRatio);
//Draw the heart
QLine line = QLine(leftPoint, bottomCenterPoint);
painter.drawLine(line);
line = QLine(bottomCenterPoint, rightPoint);
painter.drawLine(line);
line = QLine(leftPoint, middlePoint);
painter.drawArc(line);
line = QLine(middlePoint, rightPoint);
painter.drawArc(line);
}
您当前创建了一个 QLine,并尝试用它创建一个圆弧。这不行。
根据 QT Doc 您需要 X 方向的起点、Y 方向的起点、宽度、高度、起始角度和跨度角度。 像那样:
painter.drawArc(x, y, width, height, startAngle, spanAngle);
X 和 Y 是左上角,startAngle 和 spanAngle 必须指定为 1/16 度,即一个完整的圆等于 5760 (16 * 360)。角度的正值表示逆时针方向,负值表示顺时针方向。零度在 3 点钟位置。
下面的代码:
painter.drawArc(10, 20, 80, 60, (30 * 16), (120 * 16);
会画这个: