QGraphicsItem rotate(翻轉),Text No(文字不)

You rotate , and i don't.

反轉

在處理圖形中經(jīng)常要碰到對圖元進行翻轉铐尚,翻轉的時候圖元中的文字也跟隨著翻轉起來拨脉,但,這可不是我想要的結果宣增。
我想要的是圖形變玫膀,但文字仍然保持原樣(我可犯賤,你要一直仰望--5ⅰ)帖旨。
Google,百度了很多但沒找到大牛對這個問題的解決方案灵妨,估計太弱了他們都不屑啊解阅,后來結合同事在程序中使用的方法才想到其實可以這樣的...

[失敗的方法]在QGraphicsItem::paint(...)函數(shù)中繪制文本

QPainter Class
一開始,對Qt的應用不懂變通泌霍,一直使用在item的paint函數(shù)中進行圖形以及Text的繪制瓮钥。

QPainter o_painter(this);
o_painter.drawText(rect, Qt::AlignCenter, tr("Hi, Slark!"));

然后如果要對文字進行一些翻轉可能就需要對QPainter進行rotate了。

o_painter.roate(90);

但是這種實現(xiàn)方法不便于后續(xù)控制item的旋轉烹吵,于是...

[成功的方式]繼承item碉熄,擁有Text子item

QGraphicsObject Class
也就是說對于我們要繪制的圖元,自己繼承并實例化一個類肋拔,該類包含繪制文本的子成員锈津。

class CGraphicsObj : public QGraphicsObject
{
    ....
}

class CGraphicsObjText : public QGraphicsObject
{
    ....
    void  paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
}

class CGraphicsObjCell : public CGraphicsObj
{
    ....
     void  paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
    
    private:
    CGraphicsObjText *mopText;
}

然后,在CGraphicsObjText中負責文字的繪制凉蜂,這樣就擁有了2個獨立的Item圖元了琼梆。

void CGraphicsObjCell::mvSetupText(const QString &str)
{
    mopText = new CGraphicsObjText(this);
}

但需要把mopText的parent設置為它所處的Cell對象中,這樣不需要手動去控制Text元素的顯示窿吩,只需要把Cell元素添加到scene中就可以了茎杂。

CGraphicsObjCell *op_cell = new CGraphicsObjCell();
scene()->addItem(op_cell);

接下來就是最終進行元素翻轉的步驟了,按正常方式在Cell的paint函數(shù)中繪制好Cell元素纫雁,通過內部函數(shù)進行Cell的翻轉煌往,翻轉后Text也會跟隨父對象翻轉,怎么辦轧邪,當然是把它翻回來刽脖!

CGraphicsObjCell::mvRotateCell(qreal angel)
{
    rotate(angel);
    if (mopText)
        mopText->rotate(-1 * angel);
}

大致思路如上羞海,當然實際翻轉有很多情況,可以按照自己需要來進行上翻曲管,下翻却邓,以X軸,以Y軸院水,文字橫向腊徙,文字縱線等等。

其他方法

另外一個方法就是使用類似事件的方式檬某,監(jiān)控ParentItem發(fā)生的旋轉撬腾,然后在處理旋轉時候依次處理Text的旋轉。

相關flag
setFlag(ItemSendsGeometryChanges);

然后在相關函數(shù)中處理,處理方式與下面代碼相似

itemChange
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末橙喘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子胶逢,更是在濱河造成了極大的恐慌厅瞎,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異碟刺,居然都是意外死亡锁保,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門半沽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爽柒,“玉大人,你說我怎么就攤上這事者填『拼澹” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵占哟,是天一觀的道長心墅。 經(jīng)常有香客問我,道長榨乎,這世上最難降的妖魔是什么怎燥? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蜜暑,結果婚禮上铐姚,老公的妹妹穿的比我還像新娘。我一直安慰自己肛捍,他們只是感情好谦屑,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布驳糯。 她就那樣靜靜地躺著,像睡著了一般氢橙。 火紅的嫁衣襯著肌膚如雪酝枢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天悍手,我揣著相機與錄音帘睦,去河邊找鬼。 笑死坦康,一個胖子當著我的面吹牛竣付,可吹牛的內容都是我干的。 我是一名探鬼主播滞欠,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼古胆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了筛璧?” 一聲冷哼從身側響起逸绎,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夭谤,沒想到半個月后棺牧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡朗儒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年颊乘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片醉锄。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡乏悄,死狀恐怖,靈堂內的尸體忽然破棺而出恳不,到底是詐尸還是另有隱情纲爸,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布妆够,位于F島的核電站识啦,受9級特大地震影響,放射性物質發(fā)生泄漏神妹。R本人自食惡果不足惜颓哮,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸵荠。 院中可真熱鬧冕茅,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乍楚,卻和暖如春当编,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背徒溪。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工忿偷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人臊泌。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓鲤桥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親渠概。 傳聞我的和親對象是個殘疾皇子茶凳,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容