我发现做
self.combo.setEditable(True)
self.combo.lineEdit().setAlignment(QtCore.Qt.AlignCenter)
将会把组合框中的文本居中对齐。但是一旦这样做,我应用于组合框的样式就不起作用了,里面显示的文本将变为默认的纯文本。另外,我不想让它可编辑,也不喜欢设置为可编辑时出现的GUI效果。
有没有一种简单的方法来居中文本,并保留与之前相同的GUI效果(如点击时的样式和行为)?
我发现做
self.combo.setEditable(True)
self.combo.lineEdit().setAlignment(QtCore.Qt.AlignCenter)
将会把组合框中的文本居中对齐。但是一旦这样做,我应用于组合框的样式就不起作用了,里面显示的文本将变为默认的纯文本。另外,我不想让它可编辑,也不喜欢设置为可编辑时出现的GUI效果。
有没有一种简单的方法来居中文本,并保留与之前相同的GUI效果(如点击时的样式和行为)?
您可以通过以下方式自己重新实现组合框的绘制过程(摘自我正在处理的项目):
class CustomComboBox(QtGui.QComboBox):
...
def paintEvent(self, evt):
painter = QtGui.QStylePainter(self)
painter.setPen(self.palette().color(QtGui.QPalette.Text))
option = QtGui.QStyleOptionComboBox()
self.initStyleOption(option)
painter.drawComplexControl(QtGui.QStyle.CC_ComboBox, option)
textRect = QtGui.qApp.style().subControlRect(QtGui.QStyle.CC_ComboBox, option, QtGui.QStyle.SC_ComboBoxEditField, self)
painter.drawItemText(
textRect.adjusted(*((2, 2, -1, 0) if self.isShown else (1, 0, -1, 0))),
QtGui.qApp.style().visualAlignment(self.layoutDirection(), QtCore.Qt.AlignLeft),
self.palette(), self.isEnabled(),
self.fontMetrics().elidedText(self.currentText(), QtCore.Qt.ElideRight, textRect.width())
)
...
painter.drawItemText
调用是绘制文本的地方。
paintEvent()
方法外,没有其他方法。 - bakatrouble