如何使QTabWidget的选项卡适合容器的大小 - 调整其长度

How to make the tabs of QTabWidget fit the size of the container - Adjust its lenght?

本文关键字:调整 QTabWidget 何使 选项      更新时间:2023-10-16

假设我有一个 5 英寸宽的选项卡小部件,当我向其添加选项卡时,每个选项卡都是 1 英寸宽。如何使选项卡在小部件中占据等长空间,使每个选项卡宽 2.5 英寸?我正在使用QT设计器,是否有可以设置的属性?

好消息是 QTabBar 有一个属性,它几乎完全符合您的要求,即 setExpanding。

坏消息是 QTabWidget 实际上忽略了该属性,因为它总是强制其选项卡为最小大小(即使您设置了自己的选项卡栏)。

最好的解决方法似乎是基于 QTabBar 和 QStackedLayout 创建自己的 TabWidget 类。但请注意,这仍然可能不会扩展选项卡以填充所有可用空间。当我尝试它时,两个选项卡仅扩展以填充三分之二的空间 - 因此如果可以的话,看起来它可能总是在最后为一个选项卡留出空间。

// Qt 5.12.2
class TabWidget : public QTabWidget
{
    class TabBar : public QTabBar
    {
        QSize _size;
    public:
        TabBar(QWidget* a_parent) : QTabBar(a_parent)
        {
            setWidth(size().width());
        }
        QSize tabSizeHint(int index) const
        {
            return QSize(_size.width()/(count()?count():1), size().height());
        }
        void setWidth(int a_width)
        {
            _size = QSize(a_width, size().height());
            QTabBar::resize(_size);
        }
    };
    TabBar* _tabBar = new TabBar(this);
public:
    TabWidget(QWidget* a_parent) : QTabWidget(a_parent)
    {
        setTabBar(_tabBar);
    }
    void resizeEvent(QResizeEvent *e) override
    {
        _tabBar->setWidth(size().width());
        QTabWidget::resizeEvent(e);
    }
};