首页 技术 正文
技术 2022年11月6日
0 收藏 638 点赞 284 浏览 1328 个字

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,112
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,585
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,431
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,203
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,838
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,922