C++ Qt:创建QStackedLayout
请查看以下代码:C++ Qt:创建QStackedLayout,c++,qt,variables,header,C++,Qt,Variables,Header,请查看以下代码: QStackedLayout stackLayout(this); QStackedLayout stackLayout = QStackedLayout(this); 我有两个问题: 为什么第二种说法不可能? 当我在头文件中声明变量不是指针时,如何调用QStackedLayout的构造函数?您应该将stackLayout定义为指针 QStackedLayout* stackLayout = new QStackedLayout(this); 您应该将stackLayout
QStackedLayout stackLayout(this);
QStackedLayout stackLayout = QStackedLayout(this);
我有两个问题:为什么第二种说法不可能?
当我在头文件中声明变量不是指针时,如何调用QStackedLayout的构造函数?您应该将stackLayout定义为指针
QStackedLayout* stackLayout = new QStackedLayout(this);
您应该将stackLayout定义为指针
QStackedLayout* stackLayout = new QStackedLayout(this);
第一个问题很简单:qstackedYout继承QObject。您永远不能复制或分配QoObject 第二个问题是调用QStackedLayout的构造函数。但我想您真的想知道,如何在.h文件中执行此操作?只有默认构造函数是可能的。在这种情况下,指针是可以使用的。或者在.h文件中放入
QStackedLayout布局
,并在构造函数中添加类似layout.setParent(this)的内容。我从来没有这样做过。我觉得很奇怪。所以我不知道是否有任何缺点
编辑:呃。。。脸红“唯一的默认构造函数”当然是毫无意义的。有时候,多想一两秒钟是值得的。尤其是关于自己很少使用的构造。:-) 第一个问题很简单:qstackedYout继承QObject。您永远不能复制或分配QoObject 第二个问题是调用QStackedLayout的构造函数。但我想您真的想知道,如何在.h文件中执行此操作?只有默认构造函数是可能的。在这种情况下,指针是可以使用的。或者在.h文件中放入
QStackedLayout布局
,并在构造函数中添加类似layout.setParent(this)的内容。我从来没有这样做过。我觉得很奇怪。所以我不知道是否有任何缺点
编辑:呃。。。脸红“唯一的默认构造函数”当然是毫无意义的。有时候,多想一两秒钟是值得的。尤其是关于自己很少使用的构造。:-) 首先,我认为您误解了构造函数。Qt将父元素作为其元素,因为它将在堆上创建时管理其存储持续时间:
// here you need this constructor, so Qt will free the resource for you
QStackedLayout * layout = new QStackedLayout(this);
// here you don't need it, the object has automatic storage duration
QStackedLayout layout;
然后,如果要为头文件中声明的对象调用特定构造函数,请使用初始化列表:
struct foo
{
foo()
: s("demo")
{}
std::string s;
};
对象源自
QObject
,因此不可复制-这就是为什么您的第二条语句不起作用。首先,我认为您误解了构造函数。Qt将父元素作为其元素,因为它将在堆上创建时管理其存储持续时间:
// here you need this constructor, so Qt will free the resource for you
QStackedLayout * layout = new QStackedLayout(this);
// here you don't need it, the object has automatic storage duration
QStackedLayout layout;
然后,如果要为头文件中声明的对象调用特定构造函数,请使用初始化列表:
struct foo
{
foo()
: s("demo")
{}
std::string s;
};
对象源于
QObject
,因此不可复制-这就是为什么您的第二个语句不起作用。我不太理解您的第二个问题。你能展示一些你想用但不想用的示例代码吗?请同时说明您遇到的编译器错误。我不太理解您的第二个问题。你能展示一些你想用但不想用的示例代码吗?还请说明您得到的确切编译器错误。您可以使用初始值设定项列表以某种方式构造成员变量。“只有默认构造函数是可能的”是错误的。在这种情况下,它是正确的,因为QStackedLayout是不可复制的。再试一次,再错一次。类构造函数的初始化列表与复制对象无关,请参阅“只需尝试”.h文件中的“QStackedLayout”和初始值设定项列表中的“layout(QStackedLayout(this))。在这里,您显式调用复制构造函数-在列表中放置layout(this)
。那很好。由于存储问题,它在逻辑上是错误的,但是它编译得很好,并且没有使用标准构造函数。唯一不能做的事情是显式调用复制构造函数。可以使用初始值设定项列表以某种方式构造成员变量。“只有默认构造函数是可能的”是错误的。在这种情况下,它是正确的,因为QStackedLayout是不可复制的。再试一次,再错一次。类构造函数的初始化列表与复制对象无关,请参阅“只需尝试”.h文件中的“QStackedLayout”和初始值设定项列表中的“layout(QStackedLayout(this))。在这里,您显式调用复制构造函数-在列表中放置layout(this)
。那很好。由于存储问题,它在逻辑上是错误的,但是它编译得很好,并且没有使用标准构造函数。唯一不能做的事情是显式调用复制构造函数。