一:自定义的QGraphicsItem的定义
4,要使用信号槽功能
1,Item最好继承QGraphicsObject(父类是QGraphicsItem,QObject);
2,多重继承;
二,GraphicsView框架下图元的拖放操作
1,拖动源操作,开始拖动
2,拖动进入
3,拖动松开事件
三,继承文本的例子
头文件
#ifndef TEXTEDIT_H
#define TEXTEDIT_H
#include <QGraphicsTextItem>
#include <QString>
#include <QDebug>
#include <QMessageBox>
#include <QPoint>
#include <QGraphicsSceneMouseEvent>
#include <QMimeData>
#include <QDrag>
#include <QFont>
#include <QPointF>
//系统时间
#include <QDate>
#include <QTime>
//文字处理类
class TextEdit : public QGraphicsTextItem
{
Q_OBJECT
public:
explicit TextEdit(QGraphicsTextItem * parent = 0);
void setTextToItem(QString intoText="请输入文本内容"); //设置文本到字体项目
void setTextItemFont(QFont font,int size=20,int interval=0,int rotate=0); //设置文本的字体
void setTextPosition(int x,int y); //设置文本的位置
//区分是文本类型
int type() const
{
return 0;
}
//存储文本的信息
struct TextInfo
{
QPoint textPos; //文本位置
int textWidth; //文本宽度
int textHeight; //文本高度
int textRotation; //文本角度
QFont textFont; //文本字体
int textSize; //文本字号
int textInterval; //文本间距
};
signals:
void textItemPositionChanged(QPointF point); //文本项目的位置
void textinformation(QPoint position,QFont font,int size,int interval,int rotation,int width,int heigh,QString text); //文本类的信息 字体、大小、间距、角度、宽度、高度
public slots:
void getTextItemInfo(); //得到的文本的位置信息
public:
int lastRotation; //角度信息
TextInfo textInfo; //文本信息
QString textString; //文本字符串
//显示内容
public:
void showTextContents();
};
#endif // TEXTEDIT_H
源代码
#include "textedit.h"
TextEdit::TextEdit(QGraphicsTextItem* parent) :
QGraphicsTextItem(parent=0)
{
setFlag(QGraphicsItem::ItemIsFocusable); //项目可以聚焦
setFlag(QGraphicsItem::ItemIsMovable);
setFlag(QGraphicsItem::ItemIsSelectable,true);
//关联位置变化槽函数
connect(this,SIGNAL(xChanged()),this,SLOT(getTextItemInfo()));
connect(this,SIGNAL(yChanged()),this,SLOT(getTextItemInfo()));
QFont font;
setTextItemFont(font,20,0,0);
this->hide(); //初始化成功之后对项目进行隐藏
}
//将需要显示的文本放到字体项目中
void TextEdit::setTextToItem(QString intoText)
{
qDebug()<<"TextEdit::setTextToItem()"<<intoText;
//插入文本
//向字体项目中添加文字
this->setPlainText(intoText);
textString=intoText;
QFontMetrics fm(this->font()); //字体的测量
textInfo.textWidth=fm.width(textString); //得到文本的宽度
textInfo.textHeight=fm.height(); //得到文本的高度
getTextItemInfo(); //更新信息
}
//设置显示的字体、大小、间距
void TextEdit::setTextItemFont(QFont font,int size,int interval,int rotate)
{
font.setPixelSize(size); //设置字体的大小
font.setLetterSpacing(QFont::AbsoluteSpacing,interval); //设置字体的间距
this->setFont(font);
this->setRotation(rotate); //设置旋转的角度
//记录文本的位置信息
textInfo.textPos.rx()=this->pos().rx();
textInfo.textPos.ry()=this->pos().ry();
//记录文本的字体、大小、间距、角度、宽度、高度
textInfo.textFont=font;
textInfo.textSize=textInfo.textFont.pixelSize();
textInfo.textInterval=textInfo.textFont.letterSpacing();
textInfo.textRotation=this->rotation(); //得到角度
QFontMetrics fm(this->font()); //字体的测量
textInfo.textWidth=fm.width(textString); //得到文本的宽度
textInfo.textHeight=fm.height(); //得到文本的高度
getTextItemInfo(); //更新信息
}
//得到文本项目的位置
void TextEdit::getTextItemInfo()
{
textInfo.textPos.rx()=this->pos().rx();
textInfo.textPos.ry()=this->pos().ry();
emit textinformation(textInfo.textPos,textInfo.textFont,textInfo.textSize,textInfo.textInterval,
textInfo.textRotation,textInfo.textWidth,textInfo.textHeight,textString);
}
//设置文本的位置
void TextEdit::setTextPosition(int x,int y)
{
this->setPos(x,y);
textInfo.textPos.rx()=x;
textInfo.textPos.ry()=y;
}
//显示文本内容
void TextEdit::showTextContents()
{
this->show();
}
博文索引 持续更新中。。。