Qt designer坑-布局内子控件的顺序错乱
如一个gridlayout,依次是多个按钮 第一行 :button1、button2、button3,第二行 :button4、button5、button6
如果在Qt designer里往布局拖新的控件或删除控件,designer会自行对layout的控件顺序重新自动排序,排序的规则没有研究出来,好像也不是按照控件的名称。这里控件顺序指的不是界面上的排序,而是QLayoutItem *QLayout::itemAt(int index)
对应的index,比如itemAt(0)直观觉得应该返回button1,但它却返回button5
如何确保itemAt的顺序跟界面上的控件顺序一致?必须人为编辑.ui文件,实际上是一个xml文件,找到gridlayout的字段,如
<layout class="QGridLayout" name="gridLayout"><item row="1" column="1"><widget class="QToolButton" name="button5"> <property name="text"><string>5</string></property><property name="iconSize"><size><width>50</width><height>50</height></size></property></widget></item>...<item row="0" column="0"><widget class="QToolButton" name="button1"> <property name="text"><string>1</string></property><property name="iconSize"><size><width>50</width><height>50</height></size></property></widget></item>
</layout>
把button1调整到最前面,保存,重新编译.ui文件即可,这样itemAt(0)返回的就是button1,itemAt的顺序是跟.ui里的顺序一致的。
但只要再用Qt designer编辑控件,.ui里的顺序就又会被打乱,这个问题非常恼人,目前没办法,只能避免用Qt designer,自己手动改.ui
用到itemAt的场景,如隐藏了layout里的控件,但控件仍然占着空位,想让其它控件自动填充空位,此时可以先把隐藏的控件从layout里去掉,再把剩余的控件(通过itemAt获取剩余控件)全部去掉,重新逐一添加回layout。如果itemAt的顺序跟原来界面上的不一样,控件的位置就不对了