Skip to content

Commit

Permalink
Text的完成
Browse files Browse the repository at this point in the history
  • Loading branch information
pprp committed Jul 11, 2018
1 parent 00b437f commit 82b333a
Show file tree
Hide file tree
Showing 31 changed files with 2,264 additions and 584 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.0.0, 2018-07-11T20:18:23. -->
<!-- Written by QtCreator 3.0.0, 2018-07-11T22:03:08. -->
<qtcreator>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
Expand Down
1,012 changes: 751 additions & 261 deletions FourthOne/vector-editor_changed/vector-editor_changed/src/Makefile.Debug

Large diffs are not rendered by default.

1,014 changes: 752 additions & 262 deletions FourthOne/vector-editor_changed/vector-editor_changed/src/Makefile.Release

Large diffs are not rendered by default.

121 changes: 121 additions & 0 deletions FourthOne/vector-editor_changed/vector-editor_changed/src/TextItem.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
#include "TextItem.h"
#include <QFont>
#include <QPainter>
#include <QCursor>
#include <QKeyEvent>
#include <QGraphicsSceneHoverEvent>
#include <QGraphicsSceneContextMenuEvent>
#include <QMenu>
#include <QTextBlockFormat>

TextItem::TextItem(QObject *parent) :
QObject(parent)
{
setFlag(QGraphicsItem::ItemIsFocusable);
setFlag(QGraphicsItem::ItemIsMovable);

QTextBlockFormat format;
format.setAlignment(Qt::AlignCenter);
//出现窗口,获得字体
if(td.exec() == QDialog::Accepted)
{
tFont = td.getFont();
tWeight = td.getWidth();
myWidth = td.getKWidth();//文本框宽度
}
//尺寸
adjust = 20;
myFont.setFamily(tFont);
myFont.setPointSize(tWeight);
//文本项
text_item = new QGraphicsTextItem(this);
text_item->setTextWidth(myWidth);
text_item->setFont(myFont);
text_item->setTextInteractionFlags(Qt::TextEditorInteraction);
text_interaction = true;
text_item->setPlainText("请在这里编辑^_^");
text_rect = text_item->boundingRect();
text_item->setPos(520, 520);
//矩形框
rect_item = new QGraphicsRectItem(this);
QPen *pen = new QPen(Qt::lightGray);
rect_item->setPen(*pen);
rect_item->setRect(500, 500,
text_rect.width() + 3*adjust,
text_rect.height() + 3*adjust);


};

TextItem::~TextItem()
{
delete text_item;
delete rect_item;
}

QRectF TextItem::boundingRect(void) const //初始化长方形的位置,大小
{
rect_item->setRect(500, 500,
text_rect.width() + 2*adjust,
text_rect.height() + 2*adjust);
return rect_item->boundingRect();
}
void TextItem::paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
QWidget *widget)
{
Q_UNUSED(painter);
Q_UNUSED(option);
}

void TextItem::keyPressEvent(QKeyEvent *event)
{
QGraphicsItem::keyPressEvent(event);
}
void TextItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
//setFocus();
QGraphicsItem::mousePressEvent(event);
}
void TextItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
{
setCursor(Qt::OpenHandCursor);
}
void TextItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
{
setCursor(Qt::ArrowCursor);
}
void TextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
QGraphicsItem::mouseMoveEvent(event);
}

void TextItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
{
QMenu menu; //显示文本和图标,但是不执行操作
QAction *edit_action = menu.addAction("编辑开关");
QAction *selected_action = menu.exec(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 TextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
{
setFocus();
QGraphicsItem::mouseDoubleClickEvent(event);
}
void TextItem::reset_text_rect(void)
{
text_rect = text_item->boundingRect();
}


Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#ifndef TEXTITEM_H
#define TEXTITEM_H
#include <QCursor>
#include <QGraphicsItem>
#include <QGraphicsTextItem>
#include <QGraphicsRectItem>
#include <QGraphicsTextItem>
#include <QGraphicsSceneEvent>
#include <QObject>
#include <QFont>
#include "textdialog.h"

class TextItem : public QObject, public QGraphicsItem
{
Q_OBJECT
public:
explicit TextItem(QObject *parent = 0);
virtual ~TextItem();
QRectF boundingRect(void) const;
//虚函数,不用但需存在
void paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
QWidget *widget);

private:
QGraphicsTextItem *text_item;
QGraphicsRectItem *rect_item;
bool text_interaction; //可编辑状态

QString tFont;//字体: 黑体等
QFont myFont; //字体
int tWeight;//字宽
qreal myWidth; //文本框的宽度
qreal adjust; //距离调整
QRectF text_rect; //文本的边框

void reset_text_rect(void); //重新设置文本边框的函数

TextDialog td; //出现窗口,设置字体



protected:
void keyPressEvent(QKeyEvent *event);
void mousePressEvent(QGraphicsSceneMouseEvent *event);
void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
void hoverLeaveEvent (QGraphicsSceneHoverEvent * event);
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent * event);

signals:

public slots:

};

#endif // TEXTITEM_H
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
/****************************************************************************
** Meta object code from reading C++ file 'TextItem.h'
**
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.2.0)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/

#include "../TextItem.h"
#include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'TextItem.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 67
#error "This file was generated using the moc from 5.2.0. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif

QT_BEGIN_MOC_NAMESPACE
struct qt_meta_stringdata_TextItem_t {
QByteArrayData data[1];
char stringdata[10];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
offsetof(qt_meta_stringdata_TextItem_t, stringdata) + ofs \
- idx * sizeof(QByteArrayData) \
)
static const qt_meta_stringdata_TextItem_t qt_meta_stringdata_TextItem = {
{
QT_MOC_LITERAL(0, 0, 8)
},
"TextItem\0"
};
#undef QT_MOC_LITERAL

static const uint qt_meta_data_TextItem[] = {

// content:
7, // revision
0, // classname
0, 0, // classinfo
0, 0, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount

0 // eod
};

void TextItem::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
Q_UNUSED(_o);
Q_UNUSED(_id);
Q_UNUSED(_c);
Q_UNUSED(_a);
}

const QMetaObject TextItem::staticMetaObject = {
{ &QObject::staticMetaObject, qt_meta_stringdata_TextItem.data,
qt_meta_data_TextItem, qt_static_metacall, 0, 0}
};


const QMetaObject *TextItem::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}

void *TextItem::qt_metacast(const char *_clname)
{
if (!_clname) return 0;
if (!strcmp(_clname, qt_meta_stringdata_TextItem.stringdata))
return static_cast<void*>(const_cast< TextItem*>(this));
if (!strcmp(_clname, "QGraphicsItem"))
return static_cast< QGraphicsItem*>(const_cast< TextItem*>(this));
return QObject::qt_metacast(_clname);
}

int TextItem::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QObject::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
return _id;
}
QT_END_MOC_NAMESPACE
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,24 @@ void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id,
case 31: _t->on_actionHelp_triggered(); break;
default: ;
}
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
switch (_id) {
default: *reinterpret_cast<int*>(_a[0]) = -1; break;
case 4:
switch (*reinterpret_cast<int*>(_a[1])) {
default: *reinterpret_cast<int*>(_a[0]) = -1; break;
case 0:
*reinterpret_cast<int*>(_a[0]) = qRegisterMetaType< QGraphicsItem* >(); break;
}
break;
case 5:
switch (*reinterpret_cast<int*>(_a[1])) {
default: *reinterpret_cast<int*>(_a[0]) = -1; break;
case 0:
*reinterpret_cast<int*>(_a[0]) = qRegisterMetaType< QGraphicsItem* >(); break;
}
break;
}
}
}

Expand Down Expand Up @@ -245,7 +263,7 @@ int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
_id -= 32;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 32)
*reinterpret_cast<int*>(_a[0]) = -1;
qt_static_metacall(this, _c, _id, _a);
_id -= 32;
}
return _id;
Expand Down
Binary file not shown.
Loading

0 comments on commit 82b333a

Please sign in to comment.