2024年3月13日发(作者:)

QMenu menu;

QAction *edit_action = ion("编辑开关");

QAction *selected_action = (event->screenPos());

if(selected_action == edit_action){

if(text_interaction){

text_item->setTextInteractionFlags(Qt::NoTextInteraction);

text_interaction = false;

reset_text_rect();

update(); //每次编辑完都更新

}else{

text_item->setTextInteractionFlags(Qt::TextEditorInteraction);

text_interaction = true;

}

}

}

void MyItem1::reset_text_rect(void)

{

text_rect = text_item->boundingRect();

}

然后是MyScene类

#ifndef MYSCENE_H

#define MYSCENE_H

#include

#include

#include

#include

class MyScene : public QGraphicsScene

{

Q_OBJECT

public:

explicit MyScene(QObject *parent = 0);

protected:

void keyPressEvent(QKeyEvent *event);

void mousePressEvent(QGraphicsSceneMouseEvent *event);

signals:

public slots:

};

#endif // MYSCENE_H

此类的实现

#include "myscene.h"

MyScene::MyScene(QObject *parent):

QGraphicsScene(parent)

{

clearFocus();

}

void MyScene::keyPressEvent(QKeyEvent *event)

{

QGraphicsScene::keyPressEvent(event);

}

void MyScene::mousePressEvent(QGraphicsSceneMouseEvent *event)

{

QGraphicsScene::mousePressEvent(event);

}

然后是MyView类。类的定义

#ifndef MYVIEW_H

#define MYVIEW_H

#include

class MyView : public QGraphicsView

{

Q_OBJECT

public:

explicit MyView(QWidget *parent = 0);

protected:

void keyPressEvent(QKeyEvent *event);

void mousePressEvent(QMouseEvent *event);

void paintEvent(QPaintEvent * event);

void mouseMoveEvent(QMouseEvent *event);

signals:

public slots:

};

#endif // MYVIEW_H

然后是MyView类的实现

#include "myview.h"

MyView::MyView(QWidget *parent):

QGraphicsView(parent)

{

}

void MyView::keyPressEvent(QKeyEvent *event)

{

QGraphicsView::keyPressEvent(event);

}

void MyView::mousePressEvent(QMouseEvent *event)

{

QGraphicsView::mousePressEvent(event);

}

void MyView::paintEvent(QPaintEvent *event)

{

QGraphicsView::paintEvent(event);

}

void MyView::mouseMoveEvent(QMouseEvent *event)

{

QGraphicsView::mouseMoveEvent(event);

}

然后是主函数

#include

#include "myview.h"

#include "myscene.h"

#include "myitem1.h"

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

MyItem1 *node = new MyItem1;

MyScene *scene = new MyScene;

scene->addItem(node);

MyView *view = new MyView;

view->setScene(scene);

view->setFixedSize(600,400);

view->show();

return ();

}