【关于DrawLine' : ambiguous call to overloaded function解决办法】

在绘图时遇到这个问题:

//平滑的曲线

CWindowDC dc(this);//this为当前窗口指针
HDC hdc=dc.GetSafeHdc();
using namespace Gdiplus;
Graphics graphics(hdc);

graphics.SetSmoothingMode(SmoothingModeHighQuality);//设置为平滑曲线

Pen newPen(Color(0,200,255),5);
graphics.DrawLine(&newPen,
x1,y1, x2, y2);//问题


当x1,y1,x2,y2都为double时,是显示错误DrawLine' : ambiguous call to overloaded function

原因是此函数有有多个重载版本,在没有显示数据类型时,系统不知道调用哪一种类型,参数可以转成float或者int,但转成哪个编译器不知道如何选择,这个时候你可以强转一下解决问题,graphics.DrawLine(&newPen, (int)x1,y1, x2, y2);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据您提供的代码,可以看出ScanLine类的构造函数和DDALine函数定义写在了同一个函数体中,这是不合法的语法,应该将它们分别写在ScanLine类的定义和实现文件中。下面是一个修正后的示例: ScanLine.h: ```c++ #ifndef SCANLINE_H #define SCANLINE_H #include <QPainter> class ScanLine { public: ScanLine(); void DDALine(QPainter* painter); void MidLine(QPainter* painter); void Bresenham(QPainter* painter); }; #endif // SCANLINE_H ``` ScanLine.cpp: ```c++ #include "ScanLine.h" ScanLine::ScanLine() { // 构造函数的代码 } void ScanLine::DDALine(QPainter* painter) { // 绘制直线的代码 } void ScanLine::MidLine(QPainter* painter) { // 绘制直线的代码 } void ScanLine::Bresenham(QPainter* painter) { // 绘制直线的代码 } ``` 需要注意的是,为了在主窗口的paintEvent事件中调用ScanLine类的方法,您需要在ScanLine类的函数定义中将QPainter指针作为参数传递进来。例如: ```c++ void ScanLine::DDALine(QPainter* painter) { painter->drawLine(QPointF(0, 0), QPointF(100, 100)); } ``` 这样,在主窗口中调用ScanLine类的方法时,就可以将QPainter指针作为参数传递进去: ```c++ void MainWindow::paintEvent(QPaintEvent *event) { QPainter painter(this); if (menunum == 1) { ScanLine line; line.DDALine(&painter); } else if (menunum == 2) { ScanLine line; line.MidLine(&painter); } else if (menunum == 3) { ScanLine line; line.Bresenham(&painter); } } ``` 希望这能帮助您解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值