QTabWidget 中的标签文本对齐

Posted

技术标签:

【中文标题】QTabWidget 中的标签文本对齐【英文标题】:Tab text alignment in QTabWidget 【发布时间】:2015-12-03 12:32:31 【问题描述】:

我正在使用 Qt 的 QTabWidget 类。 在 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);

有关示例应用程序的输出,请参阅下面的屏幕截图。 选择当前选项卡时,ToolButton都应该显示和文本ELIDE模式应该是正确的,但是当没有选择选项卡时,应不会显示ToolButton,但应留下文本ELINE模式。

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

当没有选择标签时,有人可以指导我如何删除空格(屏幕截图中的最后一个标签)吗?

【问题讨论】:

如果 QToolButtons 隐藏它们也应该折叠并且不再使用任何空间..你如何隐藏它们?请提供一个完整的最小工作链接示例。 为了隐藏工具按钮,我只是在迭代父对象,一旦我得到工具按钮对象,它将被下面的语句隐藏。 tb->hide(); 【参考方案1】:

你必须:

    跟踪标签索引和相应的持有小部件(比如说std::map&lt;int,QToolButton&gt; toolbutton_by_index 发出QTabWidget.currentChanged 时,停用除所选小部件之外的所有小部件

你可以这样做第二部分:

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

【讨论】:

这会很有帮助,但我不想使用地图。我想从父对象和我想隐藏的工具按钮对象中找到子对象。 在这种情况下,您需要遍历对应的children,方法是遵循父子关系并使用qobject_cast 测试/转换它们为/到QToolButton 感谢您的回复。我试图遍历孩子,但上面的代码只将“MyWebView”对象作为孩子。我无法获得 QToolButton 孩子。 你只是在尝试***孩子。也可以使用m_addNewTab-&gt;findChild&lt;QToolButton *&gt;(),不过不知道有没有性能问题。

以上是关于QTabWidget 中的标签文本对齐的主要内容,如果未能解决你的问题,请参考以下文章

PyQt:可编辑的 QTabWidget 选项卡文本

Qt,QWidget,QTabWidget,QTabBar:如何将文本移动到图标的底部?

如何从 QTabWIdget C++ 读取 textedit 对象的文本?

如何在Qt中获取QWidget的QTabWidget标题文本?

Qt 5,为 QTabWidget 中的每个 QTextBrowser 撤消/重做

将字段标签的基线与文本输入中的文本基线对齐