if(roleDataMap.contains(Qt::DisplayRole) && roleDataMap[Qt::DisplayRole].toString() == "TX") { QPointF pos = mapToScene(event->pos()); QGraphicsItem* item = new QGraphicsRectItem(pos.x(), pos.y(), 32, 32); item->setBrush(Qt::red); scene()->addItem(item); event->acceptProposedAction(); } 显示maptoscene,setBrush,Scen为未定义标识符
时间: 2024-01-18 09:02:04 浏览: 99
五、Qt Model与View.zip
这段代码中的`mapToScene`、`setBrush`和`scene`都是`QGraphicsItem`类的成员函数,需要在`QGraphicsItem`的子类中使用。如果您想在这段代码中使用这些函数,需要将其放置在`QGraphicsItem`的子类中,并确保包含了相应的头文件。例如,您可以这样重构代码:
```cpp
#include <QGraphicsRectItem>
#include <QMouseEvent>
#include <QGraphicsScene>
class MyGraphicsItem : public QGraphicsRectItem
{
public:
using QGraphicsRectItem::QGraphicsRectItem;
protected:
void mousePressEvent(QGraphicsSceneMouseEvent* event) override
{
QMap<int, QVariant> roleDataMap = event->mimeData()->retrieveData("application/x-qabstractitemmodeldatalist").value<QVariantList>().at(0).value<QVariantMap>();
if (roleDataMap.contains(Qt::DisplayRole) && roleDataMap[Qt::DisplayRole].toString() == "TX") {
QPointF pos = mapToScene(event->pos());
QGraphicsItem* item = new QGraphicsRectItem(pos.x(), pos.y(), 32, 32);
item->setBrush(Qt::red);
scene()->addItem(item);
event->acceptProposedAction();
}
}
};
```
在新的`MyGraphicsItem`类中,我们重载了`mousePressEvent`函数,以便捕获鼠标事件并执行相应的操作。同时,我们还包含了`QGraphicsRectItem`的构造函数,并使用`using`语句将其继承过来,以便在构造函数中使用。这样,您就可以在`MyGraphicsItem`的构造函数中进行自定义设置,如下所示:
```cpp
MyGraphicsItem* item = new MyGraphicsItem(0, 0, 32, 32);
```
请注意,这里的`mapToScene`、`setBrush`和`scene`都是从`QGraphicsItem`类继承而来的成员函数。如果您在使用时出现未定义标识符的错误,可能是因为您没有包含相应的头文件或没有正确使用命名空间。请检查您的代码并进行必要的更改。
阅读全文