D:\QT5.9.0\Project\test1\test14\mywidget.h:48: error: call of overloaded 'qDegreesToRadians(int&)' is ambiguous qreal y2 = 150 - (i % 10 == 0 ? 140 : 135) * qSin(qDegreesToRadians(i)); ^
时间: 2024-02-10 14:13:16 浏览: 137
该错误提示是因为qDegreesToRadians函数的参数类型不明确,有多种可能的匹配类型。您可以尝试将该函数的参数类型更改为double类型,或将参数强制转换为double类型,以明确要调用的函数版本。例如,您可以将代码修改为以下形式:
```
qreal y2 = 150 - (i % 10 == 0 ? 140 : 135) * qSin(qDegreesToRadians(static_cast<double>(i)));
```
或者将函数参数类型更改为double类型:
```
qreal qDegreesToRadians(double d);
```
这样就可以避免函数调用的二义性问题。
相关问题
D:\QT5.9.0\Project\test1\test15\clockwidget.h:82: error: no matching function for call to 'QPainter::drawConvexPolygon(QPolygon&, int)' painter.drawConvexPolygon(m_hourHand, 3); ^
这个错误是因为 `QPainter::drawConvexPolygon()` 函数的第二个参数类型错误导致的。在 Qt 5.9 中,`drawConvexPolygon()` 函数的第二个参数应该是 `int` 类型的,表示多边形中点的数量(也就是多边形由几个点组成)。但是在您的代码中,第二个参数使用了 `3`,这是错误的。
要解决这个问题,您需要将 `drawConvexPolygon()` 函数的第二个参数改为多边形的点数。在您的代码中,`m_hourHand`、`m_minuteHand` 和 `m_secondHand` 都是三个点组成的多边形,因此应该将第二个参数改为 `3`,如下所示:
```c++
painter.drawConvexPolygon(m_hourHand, 3);
painter.drawConvexPolygon(m_minuteHand, 3);
painter.drawConvexPolygon(m_secondHand, 3);
```
这样就可以解决这个编译错误了。
D:\QT5.9.0\Project\test1\test15\clockwidget.h:34: error: no matching function for call to 'ClockWidget::connect(QTimer*&, void (QTimer::*)(QTimer::QPrivateSignal), ClockWidget*, <unresolved overloaded function type>)' connect(timer, &QTimer::timeout, this, &ClockWidget::update); ^
这个错误提示和之前的提示类似,也是因为 `connect` 函数无法确定如何匹配 `&ClockWidget::update` 这个槽函数的参数类型,进而导致编译失败。
根据您提供的错误提示,我猜测您在 `ClockWidget` 类中声明了一个名为 `update` 的成员函数,这与 `QWidget` 类中的 `update` 函数重名了。为了解决这个问题,您可以将 `ClockWidget` 类中的 `update` 成员函数重命名为其他名称。
例如,将 `update` 重命名为 `refresh`:
```c++
#ifndef CLOCKWIDGET_H
#define CLOCKWIDGET_H
#include <QWidget>
#include <QTimer>
class ClockWidget : public QWidget {
Q_OBJECT // 必须添加的宏声明
public:
ClockWidget(QWidget* parent = nullptr);
protected slots:
void refresh(); // 将 update 重命名为 refresh
private:
QTimer* m_timer;
};
#endif // CLOCKWIDGET_H
```
在实现时钟指针随鼠标移动而旋转的功能时,您需要在 `ClockWidget` 类中的 `refresh` 函数中重新计算指针的旋转角度,并调用 `update` 函数触发窗口重绘。具体实现方法可以参考我之前给出的示例代码。
阅读全文