【问题标题】:QPainter drawRect to existing image draws rounded edges instead of sharp edges. How to draw sharp edges?QPainter drawRect 对现有图像绘制圆边而不是锐边。如何画出锋利的边缘?
【发布时间】:2021-08-19 21:06:13
【问题描述】:

我的目标是在图像上绘制图形并保存到文件中。在这个简化的示例中,我为 QPainter 准备了一个图像,然后通过 drawRect 在现有图像上绘制一个矩形并保存到一个文件中。结果图像显示组合图像,但矩形显示圆角边缘而不是锐边。如何解决?感谢您的帮助。

include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QPainter>
#include <QImage>
#include <QPen>
void paint_Object(QPainter *painter)
{
    QPen pen;
    pen.setWidth(40);
    pen.setColor(Qt::red);
    QRect rect;

    painter->setPen(pen);
    rect.setTopLeft(QPoint(100,100));
    rect.setWidth(100);
    rect.setHeight(200);
    painter->drawRect(rect);
}

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QString filename_in = "C:/Users/seany/VideoAd/temp/test.png";
    QString filename_out = "C:/Users/seany/VideoAd/temp/test_out.png";

    //Setup initial
    QImage test_image(filename_in);

    //Setup Painter with initial Image
    QPainter painter(&test_image);

    //Paint an overlaid image onto initial image
    paint_Object(&painter);

    //Write resultant image to file
    test_image.save(filename_out);
}

MainWindow::~MainWindow()
{
    delete ui;
}

【问题讨论】:

    标签: qt qpainter


    【解决方案1】:

    QPen 连接样式的默认值为Qt::BevelJoin。这就是它即将到来的圆边。将pen.setJoinStyle(Qt::MiterJoin) 用于扩展或锐利边缘。 更多信息请阅读this

    【讨论】:

    • 像魅力一样工作。谢谢!
    • @seany 如果该解决方案有效,请接受或投票,以便其他人可以轻松找到解决同一问题的有效解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    相关资源
    最近更新 更多