Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt:创建QStackedLayout_C++_Qt_Variables_Header - Fatal编程技术网

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)
。那很好。由于存储问题,它在逻辑上是错误的,但是它编译得很好,并且没有使用标准构造函数。唯一不能做的事情是显式调用复制构造函数。