will
will

Reputation: 10650

Why does enabling word wrap for a QLabel alter the layout?

So i have a small program i've made with Qt Designer, and for the most part, it's completely fine. But there is one niggling problem;

I have a QLabel, for which the text is sometimes too long, so i want to make the text wrap. This should be a simple task.

Here is what it looks like with no wordwrap

enter image description here

And this is fine. But when the text gets too long, it puts in a horrible scroll bar. I don't want this, so i enable wordwrap. But then this happens:

enter image description here

Which at first i thought was just Qt Designer being crap, so compiled and run hoping it would go away. Sometimes this happens, so i thought it was a reasonable assumption.

It wasn't.

enter image description here

Why the hell is this happening?!

EDIT: enabling word wrap manually in the widget initialiser also causes the same behaviour - so it's not caused by Qt Designer, it's an issue elsewhere. Any help would be greatly appreciated!

Here is the content of the UI file:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>705</width>
    <height>347</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Title</string>
  </property>
  <property name="windowIcon">
   <iconset resource="icons.qrc">
    <normaloff>:/icons/icons/3/bonus48x48_20.png</normaloff>:/icons/icons/3/bonus48x48_20.png</iconset>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QGridLayout" name="gridLayout" columnstretch="0,1,1">
    <item row="1" column="0">
     <widget class="QLabel" name="label_molecule">
      <property name="text">
       <string>Molecule:</string>
      </property>
     </widget>
    </item>
    <item row="1" column="1">
     <widget class="QLineEdit" name="lineEdit_molecule"/>
    </item>
    <item row="2" column="0" colspan="2">
     <widget class="QToolBox" name="toolBox_modelDetails">
      <property name="currentIndex">
       <number>0</number>
      </property>
      <widget class="QWidget" name="page_isomer">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>373</width>
         <height>154</height>
        </rect>
       </property>
       <attribute name="label">
        <string>Isomer</string>
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout">
        <item>
         <widget class="QListWidget" name="listWidget_isomers">
          <property name="alternatingRowColors">
           <bool>true</bool>
          </property>
         </widget>
        </item>
       </layout>
      </widget>
      <widget class="QWidget" name="page_model">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>357</width>
         <height>231</height>
        </rect>
       </property>
       <attribute name="label">
        <string>Model</string>
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_2" stretch="0,0">
        <item>
         <widget class="QListWidget" name="listWidget_models">
          <property name="sizePolicy">
           <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
            <horstretch>0</horstretch>
            <verstretch>0</verstretch>
           </sizepolicy>
          </property>
          <property name="font">
           <font>
            <stylestrategy>PreferDefault</stylestrategy>
           </font>
          </property>
          <property name="lineWidth">
           <number>1</number>
          </property>
          <property name="alternatingRowColors">
           <bool>true</bool>
          </property>
         </widget>
        </item>
        <item>
         <widget class="QLabel" name="label_description">
          <property name="text">
           <string>Howdy!</string>
          </property>
          <property name="wordWrap">
           <bool>true</bool>
          </property>
         </widget>
        </item>
       </layout>
      </widget>
      <widget class="QWidget" name="page_basisSet">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>373</width>
         <height>154</height>
        </rect>
       </property>
       <attribute name="label">
        <string>Basis Set</string>
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_3">
        <item>
         <widget class="QListWidget" name="listWidget_basisSets">
          <property name="alternatingRowColors">
           <bool>true</bool>
          </property>
         </widget>
        </item>
       </layout>
      </widget>
     </widget>
    </item>
    <item row="3" column="0" colspan="3">
     <layout class="QHBoxLayout" name="horizontalLayout_buttons">
      <item>
       <spacer name="horizontalSpacer_buttons">
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
        <property name="sizeHint" stdset="0">
         <size>
          <width>40</width>
          <height>20</height>
         </size>
        </property>
       </spacer>
      </item>
      <item>
       <widget class="QPushButton" name="pushButton_save">
        <property name="text">
         <string>Save Input File</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QPushButton" name="pushButton_open">
        <property name="text">
         <string>Open</string>
        </property>
       </widget>
      </item>
     </layout>
    </item>
    <item row="1" column="2" rowspan="2">
     <widget class="QGroupBox" name="groupBox_MoleculeViewer">
      <property name="title">
       <string>Molecule</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources>
  <include location="icons.qrc"/>
 </resources>
 <connections/>
</ui>

Upvotes: 1

Views: 3387

Answers (2)

Richy
Richy

Reputation: 714

QLabel in combination with word wrap and Layouts give some funny behaviour. See https://bugreports.qt.io/browse/QTBUG-37673.

Upvotes: 2

trompa
trompa

Reputation: 2017

Why are you nesting your widgets (the QLabel and the QListWidget) into a QWidget?

That's why you are getting two scrollbars. One from the QListWidget, because it has more items than can be viewed. And one for the parent QWidget.

You should be using layouts.

This is what you have:

enter image description here

Should be something like this:

enter image description here

Upvotes: 1

Related Questions