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<int,QToolButton> 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->findChild<QToolButton *>()
,不过不知道有没有性能问题。以上是关于QTabWidget 中的标签文本对齐的主要内容,如果未能解决你的问题,请参考以下文章
Qt,QWidget,QTabWidget,QTabBar:如何将文本移动到图标的底部?
如何从 QTabWIdget C++ 读取 textedit 对象的文本?
如何在Qt中获取QWidget的QTabWidget标题文本?