zoukankan      html  css  js  c++  java
  • QLayout: Attempting to add QLayout XXX to XXX, which already has a layout

    QLayout是Qt应用开发中一个非常重要的组件,然而平时使用的时候不小心经常会发现控制台有类似如下的警告:

    QLayout: Attempting to add QLayout "" to studio::FootageListDock "footagelistDock", which already has a layout
    

    网上关于这方面的解释一直比较混乱,而且是抄来抄去的,主要是集中在QMainWindow的问题。但是实际上,如果不注意的话,任意的QWidget上使用QLayout都会出现这个警告。其实原因一般有两个:

    (1)已经显式设置了QLayout后,再次给QWidget设置QLayout。这种情况下就是两次调用了QWidgetsetLayout方法。解决办法是优化代码或者删掉其中一个QLayout

    (2)隐式的设置了QLayout后,再次给QWidget设置QLayout。这种情况是怎么产生的呢?看下面代码:

    FootageListDock::FootageListDock(QWidget* parent)
    	: QDockWidget(parent) { 
    	setObjectName("footagelistDock");
    	setWindowTitle(tr("Footage List")); 
    	setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
    	
    	QHBoxLayout* mainLayout = new QHBoxLayout(this);  ## 1
    	mFootageList = new FootageListWidget(this);       ## 2
    	mFootageList->setRowCount(3);
    	mFootageList->setColumnCount(1);
    	mFootageList->setItem(0,0,new QTableWidgetItem("Jan"));
    	mFootageList->setItem(1,0,new QTableWidgetItem("Feb"));
    	mFootageList->setItem(2,0,new QTableWidgetItem("Mar"));
    	mFootageList->setRowCount(mFootageList->rowCount() + 1);
    	mFootageList->setItem(3,0, new QTableWidgetItem("April"));
    
    	mainLayout->addWidget(mFootageList);
    	QWidget* centralWidget = new QWidget(this);
    	centralWidget->setLayout(mainLayout);  ## 3
    	setWidget(centralWidget);
    } 
    

    其中,1和2两处代码通过this指针设置了QLayout的所属组件,也就是隐式的设置了这个QWidget的布局。而后面3处代码又再次显式调用了setLayout()方法,相当于重复设置了。于是出现了上面的警告。解决办法是,删掉1/2处的this指针或者setLayout调用即可。不管是什么类型的QWidget,都要注意这一点。

  • 相关阅读:
    Ubuntu 14.04 卸载通过源码安装的库
    Ubuntu 14.04 indigo 相关依赖
    Ubuntu 14.04 indigo 安装 cartographer 1.0.0
    Ubuntu 14.04 改变文件或者文件夹的拥有者
    安装cartographer遇到Unrecognized syntax identifier "proto3". This parser only recognizes "proto2"问题
    Unrecognized syntax identifier "proto3". This parser only recognizes "proto2". ”问题解决方法
    查看所有用户组,用户名
    1卸载ROS
    Ubuntu14.04 软件安装卸载
    Ubuntu14.04系统显示器不自动休眠修改
  • 原文地址:https://www.cnblogs.com/csuftzzk/p/qlayout_warnings.html
Copyright © 2011-2022 走看看