QPoint作为map容器的键值,QPushbutton 作为map容器的实值。该怎么在Widget 重载QPoint 类的比较运算符
时间: 2024-03-05 16:53:58 浏览: 79
首先,重载 QPoint 类的比较运算符需要在 QPoint 类的定义外进行,因为 QPoint 是Qt的内置类,不应该修改其定义。您可以在 Widget 类中定义一个比较函数,然后在函数中使用 QPoint 类的比较运算符。
假设您定义了一个名为 `widgetMap` 的 QMap 容器,其中键值类型为 QPoint,实值类型为 QPushbutton。您可以在 Widget 类中定义一个比较函数,如下所示:
```cpp
bool Widget::comparePoints(const QPoint &p1, const QPoint &p2) const {
if (p1.x() < p2.x()) {
return true;
}
if (p1.x() > p2.x()) {
return false;
}
return p1.y() < p2.y();
}
```
在上述函数中,我们通过比较 QPoint 的 x 和 y 坐标来确定它们的大小关系。然后,您可以将这个比较函数传递给 QMap 容器的构造函数,如下所示:
```cpp
QMap<QPoint, QPushbutton*, decltype(&Widget::comparePoints)> widgetMap(&Widget::comparePoints);
```
在上述代码中,我们将 `&Widget::comparePoints` 作为 QMap 构造函数的第三个参数,以指定使用我们自定义的比较函数来比较 QPoint 对象。这样,您就可以使用 QPoint 对象作为 QMap 容器的键值,QPushbutton 对象作为实值了。
阅读全文