【问题标题】:How to auto expand label width in QStatusBar如何在 QStatusBar 中自动扩展标签宽度
【发布时间】:2011-04-24 09:04:56
【问题描述】:

我有一个 QStatusBar。我添加了一个标签,在那里显示一个图标。现在,我想通过在另一个标签中设置文本来模拟 QStatusBar::showMessage() 的行为,该标签已作为小部件添加到状态栏。我需要这个,因为我无法在状态栏中设置标准消息的填充。否则图标和文本会重叠。现在我希望包含消息文本的 QLabel 扩展到状态栏的全宽。我该怎么做?

谢谢。

【问题讨论】:

    标签: qt


    【解决方案1】:

    这是您可以尝试的东西,我从未在状态栏上尝试过,所以我不知道它是否有效,但我确实尝试过其他容器并且效果很好。创建一个 HBoxLayout,使用它布置状态栏,添加图标和标签,并将 layoutStretch 设置为 0, 1 (addStretch(0); addStretch(1)), 0 表示图标将拉伸以适应图标,1 它将拉伸到所有剩余空间,使标签扩展为全宽。

    代码如下所示:

    QHBoxLayout *layout = new QHBoxLayout(statusBar);
    layout->setContentsMargins(11, 11, 11, 11);
    statusBar->setLayout(layout);
    layout->addStretch(0);
    layout->addWidget(iconlabel);
    layout->addStretch(1);
    layout->addWidget(textlabel);
    

    抱歉,如果有编译错误,现在不能尝试。希望对您有所帮助。

    编辑: 尽管上面的代码不起作用,但我不会删除它,因为它是其他容器的正确方法。对于状态栏,这应该可以工作:

    statusBar->addWidget(iconLabel, 0);
    statusBar->addWidget(textLabel, 1);
    

    【讨论】:

    • 当我尝试设置布局时出现消息:QLayout: Attempting to add QLayout "" to QStatusBar "", which has a layout QWidget::setLayout: Attempting to set QLayout "" on QStatusBar " ",已经有一个布局
    • 我注意到在构造函数上设置 parent 已经设置了布局,您不需要显式调用 setLayout。
    • 结果是 - 当我首先设置文本时 - 它适合。但是当我之后设置更长的文本时,它似乎被剪掉了。
    • 好的,看来状态栏有一个内置的布局管理器,你应该在 addWidget 函数调用中给出拉伸。查看帖子中的修改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 2014-12-17
    • 2018-12-16
    • 2013-11-19
    • 1970-01-01
    • 2015-04-11
    相关资源
    最近更新 更多