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

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

问题描述

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

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

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

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

最后,我的文本按预期对齐,但是我有一个小问题(大?):当您单击每个选项卡按钮的右侧时,它不会发送

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天全站免登陆