这里的前提是使用qt的qml开发,因此请更换使用的开发语言
时间: 2024-03-17 09:40:24 浏览: 159
QT应用内切换语言
好的,如果使用 Qt C++ 进行开发,可以将代码修改为以下形式:
```cpp
#include <QApplication>
#include <QGraphicsRectItem>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsSceneMouseEvent>
#include <QMenu>
#include <QAction>
class MyRect : public QGraphicsRectItem
{
public:
MyRect(qreal x, qreal y, qreal w, qreal h) : QGraphicsRectItem(x, y, w, h)
{
setFlag(QGraphicsItem::ItemIsMovable);
setFlag(QGraphicsItem::ItemIsSelectable);
}
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event) override
{
if (event->button() == Qt::RightButton) {
QMenu menu;
QAction *deleteAction = menu.addAction("Delete");
QAction *action = menu.exec(event->screenPos());
if (action == deleteAction) {
scene()->removeItem(this);
}
}
}
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override
{
scene()->update();
}
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
{
Q_UNUSED(widget)
painter->setPen(QPen(Qt::black, 5));
painter->drawRect(rect());
}
};
class MyScene : public QGraphicsScene
{
public:
MyScene(QObject *parent = nullptr) : QGraphicsScene(parent) {}
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event) override
{
MyRect *rect = new MyRect(event->scenePos().x(), event->scenePos().y(), 100, 100);
addItem(rect);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsScene *scene = new MyScene();
QGraphicsView *view = new QGraphicsView(scene);
view->setRenderHint(QPainter::Antialiasing);
view->setWindowTitle("My Graphics View");
view->show();
return a.exec();
}
```
这份代码使用 C++ 语言编写,将 `MyRect` 类与 `MyScene` 类分别继承自 `QGraphicsRectItem` 和 `QGraphicsScene` 类,并实现了对应的事件处理函数 `mousePressEvent`、`mouseMoveEvent` 和 `paint`。此外,`MyScene` 类中还实现了 `mousePressEvent` 函数,用于在鼠标点击时添加新的 `MyRect` 对象。最后,主函数中创建了 `QApplication`、`QGraphicsScene` 和 `QGraphicsView` 对象,并将其显示在窗口中。
阅读全文