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

时间:2013-11-15 19:15:16

标签: c++ qt

假设我有一个5英寸宽的标签小部件,当我向其添加标签时,每个标签宽度为1英寸。如何使标签在小部件中占据相同的长度空间,使每个标签宽2.5英寸?我正在使用QT Designer是否有可以设置的属性?

2 个答案:

答案 0 :(得分:0)

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

坏消息是QTabWidget有效地忽略了该属性,因为它总是强制其标签为最小尺寸(即使你设置了自己的标签栏)。

最好的解决方法似乎是基于QTabBar和QStackedLayout创建自己的TabWidget类。但请注意,这仍然可能无法将标签扩展到填充所有可用空间。当我尝试它时,两个标签只能扩展到占据空间的三分之二 - 所以看起来如果可以的话,它总是可以留下一个标签的空间。

答案 1 :(得分:-1)

// 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);
    }
};