I cannot find a way to set text alignment in QTabWidget.
After I instantiated this widget, I set its tabPosition property to the West, but I would like it to display the text / label horizontally. I looked at Qt stylesheets , but as you can see, the text-align property can only be set on QPushButton and QProgressBar.
I already searched on the Internet, but I just found a bugreport , an unanswered question and finally a user who suggests reimplementing the paint () method, Maybe I would solve it, but I use Python (PyQt or PySide) and I donโt know how to do it.
Can you help me?
EDIT: thanks to Teukamm, I wrote some code:
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_())
And finally, my text is aligned as I expected, but I have a small (big?) Problem: when you click on the right side of each tab button, it does not send currentChanged SIGNAL . I also tried to expand the width of each tabRect in paintEvent, but it does not work. What should I change?
Thanks:)
By the way: you could not inherit from QTabWidget, but from QTabBar;)
EDIT:
Solved! Just changed the sizeHint method in tabSizeHint and it works well :)
qt qt4 pyside pyqt4 qtabwidget
Markon
source share