如何包装 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 的第二个条目的行?附上实际和预期结果图像的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式删除与第二个字符串匹配的行?

从第二个字段逐行搜索模式并打印出与找到该模式的行对应的第一个字段

将第一个文件的第一列与第二个文件中的行匹配,然后将第二个文件中匹配行的最后一列插入第一个文件中的新第一列

获取 Swift 数组中的第一个条目

如何为 QFormLayout 的第一列设置最小宽度?

仅当rdd的第二个字段中存在时,如何从一个字段rdd中选择值