我找不到在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/

10-12 06:10