【问题标题】:I'm following Qt Tutorials and got a simple question我正在关注 Qt 教程并得到一个简单的问题
【发布时间】:2011-02-18 15:23:49
【问题描述】:

如果我想创建自己的类 MyWidget,它继承自 QWidget

教程告诉我这样写构造函数...

MyWidget::MyWidget(QWidget *parent)
: QWidget(parent){....}

我想知道:QWidget(parent)的作用是什么

这是否意味着显式调用 QWidget 的构造函数?

【问题讨论】:

    标签: qt constructor qt4 colon


    【解决方案1】:

    是的。在 C++ 中,如果您希望它运行,则必须在构造函数的 initialization list 中显式调用基类的构造函数。在这种情况下,QWidget(parent) 将在运行构造函数中的代码之前运行。顺便说一句,这不仅仅是 Qt 的事情,而且在 C++ 继承中很常见。

    【讨论】:

      【解决方案2】:

      除了上一个答案:

      1 就像之前提到的,如果 parent 不为 null,您的小部件将仅在父小部件内呈现。

      2 如果父窗口小部件被删除,您的所有子窗口小部件也将被删除操作符删除。

      默认小部件构造函数的正确实现应该如下:

      class MyWidget: public QWidget {
          Q_OBJECT
          public:
              explicit MyWidget(QWidget *parent = 0);
      }
      
      MyWidget::MyWidget(QWidget *parent = 0): QWidget(parent) {
          // Your own initialization code
      }
      

      尽量避免为堆栈小部件指定非零父级。您最好始终以这种方式创建嵌套小部件:

      QWidget *parentWidget;
      MyWidget myWidget = new MyWidget(parentWidget);
      

      您可以在此处阅读更多内容: http://doc.trolltech.com/4.6/objecttrees.html

      【讨论】:

        【解决方案3】:

        来自"yours"Qt教程:因为这个类继承自QWidget,所以新的类是一个widget,可能是顶层窗口,也可能是子widget(如上一章的QPushButton)

        祝你好运!

        【讨论】:

          【解决方案4】:

          这在 C++ 中称为初始化列表,是的,它是对 QWidget 构造函数的显式调用。默认情况下,C++ 调用其基类构造函数的无参数版本,除非在初始化列表中有显式调用。通常认为类成员的初始化由该类的构造函数处理被认为是好的设计 - Qt 遵循此约定。所以,在这里你传递一个指向它的基类的构造函数的指针,所以它可以将它存储在它的一个成员变量中。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-10-17
            • 2015-11-07
            • 1970-01-01
            • 2012-02-29
            • 1970-01-01
            • 1970-01-01
            • 2011-03-22
            • 2023-01-31
            相关资源
            最近更新 更多