c++ - 如何在 C++ 中更改 QTabWidget 中的文本对齐方式?

标签 c++ qt qt4 qtabwidget

这是同一个问题: How to change text alignment in QTabWidget?

我试图将该 python 代码移植到 C++,但它似乎不起作用。

这是头文件:

#include <QTabBar>

class HorizontalTabWidget : public QTabBar
{
    Q_OBJECT
public:
    explicit HorizontalTabWidget(QWidget *parent = 0);

protected:
    void paintEvent(QPaintEvent *);
    QSize sizeHint() const;
};

这是源文件:

void HorizontalTabWidget::paintEvent(QPaintEvent *)
{
    for(int index = 0; index < count(); index++)
    {
        QPainter * painter = new QPainter(this);
        painter->begin(this);
        painter->setPen(Qt::blue);
        painter->setFont(QFont("Arial", 10));
        QRect tabrect = tabRect(index);
        painter->drawText(tabrect, Qt::AlignVCenter | Qt::TextDontClip, tabText(index));
        painter->end();
    }
}

QSize HorizontalTabWidget::sizeHint() const
{
    return QSize(130, 130);
}

我通过创建继承 QTabWidget 的 NewTabWidget 类来使用它。在我使用的 NewTabWidget 的构造函数中:

setTabBar(new HorizontalTabWidget);

这样做只是为了能够使用该 tabWidget,因为 setTabBar 是 protected 。这是我得到的: enter image description here

我错过了什么?

编辑: 我想要创建的是这个,但顶部有图标,图标下面有标签(如在 Qt Creator 中): enter image description here

最佳答案

问题应该出在paint方法上;检查下面的示例是否适合您,它应该像 QTCreator 一样绘制选项卡。我重新使用了原来的标签样式 QStyleOptionTabV3完成大部分绘画工作,然后在它生成的图像之上渲染图标和选项卡的文本:

class TestTabBar : public QTabBar
{
public:
    explicit TestTabBar(QWidget* parent=0) : QTabBar(parent)
    {
        setIconSize(QSize(80, 80));
    }

protected:
    QSize tabSizeHint(int) const
    {
        return QSize(80, 80);
    }
    void paintEvent(QPaintEvent *)
    {
        QStylePainter p(this);
        for (int index = 0; index < count(); index++)
        {
            QStyleOptionTabV3 tab;
            initStyleOption(&tab, index);

            QIcon tempIcon = tab.icon;
            QString tempText = tab.text;
            tab.icon = QIcon();
            tab.text = QString();

            p.drawControl(QStyle::CE_TabBarTab, tab);

            QPainter painter;
            painter.begin(this);
            QRect tabrect = tabRect(index);
            tabrect.adjust(0, 8, 0, -8);
            painter.drawText(tabrect, Qt::AlignBottom | Qt::AlignHCenter, tempText);
            tempIcon.paint(&painter, 0, tabrect.top(), tab.iconSize.width(), tab.iconSize.height(), Qt::AlignTop | Qt::AlignHCenter);    
            painter.end();
        }
    }
};

class TestTabWidget : public QTabWidget
{
public:
    explicit TestTabWidget(QWidget *parent = 0) : QTabWidget(parent)
    {
        setTabBar(new TestTabBar());
    }
};

标签小部件初始化:

TestTabWidget* test = new TestTabWidget(this);
test->setGeometry(20, 20, 300, 200);
test->addTab(new QWidget(), QIcon("icon0.png"), "test0");
test->addTab(new QWidget(), QIcon("icon1.png"), "test1");
test->setTabPosition(QTabWidget::West);

这在我的 ubuntu 上运行良好,希望它对你有用, 问候

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

相关文章:

c++ - 具有特定于子类的模板化参数类型的 Qt SIGNAL 架构

c++ - 如何为 qDebug 重载 operator<<

c++ - Bank Kattis 问题的算法正确性

c++ - 如何创建可调整大小的 Qt 缩略图预览?

c++ - 继续获取 "no match for ' operator<<' C++

c++ - 为什么我的代码打印 r 值 2 次而不是 rvalue 和 lvalue?

c++ - Qt5 有没有办法让 QLocalServer 监听抽象的 unix 套接字?

c++ - Qt - 打开网址

c++ - 将 QML 链接到 C++ - 或者我应该?

c++ - 如何去 GUI 一个复杂的 tanglewad C++/Qt4 应用程序?