1

请看下面的代码:

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

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

4

3 回答 3

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 ,因此不可复制 - 这就是您的第二条语句不起作用的原因。

于 2013-08-25T09:51:06.740 回答
1

您应该将 stackLayout 定义为指针

QStackedLayout* stackLayout = new QStackedLayout(this);
于 2013-08-25T09:48:22.203 回答
-2

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

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

编辑:呃……脸红……“唯一的默认构造函数”当然胡说八道。有时多思考一两秒是值得的。尤其是关于自己很少使用的构造。:-)

于 2013-08-25T09:49:43.957 回答