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。但这似乎不是正确的解决方案,特别是因为我希望将最后一个字母本身剪掉(如果它不完全适合),以便向用户提供标识符太长而无法显示的线索。
缩放文本不是一个好主意,因为在长字符串和小标签的情况下,缩放后的文本几乎不可见。作为替代方案,我会将标签放在滚动区域中,这样它就可以容纳任何大小的标签,而无需调整自身大小(并防止我的 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)
该滚动区域可以放置在可停靠窗口中。
| 归档时间: |
|
| 查看次数: |
4697 次 |
| 最近记录: |