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,都要注意这一点。

QLayout: Attempting to add QLayout XXX to XXX, which already has a layout的更多相关文章

  1. (转载)Attempting to add QLayout "" to MainWindow "", which already has a layout

    给QWidget或者QDialog设置布局的时候方式很简单.创建好一个布局:mainLayout,然后不停地把各个控件往mainLayout里面放,最后调用setLayout(mainLayout)就 ...

  2. QWidget::setLayout: Attempting to set QLayout "" on xxx "", which already has a layout

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

  3. Invalid HTTP_HOST header: 'xxx.xx.xxx.xxx:8000'. You may need to add 'xxx.xx' to ALLOWED_HOSTS

    Invalid HTTP_HOST header: 'xxx.xx.xxx.xxx:8000'. You may need to add 'xxx.xx' to ALLOWED_HOSTS - buk ...

  4. Error Domain=ASIHTTPRequestErrorDomain Code=8 "Failed to move file from"xxx/xxx"to"xxx/xxx"

    今天真的好高兴呀 我解决了一个折磨了我一周的问题,真的是激动地要哭出来了,为了这个问题,我嘴也烂了,头发抓了一地啊.虽然解决方法,最后还是展现出了“百度”的伟大,但是我还是很开心,在这里我展示一下我的 ...

  5. #define XXX do{ XXX } while(0) 为什么使用

    #define XXX do{ XXX } while(0) 为什么使用 时常会遇到一个非常"奇怪的宏定义", rt.(欧西巴...思考不够深刻啊, 皮鞭, 啪啪啪) 近期又遇到这 ...

  6. Springboot 2.x 无法读取yml配置值的问题:Could not resolve placeholder xxx value '${xxx}'

    最近在用Springboot2.1 新建demo工程的时候,在DataSourceConfig类中通过 @Value("${spring.datasource.url}") 的方式 ...

  7. Python中的xxx == xx是否等价于xxx is xxx

    先上代码: >>> a = 1 >>> b = 1 >>> a is b True >>> a == b True what? ...

  8. Python中的xxx+=xxx和xxx=xxx+xxx一些区别及执行过程

    预知小知识: Python中的变量与其他语言稍有差异,如a = 10并不是直接在内存中创建一个变量a其值为10,而是在内存中创建一个a这个a指向这个10,在Python中所有牵扯到等号的均不是值赋值, ...

  9. 模块,import,from xxx import xxx

    一,模块 模块就是一个包含了python定义和声明的文件,文件名就是模块的名字加上.py后缀,总体来说,import加载的模块一共分成四个通用的类别: 1,使用python编写的py文件 2,已被变异 ...

随机推荐

  1. Confluence 6 用户目录图例 - 可读写连接 LDAP

    上面的图:Confluence 连接到一个 LDAP 目录. https://www.cwiki.us/display/CONFLUENCEWIKI/Diagrams+of+Possible+Conf ...

  2. npm常用模块

    https://blog.csdn.net/heliumlau/article/details/70577727

  3. Android Studio xml文件中的布局预览视图

    操作系统:Windows 10 x64 IDE:Android Studio 3.3.1 更新了Android Studio之后,xml文件中的布局预览视图变得如此简洁! 原因是没有勾选Show La ...

  4. 在lnmp环境下,将原来的PHP7.0升级到PHP7.2

    基础环境: 系统:centos6.8   环境:lnmp 停止PHP7.0的版本,在做如下操作: 1.下载php-7.2.6.tar.bz2软件包放在/opt 路径下 mkdir /usr/local ...

  5. jenkins 回滚发布

    #jenkins拉取文件路径 workspace=/data/wos/testtemp #备份路径 backspace=/data/wos/back #不能提Git的文件 config=/data/w ...

  6. python unittest装载、执行、造成报告

    #执行用例 caselist = config.caselist for i in range(0,len(caselist)): reportname = caselist[i][2:] now = ...

  7. hdfs数据到hive中,以及hdfs数据隐身理解

    hdfs数据到hive中: 假设hdfs中已存在好了数据,路径是hdfs:/localhost:9000/user/user_w/hive_g2park/user_center_enterprise_ ...

  8. mac下安装Brew 警告:Warning: /usr/local/bin is not in your PATH.

    终端输入命令 export PATH=/usr/local/bin:$PATH

  9. postgresql 10 ssl 双向认证

    https://blog.csdn.net/dna911/article/details/82819637

  10. C++ 成员初始化列表

    1.什么是成员初始化列表 #include<iostream> #include<string> using namespace std; class Weapon { pri ...