Как изменить выравнивание текста в QTabWidget?

Я не могу найти способ установить выравнивание текста в QTabWidget.

После создания экземпляра этого виджета я установил для его свойства tabPosition значение West, но я бы хотел, чтобы текст / метка отображалась горизонтально. Я просмотрел таблицы стилей Qt , но, как вы можете видеть, свойство text-align может быть установлено только для QPushButton и QProgressBar.

Я уже искал в Интернете, но я только что нашел отчет об ошибке , вопрос без ответа и, наконец, пользователя , который предлагает повторно реализовать метод 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 . Я также пытался увеличить ширину каждого tabRect в paintEvent, но это не сработало. Что я должен изменить?

Спасибо :)

Кстати: вы не могли наследовать от QTabWidget, но от QTabBar;)

РЕДАКТИРОВАТЬ:

Решено! Просто изменил метод sizeHint в tabSizeHint , и он работает хорошо :)

7
задан ekhumoro 19 January 2017 в 17:28
поделиться

1 ответ

Для начала вам нужно создать класс, который является подклассом QtGui/QTabWidget, и переопределите метод рисования:

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

Вот документация для метода QWidget.paintEvent, который вы повторно реализуете.

Конечно, вам нужно знать, как работает рисование в целом, пожалуйста, обратитесь к документации для QPainter.

К сожалению, в данный момент у меня нет под рукой установки PyQt, поэтому я не могу дать вам более конкретное решение.

1
ответ дан 7 December 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: