QListWidget

一些技巧

让QListWidget的高度跟着内容的高度变化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from PySide import QtGui, QtCore

app = QtGui.QApplication([])

window = QtGui.QWidget()
layout = QtGui.QVBoxLayout(window)
list = QtGui.QListWidget()
list.addItems(['Winnie Puh', 'Monday', 'Tuesday', 'Minnesota', 'Dracula Calista Flockhart Meningitis', 'Once', '123345', 'Fin'])
list.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
list.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
list.setFixedSize(list.sizeHintForColumn(0) + 2 * list.frameWidth(), list.sizeHintForRow(0) * list.count() + 2 * list.frameWidth())
layout.addWidget(list)

window.show()

app.exec_()

参考

Read More

emoji表情处理

在QLabel上显示emoji表情,win10和win7显示的效果不一样,win10能显示出彩色的,但win7只能显示黑白色,且有些表情甚至不能显示。

不同系统的实现效果都是不一样的,所以要实现统一,最好的方式就是自己实现,通过其unicode值建立一套对应的图片,显示的时候,直接绘制本地的图片。而不走系统渲染。

参考

Read More

Qt中圆形头像

业务需求中经常需要头像是圆形的,一些数字底部有圆形背景,于是将其整理出来,以便以后方便的使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class CircleThumbWiget(QWidget):
def __init__(self, parent=None, radius=40):
"""
radius 表示这个圆形控件的大小
"""
super(CircleThumbWiget, self).__init__(parent)
self.imageLabel = QLabel(self)
self.imageLabel.setScaledContents(True)
self.imageLabel.setGeometry(0, 0, radius, radius)
defaultPixmap = QPixmap("resources/icon/default_user.png")
self.imageLabel.setPixmap(defaultPixmap)
# 这里使用一张周边透明的圆形的png图片
img = QImage("resources/icon/default_user_mask.png")
bg = QPixmap.fromImage(img.scaled(QSize(radius, radius), Qt.IgnoreAspectRatio))
palette = self.palette()
palette.setBrush(QPalette.Background, QBrush(bg))
self.setPalette(palette)
self.setMask(bg.mask())

def setPixmap(self, pixmap):
self.imageLabel.setPixmap(pixmap)

Read More