在實際項目中,我們往往想讓指定的文字連接成一個整體,不讓用戶對顯示的文字進行拆分複製等操作,只進行顯示,也就是說,我們想讓部分字符串以原子的形式顯示給用戶,例如,在即時通訊軟件中,我們在羣裏@一個人是,當補全成功後,即爲一個圖片顯示在編輯框中,如下圖:
我們只能對@的這個人名整體進行操作,這就用到了接下來講的東西:將字符串寫入圖片中顯示並將圖片保存到本地,其主要代碼如下:
其效果如下圖:
我們只能對@的這個人名整體進行操作,這就用到了接下來講的東西:將字符串寫入圖片中顯示並將圖片保存到本地,其主要代碼如下:
//===================================================================================
//保存路徑(包括文件名)
QString tempImagePath="/Users/Tmp/test.png";
//圖片上的字符串,例如 HELLO
QString imageText="HELLO";
QFont font;
//設置顯示字體的大小
font.setPixelSize(13);
QFontMetrics fm(font);
int charWidth = fm.width(imageText);
charWidth = fm.boundingRect(imageText).width();
//指定圖片大小爲字體的大小
QSize size(charWidth+8, 15);
//以ARGB32格式構造一個QImage
QImage image(size, QImage::Format_ARGB32);
//填充圖片背景,120/250爲透明度
image.fill(qRgba(255, 255, 255, 0));
//爲這個QImage構造一個QPainter
QPainter painter(&image);
//設置畫刷的組合模式CompositionMode_SourceOut這個模式爲目標圖像在上。
//改變組合模式和上面的填充方式可以畫出透明的圖片。
painter.setCompositionMode(QPainter::CompositionMode_DestinationOver);
//改變畫筆和字體
QPen pen = painter.pen();
pen.setColor( QColor(0, 141, 239));
painter.setPen(pen);
painter.setFont(font);
//將Hello寫在Image的中心
painter.drawText(image.rect(), Qt::AlignCenter, imageText);
image.save(tempImagePath, "PNG", 100);
//===================================================================================
其效果如下圖:
截圖放入QQ中效果如下: