本文主要是介绍对于UI界面的某一部分,需要切换为新的内容控件和布局的解决方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
对于UI界面的某一部分,需要切换为新的内容控件和布局的解决方法:
通过在此区域添加为QLayout,然后对QLayout的addWidgetremoveWidget来完成该区域内容的改变。
复杂的界面的布局,就需要一些动态的调整的添加控件。
QLayout如果可以设定大小,并能动态的改变里面添加的控件布局,那么就会解决一些复杂UI的开发。
我想在QWidget里面动态的添加和删除控件,给QWidget设置了一个布局管理器QVBoxLayout,通过给该管理器添加控件,来形成新的界面。
要添加QLayout可以用addWidget,如果需要切换新的界面,就通过删除另一个函数removeWidget
要删除控件可以 使用QVBoxLayout::removeWidget(QWidget *w)方法,
获取
但是移除之后,那个被移除的控件还显示在里面。
光调用这个remove方法还不行,必须在调用之后delete这个被移除的控件,貌似这个是qt为了防止内存泄露所做的保护机制,因为如果调用了remove方法之后,不进行delete的话,那么这个控件就属于野指针了,而且在界面上还会显示并没有移除掉。
QVBoxLayout * vly = ui->verticalLayout;
int hlyCount = vly->count();
qDebug()<<"hlyCount =="<<hlyCount;
for(int i = hlyCount - 1; i >= 0 ; i--) //###改动:items编号,从大到小遍历
{
QLayoutItem * item = vly->itemAt(i);
if (item != nullptr) //###改动:判断子项是否存在
{
vly->removeItem(item);
delete item->widget();
delete item;
}
qDebug()<<"remove item "<<i;
}
hlyCount = vly->count();
qDebug()<<"hlyCount =="<<hlyCount;
这篇关于对于UI界面的某一部分,需要切换为新的内容控件和布局的解决方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!