一:自定義的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();
}
博文索引 持續更新中。。。