#include "TestLine.h"
TestLine::TestLine():
color_("red"),
lineWidth_(1)
{
}
void TestLine::paint(QPainter *painter)
{
pen_.setWidth(lineWidth_);
pen_.setColor(color_);
painter->setPen(pen_);
painter->drawLine(lineX_1,lineY_1,lineX_2,lineY_2);
}
void TestLine::drawLineDash(int x1, int y1, int x2, int y2)
{
pen_.setStyle(Qt::DashLine);
lineX_1 = x1;
lineY_1 = y1;
lineX_2 = x2;
lineY_2 = y2;
update();
}
void TestLine::drawDotLine(int x1, int y1, int x2, int y2)
{
pen_.setStyle(Qt::DotLine);
lineX_1 = x1;
lineY_1 = y1;
lineX_2 = x2;
lineY_2 = y2;
update();
}
void TestLine::drawLines(int x1, int y1, int x2, int y2)
{
pen_.setStyle(Qt::SolidLine);
lineX_1 = x1;
lineY_1 = y1;
lineX_2 = x2;
lineY_2 = y2;
update();
}
QColor TestLine::readColor()
{
return color_;
}
void TestLine::Color(QColor color)
{
color_ = color;
}
int TestLine::readLineWidth()
{
return lineWidth_;
}
void TestLine::LineWidth(int width)
{
lineWidth_ = width;
}
qml 虚线绘制 多种绘制方式
需积分: 0 42 浏览量
更新于2023-05-19
收藏 13KB ZIP 举报
在QML(Qt Quick)中,虚线的绘制是通过Canvas或者PathElement组件来实现的。本文将深入探讨QML中的几种虚线绘制方法,并提供实际的代码示例。
1. **Canvas绘制虚线**
Canvas是QML中的一个基本元素,它允许我们使用JavaScript进行2D图形绘制。要绘制虚线,我们需要使用`beginPath()`,`moveTo()`,`lineTo()`以及`strokeStyle`属性。以下是一个简单的虚线绘制示例:
```qml
import QtQuick 2.0
Canvas {
id: canvas
width: 300; height: 200
onPaint: {
var ctx = canvas.getContext('2d')
ctx.beginPath()
ctx.strokeStyle = "rgba(255, 0, 0, 0.8)" // 设置线条颜色
ctx.setLineDash([10, 5]) // 设置虚线样式,数组中的数值分别代表实线长度和空白长度
ctx.lineWidth = 2 // 设置线条宽度
ctx.moveTo(50, 50)
ctx.lineTo(250, 150)
ctx.stroke()
}
}
```
2. **PathElement绘制虚线**
如果你想要更高级的矢量图形绘制,可以使用Path和PathElement。PathElement可以定义各种路径元素,包括LineElement,用于绘制直线。同样,我们可以通过`strokeStyle`和`strokeDashPattern`属性来设置虚线:
```qml
import QtQuick 2.0
import QtQuick.Shapes 1.0
Rectangle {
width: 300; height: 200
color: "white"
Shape {
id: shape
anchors.fill: parent
stroke: ShapeStroke {
color: "red"
dashPattern: [10, 5] // 虚线样式
strokeWidth: 2
}
Path {
id: path
PathLine {
from: Qt.point(50, 50)
to: Qt.point(250, 150)
}
}
}
}
```
3. **利用QML的GraphicalEffects创建虚线**
QML的GraphicalEffects模块包含了一些预定义的效果,如DropShadow和Outline,但它们不能直接用于绘制虚线。不过,你可以创建自定义的Effect来实现这一功能。例如,创建一个覆盖在实线上的半透明矩形,使其看起来像虚线。这需要更多的编程技巧和理解QML渲染机制。
4. **使用ShaderEffectSource和ShaderEffect**
进阶的虚线绘制可以借助OpenGL着色器实现。ShaderEffectSource和ShaderEffect组件允许我们编写GLSL着色器代码,创建高度定制的视觉效果。这种方法虽然更复杂,但能实现更多复杂的图形效果。
5. **QtQuick.Controls组件的样式**
如果你正在使用QtQuick.Controls,可以修改样式来创建虚线边框。例如,对于Button或Rectangle,你可以定义一个样式,使用`border`属性和`BorderImage`来模拟虚线效果。
```qml
Rectangle {
width: 100; height: 50
color: "white"
border.color: "black"
border.width: 2
border.style: Border.DashLine // 仅适用于QtQuick.Controls 2.x及以上版本
}
```
QML提供了多种方式来绘制虚线,从简单的Canvas和PathElement到复杂的着色器和自定义效果。根据项目需求和技能水平,你可以选择最适合的方法来实现虚线效果。在实际开发中,考虑性能和可维护性也是至关重要的因素。

拾肆0423
- 粉丝: 252
最新资源
- 微信小程序--二维码生成器.zip
- 微信小程序 代码提示插件.zip
- 《微信小程序入门与实践》一书小程序源代码.zip
- 微信小程序demo,微信小程序开发教程,小程序快速入门,新版SDK DEMO请查看.zip
- 微信小程序签字板.zip
- 微信小程序,小程序商城,商城,springboot框架,vue管理系统,java后台.zip
- 又拍云微信小程序 SDK.zip
- 前端开源微信电商小程序,拼团+砍价+分销.zip
- yii2 ( PHP ) fecmall(fecshop) core code used for ecommerce s
- 微信小程序 Sports News(体育新闻).zip
- 微信小程序自定义组件.zip
- 微信小程序 蓝牙实现(1).zip
- 适用于微信小程序的微信开发者工具 Linux移植版.zip
- We重邮 - 微信小程序(2).zip
- ONE·一个_图文 微信小程序_开源代码.zip