更详细的答案,虽然是以前的问题了,但是最近我也碰到这问题,解决后于是发此贴,已保证以后有同样麻烦的人不会再被这问题迷惑
首先让我看下QLayout的一个构造函数的写法
QLayout::QLayout ( QLayoutPrivate & d,
QLayout * ,
QWidget *
) [protected]
Definition at line 104 of file qlayout.cpp.
References addItem(), d, invalidate(), QObject::objectName(), qWarning(), QObject::setParent(), and w.
00105 : QObject(dd, lay ? static_cast<QObject*>(lay) : static_cast<QObject*>(w))
00106 {
00107 Q_D(QLayout);
00108 if (lay) {
00109 lay->addItem(this);
00110 } else if (w) {
00111 if (w->layout()) {
00112 qWarning("QLayout: Attempting to add QLayout \"%s\" to %s \"%s\", which"
00113 " already has a layout",
00114 qPrintable(QObject::objectName()), w->metaObject()->className(),
00115 w->objectName().toLocal8Bit().data());
00116 setParent(0);
00117 } else {
00118 d->topLevel = true;
00119 w->d_func()->layout = this;
00120 invalidate();
00121 }
00122 }
00123 }
楼主的提示是因为第00112行的那句话,所以简单来说,楼主在mainwindows里面构造一个layout的时候调用了
QLayout::QLayout ( QLayoutPrivate & d,
QLayout * ,
QWidget *
)
,
举例来说
我在mainwindows 写m_layout = new QGridLayout可以而写成m_layout = new QGridLayout(this)则不行,原因,见于上面的代码