Qt:创建QStackedLayout

时间:2013-08-25 09:42:15

标签: c++ qt variables header

请查看以下代码:

QStackedLayout stackLayout(this);
QStackedLayout stackLayout = QStackedLayout(this);

我有两个问题:
为什么第二种说法不可能?
当我在头文件中声明变量而不是指针时,如何调用QStackedLayout的构造函数?

3 个答案:

答案 0 :(得分:2)

首先,我认为你误解了构造函数。 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,因此不可复制 - 这就是您的第二个陈述不起作用的原因。

答案 1 :(得分:1)

你应该将stackLayout定义为指针

QStackedLayout* stackLayout = new QStackedLayout(this);

答案 2 :(得分:-2)

第一个问题很简单:QStackedayout继承了QObject。您永远不能复制或分配QObject。

你要做的第二个问题是调用QStackedLayout的构造函数。但我想你真的想知道,如何在你的.h文件中做到这一点?只有默认构造函数是可能的。在这种情况下,指针很好。或者您将QStackedLayout layout放在.h文件中,并在构造函数中添加类似layout.setParent(this)的内容。我从来没有这样做过。这对我来说很奇怪。所以我不知道是否有任何缺点。

编辑:嗯... 脸红 ...'唯一的默认构造函数'当然是无意义。有时考虑一两秒钟是值得的。特别是关于自己很少使用的构造。 : - )