如何更改 QTabWidget 中的文本对齐方式? [英] How to change text alignment in QTabWidget?

查看:98
本文介绍了如何更改 QTabWidget 中的文本对齐方式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I cannot find a way to set the text alignment in a QTabWidget.

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

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.

我已经在网上搜索过,但我刚刚找到了一个bugreport,一个未回答的问题,最后是用户建议重新实现paint()方法.也许我会解决,但我使用的是 Python(PyQt 或 PySide),但我不知道该怎么做.

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.

你能帮我吗?

感谢 Teukamm,我写了一些代码:

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_())

最后,我的文本按预期对齐,但我有一个小(大?)问题:当您单击每个选项卡按钮的右侧时,它不会发送 currentChanged 信号.我还尝试在paintEvent 中扩展每个tabRect 的宽度,但它不起作用.我应该改变什么?

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?

谢谢:)

顺便说一句:你不能从 QTabWidget 继承,而是从 QTabBar 继承;)

BTW: you could not inherit from QTabWidget, but from QTabBar ;)

解决了!刚刚更改了 tabSizeHint 中的 sizeHint 方法,效果很好:)

Solved! Just changed the method sizeHint in tabSizeHint and it works well :)

推荐答案

为了让您开始,您需要创建一个作为 QtGui/QTabWidget 子类的自定义类并重新定义绘制方法:

To get you started, you need to create a custom class that is a subclass of QtGui/QTabWidget and redefine the painting method:

class HorizontalTabWidget(QtGui.QTabWidget):
   def paintEvent(self, event):
      QPainter p;
      p.begin(this);
      # your drawing code goes here
      p.end();

这是QWidget.paintEvent 的文档 您正在重新实现的方法.

Here's the documentation for QWidget.paintEvent method that you are reimplementing.

当然你需要知道绘画的一般工作原理,请参考QPainter.

Of course you need to know how painting works in general, please refer to the documentation for QPainter.

不幸的是,我目前手边没有 PyQt 安装,所以我不能给你一个更具体的解决方案.

Unfortunately I don't have a PyQt installation handy at the moment, so I can't give you a more specific solution.

这篇关于如何更改 QTabWidget 中的文本对齐方式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆