问题描述:在ui界面中布局好了所有的部件,现在想在某一特定的位置上用新定义的一个部件代替ui中同样位置处的部件,而不改变原有布局的顺序及位置关系,该如何实现?目前的状况是部件被替换后原本在窗口最下方的按钮跑到了窗口的最上方。
原本想通过代码来打破原有的布局再重新布局,但不知道QT中打破布局的函数是什么。希望大牛们给解答!
------解决方案--------------------
要想替换布局,可以这样:
1. delete widget->layout();
2. widget->setLayout(newLayout);
如果只是想更新某个位置的控件又不想改变其它的控件,可以为这个位置的控件做一个代理 widget 用来占位,让它的大小和它代理的控件一样,变化控件时代理不变。简单说,占位widget是你要更换的widget的父。
------解决方案--------------------
可以这样:
1),对于horizontalLayout或verticalLayout来说直接removeWidget(老部件),然后insertWidget(新部件),delete老部件;
2),对于老部件gridLayout直接使用addWidget(位置使用老部件的位置)。
------解决方案--------------------
你可以removeWidget,然后addWidget。得益于QObject强大的父子功能,这个问题应该不难解决。