QListWidget提供一個基於item的列表控件,當前我是用來顯示拍攝圖片後的縮略圖列表,雖然QListWidgetItem(const QIcon &icon, const QString &text, QListWidget *parent = Q_NULLPTR, int type = Type)已經提供帶Icon與Text的構造函數,但是對於icon的顯示位置卻沒有合適的方法來調整,比如以下這種(縮略圖大小是固定的):
此時圖片的位置是在上方的,而我想要的效果是圖像顯示在中間,文字顯示在底部,每個item應該都這樣的。可問題是在固定的縮略圖大小下,計算出來的顯示圖像默認在上方,而文本區域則佔用了剩下所有空間,無法在Item中設置文本區域佔用的大小與調整圖像顯示的位置。
如果在item項中無法直接調整圖像的位置的話,可以考慮在Icon中調整大小與位置,即在Icon中繪製出想要定義的顯示區域,比如:
QPixmap src = QPixmap(thumbnailSize);
QPainter painter(&src);
painter.fillRect(src.rect(), QColor(0,0,0));
painter.drawPixmap(startP, selectedImg);
QIcon icon;
icon.addPixmap(src);
固定好Icon的大小後可以自由繪製圖像區域,想顯示在哪都行,而文本區域的大小也可以調整:
QSize size = QSize(thumbnailSize.width(), thumbnailSize.height()+16);
item->setSizeHint(size);
item->setTextAlignment(Qt::AlignHCenter | Qt::AlignBottom);
ui->listWidget->addItem(item);
"+16"即是文本顯示區域的高。