c++ - 如何使 QTabWidget 中的选项卡拉伸(stretch)以避免滚动

标签 c++ qt user-interface tabs qtabwidget

我有一个带有几个固定大小的选项卡的 QTabWidget。我想将选项卡小部件放置在布局中以使其随主窗口一起拉伸(stretch),但这会导致滚动条在我收缩时出现在选项卡的右侧,或者在我拉伸(stretch)时出现在选项卡右侧的空白区域出来。我希望选项卡自动填充 QTabWidget 的整个长度。

enter image description here

最佳答案

选项卡小部件非常严格地确保内部的 QTabBar 以最小尺寸创建。然而,一切并没有丢失。

因为我们确实可以访问 QTabBar 和其中的选项卡,所以我们可以做一些事情。我发现以下 answer 这提出了一个简单的解决方法。

基本上使用样式表,我们根据选项卡小部件的当前宽度设置选项卡的宽度。诀窍是确保如果选项卡小部件的宽度发生变化,我们会重新进行此计算。

建议的方法是使用 EventFilter。基本上只需要以下类:

// On resize events, reapply the expanding tabs style sheet
class ResizeFilter : public QObject
{
    QTabWidget *target;
public:
    ResizeFilter(QTabWidget *target) : QObject(target), target(target) {}

    bool eventFilter(QObject *object, QEvent *event)
    {
        if (event->type() == QEvent::Resize)
        {
            // The width of each tab is the width of the tab widget / # of tabs.
            target->setStyleSheet(QString("QTabBar::tab { width: %1px; } ")
                      .arg(target->size().width()/target->count()));
        }
        return false;
    }
};

然后对于您的特定 QTabWidget,只需安装事件处理程序:

ui.tabWidget->installEventFilter(new ResizeFilter(ui.tabWidget));

急!

尽管我要在答案中添加一件事。由于无论显示文本如何,选项卡的大小都相同,因此您可能需要确保在 QTabWidget 上设置“elideMode”属性以处理选项卡中没有足够空间显示整个标题的情况。这将截断文本以适合并添加“...”。

关于c++ - 如何使 QTabWidget 中的选项卡拉伸(stretch)以避免滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17366165/

相关文章:

c++ - 为什么我不能通过传递临时输入迭代器来构造 vector ?

c++ - 带有 C++ 模板的 SWIG : undefined symbol

c++ - qt binarycreator 不创建 dmg

c++ - 头文件中的 QList 声明导致源文件中出现段错误

c++ - QT - 多选

python - Qgridlayout 控制widget的大小

c++ - 忽略使用函数名称定义宏的参数

c++ - 将 boost::asio::ip::address operator == 导出到 python

c++ - 从 QAbstractItemModel 返回自定义用户类型

javascript - 如何修复 HTML 页面中的 "Google signin"按钮样式?