gpt4 book ai didi

c++ - 使 QLabel 宽度独立于文本

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:38 25 4
gpt4 key购买 nike

我需要一个 QLabel,其宽度不应适应包含的文本,但可由用户调整大小(或确切地说是布局)。如果文本对于 QLabel 的宽度而言太长,则应简单地对其进行剪裁。

这个问题在某种程度上是相反的 How to make QLabel expand width geometry to accommodate text .但是,那个问题的内容对我没有帮助。 Setting text on a QLabel in a layout, doesn't resize 也没有.

背景

QLabel 将显示来自另一个系统的标识符(单个单词)。有时这些标识符每秒变化多次,这使得整个布局闪烁。 QLabel 是垂直停靠栏的一部分,因此停靠栏的宽度会闪烁。

另一方面,应该由用户决定他/她可以看到多少标识符。所以我想允许用户更改停靠栏的宽度,以便 QLabel 的宽度适应它。

解决方案尝试

为了实现这一点,我将水平大小策略设置为 QSizePolicy::Preferred 并从 QLabel 派生了我自己的标签类,其中我已经覆盖了 sizeHint( ) 以返回固定大小。但这并没有改变行为。

我知道我可以应用 QFontMetrics 来计算文本的宽度,然后将其剪切以适合 QLabel 宽度。但这似乎不是正确的解决方案,特别是因为我希望在最后一个字母不完全适合时将其本身剪掉,以便为用户提供标识符太长而无法显示的线索。

版本

  • Qt 5.5.1
  • 海湾合作委员会 5.4.0
  • 全部来自当前的 Ubuntu 16.04 存储库

最佳答案

缩放文本不是一个好主意,因为缩放文本在长字符串和小标签的情况下几乎不可见。作为替代方案,我会将我的标签放在滚动区域中,这样它就可以容纳任何大小的标签而无需调整自身大小(并防止我的 GUI 闪烁)。这是一个简单的示例:

QLabel *label = new QLabel;
label->setAlignment(Qt::AlignTop);

QScrollArea *scrollArea = new QScrollArea;
scrollArea->setWidgetResizable(true);
scrollArea->setWidget(label);

label->setText("ThisIsVeryLargeStringThatIWantToPutIntoALabel");
scrollArea->show();

这个滚动区域可以放在一个可停靠的窗口中。

关于c++ - 使 QLabel 宽度独立于文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48640888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com