我找不到在QTabWidget中设置文本对齐方式的方法。
创建此小部件的实例后,将其tabPosition属性设置为West,但希望它水平显示文本/标签。
我看过Qt的stylesheets,但正如您所看到的,只能在QPushButton和QProgressBar上设置text-align属性。
我已经在网上搜索了,但是我发现一个bugreport,一个non-answered question,最后是一个a user,建议重新实现paint()方法。
也许我会解决,但是我正在使用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,效果很好:)
最佳答案
首先,您需要创建一个自定义类,它是QtGui / QTabWidget的子类,并重新定义绘画方法:
class HorizontalTabWidget(QtGui.QTabWidget):
def paintEvent(self, event):
QPainter p;
p.begin(this);
# your drawing code goes here
p.end();
这是您要重新实现的documentation for QWidget.paintEvent方法。
当然,您需要了解绘画的总体工作原理,请参阅QPainter的文档。
不幸的是,目前我没有安装PyQt,因此无法为您提供更具体的解决方案。
关于qt - 如何在QTabWidget中更改文本对齐方式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3607709/