QT 2D绘图代码实例

(1)画刷风格

void TestWidget::paintBrushStyle(QPainter& painter)
{
	list.clear();
	list << "Qt::NoBrush" << "Qt::SolidPattern"	<< "Qt::Dense1Pattern" << "Qt::Dense2Pattern"
			 << "Qt::Dense3Pattern" << "Qt::Dense4Pattern"	<< "Qt::Dense5Pattern"
			 << "Qt::Dense6Pattern" << "Qt::Dense7Pattern" 	<< "Qt::HorPattern"
			 << "Qt::VerPattern" << "Qt::CrossPattern" << "Qt::BDiagPattern"
			 << "Qt::FDiagPattern" << "Qt::DiagCrossPattern";
	QBrush brush;
	QRect rect;
	int x = 10;
	int y = 10;
	for(int i=Qt::NoBrush; i <= Qt::DiagCrossPattern; i++)
	{
		brush.setStyle((Qt::BrushStyle)i);
		painter.setBrush(brush);
		rect.setRect(x, y, w, h);
		painter.drawRect(rect);
		painter.drawText(x, y + h + 15, list.at(i)); 
		if((i+1)%4 == 0) {
			x = 10;
			y += h + h/2;
		}
		else
			x += w + w/2;
	}	
}


(2)画笔风格

void TestWidget::paintPenStyle(QPainter& painter)
{
	list.clear();
	list << "Qt::NoPen" << "Qt::SolidLine" << "Qt::DashLine" << "Qt::DotLine" << "Qt::DashDotLine"
		 << "Qt::DashDotDotLine" << "Qt::CustomDashLine";
	QPen pen;
	pen.setWidth(4);
	int y=10;
	for(int i=Qt::NoPen; i <= Qt::CustomDashLine; i++)
	{
		pen.setStyle((Qt::PenStyle)i);
		if(i==Qt::CustomDashLine)
		{
			 QVector<qreal> dashes;
			 qreal space = 4;

			 dashes << 1 << space << 3 << space << 5 << space
			            << 7 << space ;

			 pen.setDashPattern(dashes); 
		}
		painter.setPen(pen);
		painter.drawLine(10, y, 310, y);
		painter.drawText(320, y+5, list.at(i));
		y += 20;
	}
}


(3)端点风格

void TestWidget::paintPenCapStyle(QPainter& painter)
{
	QPen pen;
	pen.setWidth(20);
	pen.setCapStyle(Qt::SquareCap);
	painter.setPen(pen);
	painter.drawLine(30, 50, 210, 50);
	painter.drawText(250, 55, "Qt::SquareCap");

	pen.setCapStyle(Qt::FlatCap);
	painter.setPen(pen);
	painter.drawLine(30, 100, 210, 100);
	painter.drawText(250, 105, "Qt::FlatCap");
	
	pen.setCapStyle(Qt::RoundCap);
	painter.setPen(pen);
	painter.drawLine(30, 150, 210, 150);
	painter.drawText(250, 155, "Qt::RoundCap");
}


(4)链接风格

void TestWidget::paintPenJoinStyle(QPainter& painter)
{
	list.clear();
	list << "Qt::BevelJoin" << "Qt::MiterJoin" << "Qt::RoundJoin" << "Qt::SvgMiterJoin";
	QVector<Qt::PenJoinStyle> joinStyle;
	joinStyle << Qt::MiterJoin << Qt::BevelJoin << Qt::RoundJoin << Qt::SvgMiterJoin;
	QPointF points[3] = {
		QPointF(10.0, 30.0),
		QPointF(80.0, 70.0),
		QPointF(10.0, 110.0),			
	};
	qreal dx = 150;
	qreal dy = 0;
	QPen pen;
	pen.setWidth(20);
	for(short i=0; i<4; i++)
	{
		painter.translate(dx, dy);
		pen.setJoinStyle(joinStyle[i]);
		painter.setPen(pen);
		painter.drawPolyline(points, 3);
		painter.drawText(0, 150, list[i]);
	}
}


(5)渐变填充

void TestWidget::paintGradient(QPainter& painter)
{
	painter.translate(10, 10);
	QLinearGradient linearGradient(0, 0, 200, 100);
	linearGradient.setColorAt(0, Qt::red);
	linearGradient.setColorAt(0.5, Qt::green);
	linearGradient.setColorAt(1, Qt::blue);
	painter.setBrush(linearGradient);
	painter.drawRect(0, 0, 200, 100);

	painter.translate(0, 150);
	QRadialGradient radialGradient(50, 50, 50, 30, 30);	// cx, cy, radius, fx, fy
	radialGradient.setColorAt(0.2, Qt::cyan);
	radialGradient.setColorAt(0.8, Qt::yellow);
	radialGradient.setColorAt(1, Qt::magenta);
	painter.setBrush(radialGradient);
	painter.drawEllipse(0, 0, 100, 100);
	
	painter.translate(0, 150);
	QConicalGradient conicalGradient(60, 40, 30);			// cx, cy, angle
	conicalGradient.setColorAt(0, Qt::gray);
	conicalGradient.setColorAt(0.4, Qt::darkGreen);
	conicalGradient.setColorAt(0.6, Qt::darkMagenta);
	conicalGradient.setColorAt(1, Qt::darkBlue);
	painter.setBrush(conicalGradient);
	painter.drawEllipse(0, 0, 100, 100);
}


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QT(也称为Qt5)是一种跨平台的C++应用程序开发框架,它可以帮助开发者轻松地创建高质量、可扩展的用户界面和应用程序。QT提供了许多开发工具和类库,使开发者能够更快速地开发功能丰富的应用程序。 QT实例代码通常包含了以下核心概念和组件: 1. 信号与槽机制:QT的信号与槽机制是一种非常强大的事件处理机制。通过将对象之间的信号与槽进行连接,可以实现简单的事件通信,并且可以方便地进行自定义信号的定义和处理。 2. 窗口和界面设计:QT提供了一套易于使用的UI设计工具,如QT Creator,以及许多预定义的UI组件和布局管理器,可以轻松地创建和布局窗口和用户界面。 3. 绘图和定制:QT提供了绘图类和API,可以进行高质量的2D和3D图形绘制。同时,开发者也可以定制UI组件和样式,以满足特定的设计需求。 4. 数据库和网络通信:QT提供了数据库和网络模块,可以方便地进行数据的存储和管理,以及进行网络通信的实现。 以下是一个简单的QT示例代码,用于演示一个基本的窗口和按钮的创建和事件处理: ```cpp #include <QtWidgets> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建一个主窗口 QWidget window; window.setWindowTitle("QT Example"); window.resize(300, 200); // 创建一个按钮 QPushButton btn("Click me", &window); btn.setGeometry(100, 80, 100, 30); // 连接按钮的点击信号与自定义的槽函数 QObject::connect(&btn, &QPushButton::clicked, [&]() { QMessageBox::information(&window, "Message", "Button clicked!"); }); // 显示窗口并运行应用程序 window.show(); return app.exec(); } ``` 以上代码中,我们创建了一个主窗口,并在窗口中添加了一个按钮。通过连接按钮的`clicked`信号与一个匿名的槽函数,当按钮被点击时,将显示一个简单的消息框。 通过QT的开发和实例代码,开发者可以更加便捷地创建功能丰富、交互性强的应用程序,并轻松实现各种定制需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值