I cannot find a way to set the text alignment in a QTabWidget.
After I've created an instance of this widget, I've set its tabPosition property to West, but I wish it showed text/label horizontally.
I've given a look to the Qt's stylesheets, but as you can see, the text-align property can only be set on QPushButton and QProgressBar.
I already searched on the web, but I just found a bugreport, a non-answered question, and finally a user that suggests to re-implement the paint() method.
Maybe I'd solve, but I'm using Python (PyQt or PySide) and I don't know how to do it.
Can you help me?
EDIT:
thanks to Teukamm, I wrote a bit of 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 I've my text aligned as I expected, but I've a little (big?) problem: when you click on the right side of every tab button, it doesn't send the currentChanged SIGNAL. I've also tried to expand the width of every tabRect, in paintEvent, but it doesn't work. What should I change?
Thank you :)
BTW: you could not inherit from QTabWidget, but from QTabBar ;)
EDIT:
Solved! Just changed the method sizeHint in tabSizeHint and it works well :)
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…