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); ^
时间: 2024-04-06 14:31:44 浏览: 93
这个错误提示是因为 `drawConvexPolygon()` 函数的第二个参数应该是多边形顶点的数量,而不是固定的数字 `3`。因此,你需要将 `drawConvexPolygon()` 函数的第二个参数改成多边形顶点的数量,即 `m_hourHand.size()`,`m_minuteHand.size()` 和 `m_secondHand.size()`,如下所示:
```c++
painter.drawConvexPolygon(m_hourHand, m_hourHand.size());
painter.drawConvexPolygon(m_minuteHand, m_minuteHand.size());
painter.drawConvexPolygon(m_secondHand, m_secondHand.size());
```
这样就可以解决编译错误了。希望这可以帮助到你,如果你还有其他问题,请随时问我。
相关问题
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` 函数触发窗口重绘。具体实现方法可以参考我之前给出的示例代码。
D:\QT5.9.0\Project\test1\test15\clockwidget.h:33: 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` 类中添加一个 `Q_OBJECT` 宏声明,以让 Qt 的元对象系统为该类生成必要的信息。
请注意,`Q_OBJECT` 宏必须出现在类的第一个访问说明符之前,例如:
```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 update();
private:
QTimer* m_timer;
};
#endif // CLOCKWIDGET_H
```
如果还有其他问题,请告诉我。
阅读全文