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 ();
}


发布评论