QTabWidget 中的选项卡文本对齐

Tab text alignment in QTabWidget

我正在使用 Qt 的 QTabWidget class。 在 TabWidget 中,我正在动态添加新选项卡并将 TextElideMode 设置为右侧以在 tabBar 中显示工具按钮。

tabWidget = new QTabWidget(this);
m_addNewTab = new QWidget(tabWidget);
m_addNewGridLayout = new QGridLayout(m_addNewTab);
m_addNewWebView = new MyWebView(m_addNewTab);
widget = new QWidget(m_addNewTab);
tb = new QToolButton(widget);
tb->setFixedHeight(20);
tb->setText("<");
tb1 = new QToolButton(widget);
tb1->setFixedHeight(20);
tb1->setText(">");

m_horizontalLayout = new QHBoxLayout(widget);
m_horizontalLayout->addWidget(tb);
m_horizontalLayout->addWidget(tb1);

示例应用程序的输出请参见下面的屏幕截图。 When the current tab is selected then both the toolbutton should display and text elide mode should be right but when tab is not selected then toolbutton should not be displayed but text elide mode should be left.

在下面的屏幕截图中,我可以根据选项卡选择隐藏和显示工具按钮,但是当未选择选项卡时,文本消除模式设置为正确的,因此我们能够看到不必要的 space (检查最后一个选项卡)。将文本省略模式设置为左侧也不起作用,因为我们已经在左侧设置了工具按钮。

有人可以指导我如何在未选择选项卡时删除 space(屏幕截图中的最后一个选项卡)吗?

你必须:

  1. 跟踪选项卡索引和相应的保存小部件(假设 std::map<int,QToolButton> toolbutton_by_index
  2. 当发出 QTabWidget.currentChanged 时,停用除所选
  3. 之外的所有小部件

你可以这样做第二部分:

std::for_each(toolbutton_by_index.begin(), toolbutton_by_index.end(),
        [&index](auto pair){
            (pair.first == index)?pair.second->hide():pair.second->show()});