学习记录-Qt窗口控件的动态添加和删除

来源:互联网 发布:重生之2006知乎 编辑:程序博客网 时间:2024/04/19 12:41

一般用Qt写软件,使用designer创建一个窗口,拖几个控件进行一下布局就够用了,但有些需求,需要自定义各种类型的控件,并且很多控件需要根据数据的交互,动态的添加和删除,为此学习了一下Qt的实现方法,在此记录之。

方法是,使用布局的addWidget函数添加控件,删除时使用removeWidget函数,需要设置控件的deleteLater属性,也可以使用delete直接删除。

void ConItem01::checkClick(bool state){    QCheckBox *chk = (QCheckBox *)sender(); //转换成指定的类    QString objName = chk->objectName();    //得到发出信号的对象名    if (objName == "chk1") {        if(state){                          //根据状态选择增加或者删除控件            Frame *fm = new Frame;          //初始化一个自定义的控件类            fm->setObjectName(tr("1#"));    //设置新增对象名称            fm->setTitle(1);                //自定义函数            ui->verticalLayout->addWidget(fm); //添加到水平布局(这里根据需要选择布局)        }else{            Frame *fm = ui->scrollArea->findChild<Frame*>("1#"); //找到指定名称的控件            ui->verticalLayout->removeWidget(fm);                //移除控件            fm->deleteLater();                                               //delete fm;                                         //使用delete也可以        }    <span style="font-family: Arial, Helvetica, sans-serif;">}</span><span style="font-family:Arial, Helvetica, sans-serif;">}</span>

其中,需要注意:

1、新增的控件名称不要重复,以免自己删除时找不到;

2、在需要动态增减控件的部件上添加一个布局控件,然后在布局上增减控件,这样部件大小会跟着变化;

3、新增的控件一定要设置一个控件大小的最小宽和高,不然加入布局就缩到最小了;

4、删除时找指定控件,一定要在部件上找,不要在布局上,否则程序会崩溃;

5、如果有多处操作会删除控件,在分findChild函数后加上指针为空判断,防止程序崩溃。

效果图:





1 0
原创粉丝点击