xia_ya_bin
赛寞微控
采纳率63.6%
2017-03-09 09:38 阅读 2.1k

QT中如何在当前打开的所有窗体中,关闭指定的objectName的窗体。

QT中如何在当前打开的所有窗体中,关闭指定的objectName的窗体。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • xia_ya_bin 赛寞微控 2017-03-09 09:48

    QWidgetList FormList=QApplication::allWidgets();
    for(int i=0;i!=FormList.count();++i)
    {
    QWidget *tmp=FromList.at(i);
    if(tmp->objectName=="xxxx")
    {
    tmp->close();
    }
    }

    这样写可不可以?因为要反复调用这个方法,执行效率会不会很低。

    点赞 评论 复制链接分享
  • xia_ya_bin 赛寞微控 2017-03-09 09:55

    在网上查询,QApplication::allWidgets()必须用new来申请内存,然后手动释放,否则会造成内存泄露,是不是要改成:
    QWidgetList *FormList=new QWidgetList(QApplication::allWidgets());
    for(int i=0;i!=FormList->count();++i)
    {
    QWidget *tmp=FromList->at(i);
    if(tmp->objectName=="xxxx")
    {
    tmp->close();
    }
    }

    这样是不是避免了内存泄露的问题 本人小白 希望大牛们帮助一下

    点赞 评论 复制链接分享
  • xia_ya_bin 赛寞微控 2017-03-09 09:56

    上面忘了 delete FormList;

    点赞 评论 复制链接分享
  • kidults kidults 2017-06-11 08:11

    你得首先用setObjectname()设置各个窗口的名字

    点赞 评论 复制链接分享

相关推荐