【发布时间】:2011-04-06 04:22:04
【问题描述】:
我找不到在 QTabWidget 中设置文本对齐的方法。
创建此小部件的实例后,我已将其 tabPosition 属性设置为 West,但我希望它水平显示文本/标签。 我看了一下Qt的stylesheets,但是如你所见,text-align属性只能在QPushButton和QProgressBar上设置。
我已经在网上搜索过了,但我只找到了一个bugreport、一个non-answered question,最后是一个建议重新实现paint() 方法的a user。 也许我会解决,但我使用的是 Python(PyQt 或 PySide),我不知道该怎么做。
你能帮帮我吗?
编辑: 感谢 Teukamm,我写了一些代码:
from PyQt4 import QtGui, QtCore
class HorizontalTabWidget(QtGui.QTabBar):
def paintEvent(self, event):
for index in range(self.count()):
painter = QtGui.QPainter()
painter.begin(self)
painter.setPen(QtCore.Qt.blue);
painter.setFont(QtGui.QFont("Arial", 10));
tabRect = self.tabRect(index)
painter.drawText(tabRect, QtCore.Qt.AlignVCenter | QtCore.Qt.TextDontClip, self.tabText(index));
painter.end()
def sizeHint(self):
return QtCore.QSize(60, 130)
import sys
app = QtGui.QApplication(sys.argv)
tabs = QtGui.QTabWidget()
tabs.setTabBar(HorizontalTabWidget())
widget1 = QtGui.QWidget()
widget2 = QtGui.QWidget()
tabs.addTab(widget1, "Widget1")
tabs.addTab(widget2, "Widget2")
tabs.setTabPosition(2)
tabs.show()
sys.exit(app.exec_())
最后我的文本按预期对齐了,但我有一个小(大?)问题:当您单击每个选项卡按钮的右侧时,它不会发送 currentChanged SIGNAL。我还尝试在paintEvent 中扩展每个tabRect 的宽度,但它不起作用。我应该改变什么?
谢谢你:)
顺便说一句:你不能从 QTabWidget 继承,而是从 QTabBar 继承;)
编辑:
解决了!只是在 tabSizeHint 中更改了方法 sizeHint 并且效果很好:)
【问题讨论】:
-
你不能覆盖puQt中的paint方法?
-
是的,我想重写那个方法,但我认为它没有包含在 Python 实现中(不知道我为什么这么认为......)谢谢你的评论 :)
标签: qt qt4 pyqt4 pyside qtabwidget