QT 基本图形绘制

本文介绍了QT中的图形绘制,包括使用QPainter进行直线、矩形、椭圆、弧线、扇形、多边形及路径的绘制,以及设置画笔、画刷属性,实现填充和擦除操作。
摘要由CSDN通过智能技术生成
1. 绘制图形
[cpp]  view plain  copy
  1. protected:  
  2.     void paintEvent(QPaintEvent *);  
  3.   
  4. void Widget::paintEvent((QPaintEvent *event)  
  5. {  
  6.     QPainter painter(this); //this为绘图设备,即表明在该部件上进行绘制  
  7.     painter.drawLine(QPaint(0, 0), QPaint(100, 100));  
  8. }  
QPainter painter(this); // 会立即开始在设备上绘制,自动调用begin()函数,然后析构函数中调用end()函数结束绘制。
QPainter painter;// 不带参数时,可以在后面调用QPainter::begin(QPaintDevice *device)来指定绘制设置,然后用完再调用end()函数。

等价于
[cpp]  view plain  copy
  1. void Widget::paintEvent((QPaintEvent *event)  
  2. {  
  3.     QPainter painter;  
  4.     painter.begin(this);  
  5.     painter.drawLine(QPaint(0, 0), QPaint(100, 100));  
  6.     painter.end();  
  7. }  
2. 使用画刷
画刷可以设置颜色和填充模式
[cpp]  view plain  copy
  1. QBrush brush(QColor(0,0,255), Qt::Dense4Pattern);  
  2. painter.setBrush(brush);  
3. 使用画笔
[cpp]  view plain  copy
  1. //参数为:画刷,线宽,画笔风格,画笔端点,画笔连接风格  
  2. QPen pen(Qt::green, 5, Qt::DotLine, Qt::RoundCap, Qt::RoundJoin);  
  3. painter.setPen(pen);  
4. 绘制矩形
[cpp]  view plain  copy
  1. painter.drawRect(0, 0, 100, 80); //x,y,w,h  
5. 绘制椭圆(圆)
[cpp]  view plain  copy
  1. painter.drawEllipse(0, 0, 100, 80); //x,y,w,h  
6. 绘制圆弧
[cpp]  view plain  copy
  1. QRectF rect(70.0, 40.0, 80.0, 60.0); //x,y,w,h  
  2. int startAngle = 30 * 16; //值为,实际角度 * 16  
  3. int spanAngle = 120 * 16;  
  4.   
  5. //三个参数:rect表示弧线所在的矩形,startAngle起始角度,spanAngle跨越角度  
  6. painter.drawArc(rect, startAngle, spanAngle);  

7. 绘制扇形
[cpp]  view plain  copy
  1. QRectF rect_top(20.0, 20.0, 100.0, 100.0);  
  2.   
  3. // 扇形起始角度  
  4. int startAngle = 0 * 16;  
  5. // 扇形覆盖范围(120度的)  
  6. int spanAngle = 120 * 16;  
  7. painter.drawPie(rect_top, startAngle, spanAngle);  
8. 绘制多边形
[cpp]  view plain  copy
  1. QPolygon pts;  
  2. pts.setPoints(3, -1,0, 1,0, 0,39); //第一个参数表示3个点,后面是三个点坐标  
  3. painter.drawConvexPolygon(pts);  
9. 绘制路径
[cpp]  view plain  copy
  1. QPainterPath path;  
  2. path.addEllipse(-4, -4, 8, 8);//添加一个圆  
  3. path.addRect(-5, -5, 10, 10); //添加一个矩形  
  4. painter.drawPath(path);  
在填充路径时要用到填充规则,这里一共有两个填充规则
path.setFillRule(Qt::OddEventFil);//奇偶填充规则
如果要判断一个点是否在图形中,可以从该点向图形外引一条水平线,如果该水平线与图形的交点人个数为奇数,那么该点在在图形中。
只填充在图形内的点
path.setFillRule(Qt::WindingFill); //非零弯曲规则
如果要判断一个点是否在图形中,可以从该点向图形外引一条水平线,如果该水平线与图形的边线相交,这个边线是顺时针绘制的,就记为1,是逆时针绘制的就记为-1,然后将所有数值相加,结果不为0,那么该点就在图形中。


10. 绘制圆环
根据以上的填充规则,可以得到绘制圆环的一个方便的方法
[cpp]  view plain  copy
  1. QPainterPath path;  
  2. path.addEllipse(0,0,100,100);  
  3. path.addEllipse(25,25,50,50);  
  4. painter.setBrush(Qt::blue);  
  5. path.setFillRule(Qt::OddEventFil);//使用奇偶填充,刚好可以只显示圆环  
  6. painter.drawPath(path);  
11. 填充与擦除
[cpp]  view plain  copy
  1. //使用画刷填充一个矩形区域  
  2. painter.fillRect(QRect(10,100,150,20), QBrush(Qt::darkYellow));  
  3.   
  4. //擦除一个矩形区域的内容  
  5. painter.eraserRect(QRect(50,0,50,120));  

Qt是一个强大的跨平台应用程序开发框架,其中包括对串口通讯的支持。在Qt中,你可以使用QSerialPort模块来进行串口数据的接收和发送。图形绘制方面,Qt提供了QGraphicsView和QGraphicsScene等组件,用于创建直观的界面来显示串口数据。 以下是使用Qt进行串口通讯和图形绘制基本步骤: 1. **设置串口连接**: - 创建QSerialPort对象并打开串口。 ```cpp QSerialPort serialPort; if (!serialPort.open(QIODevice::ReadWrite)) { qCritical() << "Failed to open serial port: " << serialPort.errorString(); } ``` 2. **数据接收与处理**: - 定义一个槽函数处理接收到的数据,并可能将其转换成图形可显示的形式(例如,电压、温度等数值)。 ```cpp void handleDataReceived(const QByteArray &data) { // 处理接收到的数据,并将其添加到图形模型中 } serialPort.readyRead.connect(handleDataReceived); ``` 3. **图形绘制**: - 使用QGraphicsScene和QGraphicsView创建一个可视化的区域。可以使用QGraphicsLineItem、QGraphicsPixmapItem或其他图形元素来表示数据点或趋势线。 ```cpp QGraphicsScene scene; QGraphicsView view.setScene(&scene); QGraphicsRectItem plotItem = new QGraphicsRectItem(0, 0, width, height, &scene); ``` - 根据数据更新图形,如在plotItem的位置上画线或点。 4. **定时刷新和数据更新**: - 可能需要设置一个定时器定期获取新数据并更新图形。 ```cpp QTimer timer; timer.singleShot(0, []() { handleNewData(); timer.start(interval); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值