如何包装 QFormLayout 的第二个条目的行?附上实际和预期结果图像
Posted
技术标签:
【中文标题】如何包装 QFormLayout 的第二个条目的行?附上实际和预期结果图像【英文标题】:How to wrap rows of second entry of QFormLayout?Actual and Expected result images are attached 【发布时间】:2021-05-26 15:42:52 【问题描述】:我正在使用 QFormLayout,但行的第二项没有得到垂直包装。
.ui文件内容为
<widget class="QScrollArea" name="scrollArea">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>524</width>
<height>281</height>
</rect>
</property>
<layout class="QFormLayout" name="flPatientInfo">
<property name="rowWrapPolicy">
<enum>QFormLayout::WrapLongRows</enum>
</property>
<property name="verticalSpacing">
<number>5</number>
</property>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
添加行的代码 -
for (auto info : patientInfo.toStdMap())
QLabel *fieldData = new QLabel(GetTranslatedString(info.second.second));
fieldData->setProperty("FieldData", true);
m_GUI->m_UI->flPatientInfo->addRow(GetTranslatedString(info.second.first), fieldData);
实际结果
预期结果
【问题讨论】:
【参考方案1】:QFormLayout::RowWrapPolicy
必须处理标签和小部件的布局方式,而不是小部件是否损坏。如果label+widget的可用空间不够,使用QFormLayout::WrapLongRows
时,widget只是简单的布局在新的一行中。
您添加一个QLabel
作为小部件,这通常不会破坏文本,而是写在一行中。您需要使用 setWordWrap
在该标签上启用自动换行:
for (auto info : patientInfo.toStdMap())
QLabel *fieldData = new QLabel(GetTranslatedString(info.second.second));
fieldData->setProperty("FieldData", true);
fieldData->setWordWrap(true); // HERE
m_GUI->m_UI->flPatientInfo->addRow(GetTranslatedString(info.second.first), fieldData);
【讨论】:
添加 fieldData->setWordWrap(true) ,但得到相同的实际结果。 我明白了,您的表单布局位于滚动区域内。在这种情况下,自动换行不会像往常一样工作。我会尝试寻找其他解决方案以上是关于如何包装 QFormLayout 的第二个条目的行?附上实际和预期结果图像的主要内容,如果未能解决你的问题,请参考以下文章
从第二个字段逐行搜索模式并打印出与找到该模式的行对应的第一个字段