qt画图知识点整理

在paintEvent事件中绘制窗口边框

这里我们需要重写paintEvent方法,具体代码如下:

void paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);  // 反锯齿;
    painter.setBrush(QBrush(Qt::red)); painter.setPen(Qt::transparent); QRect rect = this->rect(); rect.setWidth(rect.width() - 1); rect.setHeight(rect.height() - 1); painter.drawRoundedRect(rect, 15, 15); //也可用QPainterPath 绘制代替 painter.drawRoundedRect(rect, 15, 15); { QPainterPath painterPath; painterPath.addRoundedRect(rect, 15, 15); p.drawPath(painterPath); } QWidget::paintEvent(event); }

效果如下:

这里写图片描述

如果不写painter.setRenderHint(QPainter::Antialiasing);则圆角会出现锯齿,如下图。 
这里写图片描述 
仔细对比上图可以看见圆角曲线有锯齿状。

注意:

(1)在使用这两种方法的时候需要设置窗口的属性。
    this->setAttribute(Qt::WA_TranslucentBackground);//设置窗口背景透明
    this->setWindowFlags(Qt::FramelessWindowHint);   //设置无边框窗口

(2)主窗体加载不了样式时需要在paintEvent事件中加上如下代码。
{
    QStyleOption opt;
    opt.init(this);
    QPainter p(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
    QWidget::paintEvent(event);

}

QT中QPainter的使用及矩形、圆形等常见图形的画法

#include<QApplication> #include <QWidget>  #include <QPainter>  class MyMainWindow:public QWidget {  public:   MyMainWindow(QWidget *parent = 0);  private:   void paintEvent(QPaintEvent*);  QPainter *paint; };

void MyMainWindow::paintEvent(QPaintEvent*)

//paintEvent函数由系统自动调用,用不着我们人为的去调用。 {   paint=new QPainter;  paint->begin(this);  paint->setPen(QPen(Qt::blue,4,Qt::DashLine));//设置画笔形式   paint->setBrush(QBrush(Qt::red,Qt::SolidPattern));//设置画刷形式   paint->drawRect(20,20,160,160);  paint->end(); }

MyMainWindow::MyMainWindow(QWidget*parent):QWidget(parent) {   setGeometry(100,100,200,200); }

int main(int argc,char**argv) {   QApplication a(argc,argv);  MyMainWindow w;   w.show();  return a.exec(); }

 


输出结果:
绘制圆和椭圆
核心代码:
paint->setPen(QPen(Qt::blue,4,Qt::SolidLine));
paint->drawEllipse(20,20,210,160);
第1,2个参数分别表示圆/椭圆距左上角的像素数。第3,4个参数表示圆/椭圆的宽度和高度。更加确切地表述,这个圆或椭圆是在矩形中,这个矩形的左上角的顶点在坐标轴中的位置为(20,20),这个圆或椭圆的中心为这个矩形的中心,以下的都相似!!!
绘制圆角矩形
核心代码:
paint->setPen(QPen(Qt::blue,4,Qt::SolidLine));
paint->drawRoundRect(20,20,210,160,50,50);
最后两个参数决定角的圆度。它可以为0到99之间的任意值(99代表最圆)。
绘制扇形图
核心代码:
paint->setPen(QPen(Qt::green,4,Qt::SolidLine));
paint->drawPie(20,20,210,160,0,500);
前四个参数定义圆(与drawEllipse()函数相同)。后两个参数定义圆的样式。0为起始角度(实际单位为1/16度),500为扇形所展开的角度(单位也为1/16度)。
绘制弦
核心代码:
paint->setPen(QPen(Qt::green,4,Qt::SolidLine));
paint->drawChord(20,20,210,160,500,1000);
drawChord()函数与drawPie()函数的参数完全相同。
绘制圆弧
核心代码:
paint->setPen(QPen(Qt::green,4,Qt::SolidLine));
paint->drawArc(20,20,210,160,500,1000);
drawArc()函数与drawPie()函数的参数完全相同。
绘制贝塞尔曲线
核心代码:
paint->setPen(QPen(Qt::green,4,Qt::SolidLine));
paint->drawQuadBezier(QPointArray(QRect(20,20,210,160)));
传递给该函数的唯一一个参数表示一个矩形,在其中创建贝塞尔曲线(其他参数为缺省参数,可以省略)。

你可能感兴趣的:(qt)