qt中有原生的新增下劃線的方式(如下)但這種方式效果可能不是很好.
class ***xx: public qgraphicstextitem
;
效果如下(黃色波浪線)
我找了一下好像也不能繼承然後新增自定義的下劃線型別,所以我目前用的方法是在paint函式種繪製(有其他好辦法的話,請大神們賜教啊,拜託了)。
可以看到一是相比於原生的效果會好一點(還可以更加細緻的再去調整)二是從圓或者三角形能看出是跟著字元變化的,主要是因為我不是只用boundingbox的寬度之類的計算的。不過效果有點不好的地方在於,一是選擇文字時這些繪製的下劃線無法包含在選中文字內,有點影響觀感。二是以上圖的a為例,最右邊的圓和其上方的字母a沒有居中對齊,原因下述。
void ctextitem::paint(qpainter *painter, const qstyleoptiongraphicsitem *option, qwidget *widget)
int linecount = textlayout->linecount();
for(int i=0; ilineat(i);
if(1 == dectype)
else if(2 == dectype)
else if(3 == dectype)
else if(4 == dectype)
else if(5 == dectype)
}blockheight += textlayout->boundingrect().height() + linespace;
iterblock = iterblock.next();
}}void ctextitem::drawcircle(qtextline* textline, qpainter *painter, const int& lineindex, const int& blockheight, int radius, int spacing)
}qtextframe* rootframe = document()->rootframe();
qtextframeformat ffmt = rootframe->frameformat();
xpos += ffmt.leftmargin();
double ypos = lineindex*textline->height()+ffmt.topmargin()+blockheight;
qpointf newp(xpos,ypos);
qpainterpath outcircle = circularpath(newp,radius,0);
outpath.addpath(outcircle);
}qpen tmp_pen;
tmp_pen.setcolor(qcolor(230,0,0));
tmp_pen.setwidth(1);
painter->setpen(tmp_pen);
painter->setbrush(qt::nobrush);
painter->drawpath(outpath);
painter->setbrush(qcolor(230,0,0));
qpainterpath inpath;
for(int i=0; idrawpath(inpath);}}
主要**在於
qlistlistgr = textline->glyphruns();
for(int j=0; jpos = glr.positions();
這個就可以獲取每個字元的位置,據此可以實現下劃線根據字元的多少而變化。但同時這裡無法獲取字元的寬度,所以我是根據前後兩個位置差算寬度的,也因此最後乙個字元無法計算(上述最右邊的字母a)還請大神們賜教啊。
android自定義控制項新增自定義屬性
1 如果是自定義控制項,請在style.xml中或attrs.xml中宣告屬性 attr declare styleable 2 在theme中使用自定義的屬性,可以再多個主題中定義不同的屬性值 customize your theme here.color colorprimaryitem col...
新增自定義模板
模板 當增加一些,固定,特有組伺服器的時候,增加一些特定的監控專案,這些專案就可以加到自定義的模板裡,再將機器加到這個模板裡。每次增加類似的機器,就可以加到這個模板裡。思路 建立模板 名字自定義 模板要歸屬到模板組裡。也可以鏈結其他的模板。建立出的模板,所有的都為空。可以增加一些監控專案。可以在其他...
為C 自定義控制項新增自定義事件
大氣象 原文 為c 自定義控制項新增自定義事件 這裡的自定義控制項是由普通控制項組合而成的。希望事件響應 推遲到使用自定義控制項的窗體裡寫。步驟一 新建乙個使用者控制項,放兩個按鈕,tag分別是btn1,btn2.這兩個按鈕的共用單擊事件處理 如下 using system using system...