使 QLabel 宽度与文本无关

bjh*_*end 6 c++ qt qwidget qlabel qt5

我需要一个QLabel其宽度不应该适应所包含的文本,但可以由用户调整大小(或者确切地说是布局)。如果文本对于宽度而言太长,QLabel则只需将其剪掉即可。

这个问题在某种程度上与How to make QLabel Expand width Geometry to Accommodation text相反 。然而,这个问题的内容对我没有帮助。在布局中的 QLabel 上设置文本也没有调整大小。

背景

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

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

解决方案尝试

为了实现这一目标,我设置了水平尺寸策略QSizePolicy::Preferred并派生了我自己的标签类,QLabel我已重写该标签类sizeHint()以返回固定尺寸。但这并没有改变行为。

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

版本

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

vah*_*cho 4

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

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

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

label->setText("ThisIsVeryLargeStringThatIWantToPutIntoALabel");
scrollArea->show();
Run Code Online (Sandbox Code Playgroud)

该滚动区域可以放置在可停靠窗口中。