gpt4 book ai didi

qt - 如何更改 QTabWidget 中的文本对齐方式?

转载 作者:行者123 更新时间:2023-12-04 11:31:05 26 4
gpt4 key购买 nike

我找不到在 QTabWidget 中设置文本对齐方式的方法。

创建此小部件的实例后,我已将其 tabPosition 属性设置为 West,但我希望它水平显示文本/标签。
我看过 Qt 的 stylesheets ,但是正如你所看到的,text-align 属性只能在 QPushButton 和 QProgressBar 上设置。

我已经在网上搜索过,但我刚刚找到了 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 它运作良好:)

最佳答案

我在 GitHub 上放了一个可以解决这个问题的例子:https://gist.github.com/LegoStormtroopr/5075267

代码也复制过来:

最小示例.py:

from PyQt4 import QtGui, QtCore
from FingerTabs import FingerTabWidget

import sys

app = QtGui.QApplication(sys.argv)
tabs = QtGui.QTabWidget()
tabs.setTabBar(FingerTabWidget(width=100,height=25))
digits = ['Thumb','Pointer','Rude','Ring','Pinky']
for i,d in enumerate(digits):
widget = QtGui.QLabel("Area #%s <br> %s Finger"% (i,d))
tabs.addTab(widget, d)
tabs.setTabPosition(QtGui.QTabWidget.West)
tabs.show()
sys.exit(app.exec_())

FingerTabs.py:
from PyQt4 import QtGui, QtCore

class FingerTabWidget(QtGui.QTabBar):
def __init__(self, *args, **kwargs):
self.tabSize = QtCore.QSize(kwargs.pop('width'), kwargs.pop('height'))
super(FingerTabWidget, self).__init__(*args, **kwargs)

def paintEvent(self, event):
painter = QtGui.QStylePainter(self)
option = QtGui.QStyleOptionTab()

for index in range(self.count()):
self.initStyleOption(option, index)
tabRect = self.tabRect(index)
tabRect.moveLeft(10)
painter.drawControl(QtGui.QStyle.CE_TabBarTabShape, option)
painter.drawText(tabRect, QtCore.Qt.AlignVCenter |\
QtCore.Qt.TextDontClip, \
self.tabText(index));

def tabSizeHint(self,index):
return self.tabSize

关于qt - 如何更改 QTabWidget 中的文本对齐方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3607709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com