Qt与Windows 文字旋转兼容

qt绘制rect以左上角为旋转中心,绘制文字是以左下角为旋转中心,

windows绘制rect和文字,都以左上角为旋转中心

为了都能实现坐标旋转,按下面代码处理,撸了一段代码,随意转。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qpainter.h"
#include <qrect.h>

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

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


void MainWindow::paintEvent(QPaintEvent* event)
{
    QPainter painter(this);


    int iFontSize=30;
    QFont font("微软雅黑",iFontSize);
    font.setLetterSpacing(QFont::PercentageSpacing,0);
    font.setLetterSpacing(QFont::AbsoluteSpacing,0);

    QPoint ptCenter(100,100);
    QRect rt(0,0,100,100);
    QString strText("汉字");
    QFontMetrics fm(font);
    //QRect rtText = fm.boundingRect(strText);
    int w=fm.width(strText);
    int h=fm.height();
    QRect rtText(0,0,w,h);

    painter.setFont(font);
    painter.save();
    painter.translate(ptCenter);
    painter.rotate(45);
    painter.fillRect(rt,QBrush(Qt::blue));

    int x=0;
    int y=0;
    //painter.fillRect(x,y,rtText.width(),rtText.height(),QBrush(Qt::green));
    painter.fillRect(rtText,QBrush(Qt::green));
    painter.drawText(x,y+h-iFontSize/3.,"汉字");//文字大小/3为了除掉qt 绘制字体 上下空白间隙
    painter.restore();

    QPen mypen;
    mypen.setWidth(5); 
    mypen.setColor(Qt::black);
    painter.setPen(mypen);
    painter.drawPoint(ptCenter);//旋转参考点

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值