今天要實現一個新的需求,要求一個選圖界面的每一個單元項以文字在上,圖片在下的形式顯示。但QListWidget中只有兩種搭配,一是文字在下圖片在上,二是圖片在左文字在右,以下圖所示。字體
1 //文字框高度
2 const int textHight = 30; 3
4 //圖片框距左邊界距離
5 const int imgMarin = 20; 6
7 //得到圖片路徑
8 QString strPath = "./library/1.bmp"; 9
10 QFileInfo fi(strPath); 11 if(fi.isFile()) 12 { 13
14 //生成圖像objPixmap
15 QPixmap objPixmap(strPath); 16
17 //生成圖標對象
18 QPixmap iconPixmap(m_W_ICONSIZE,m_H_ICONSIZE); 19 iconPixmap.fill(QColor(255,255,255)); 20
21 // 在圖標上生成QPainter對象
22 QPainter painter(&iconPixmap); 23
24 // 設置畫筆顏色
25 painter.setPen(QColor(0, 0, 0)); 26
27 // 設置字體:SimSun、大小15
28 QFont font; 29 font.setFamily("SimSun"); 30 font.setPointSize(15); 31 painter.setFont(font); 32
33 // 定義文本框矩形
34 const QRect rectangle = QRect(0, 0, m_W_ICONSIZE, textHight); 35 // 繪製文本
36 painter.drawText(rectangle, Qt::AlignHCenter, QString("text name")); 37
38 // 反走樣
39 painter.setRenderHint(QPainter::Antialiasing, true); 40
41 // 定義繪圖框矩形,畫圖
42 const QRect img_rectangle = QRect(imgMarin, textHight, m_W_ICONSIZE-(2*imgMarin), m_H_ICONSIZE-textHight-imgMarin); 43 painter.drawPixmap(img_rectangle, objPixmap); 44
45 // 定義繪圖框矩形,並畫圖
46 const QRect img2_rectangle = QRect(m_W_ICONSIZE-textHight, 0, textHight, textHight); 47 QPixmap objPixmap2(":/image/image/open.png"); 48 painter.drawPixmap(img2_rectangle, objPixmap2); 49
50 // 爲單元項添加圖標對象
51 QListWidgetItem *pItem = new QListWidgetItem(QIcon(iconPixmap.scaled(QSize(m_W_ICONSIZE,m_H_ICONSIZE),Qt::KeepAspectRatio,Qt::SmoothTransformation)),QString("0")); 52
53
54 // 設置單元項的寬度和高度
55 pItem->setSizeHint(QSize(m_W_ICONSIZE,m_H_ICONSIZE)); 56 ui->listWidget->insertItem(0, pItem); 57
58 }