QWidget初始化函数调用中的不同行为

时间:2018-06-15 07:58:32

标签: c++ qt pointers qwidget

我定义了一个QWidget并将其初始化为NULL:

QWidget* widget;
widget = NULL;

稍后单击一个按钮时,我会初始化此小部件并调用show函数。在后续运行中,如果它已经初始化,我只需调用show函数:

if(widget == NULL){
   widget = new QWidget();
   widget->show();
} else {
   widget->show();
}

它工作正常,我发现如果它已经初始化,那么它不会再次初始化。
但是现在考虑这个场景我将小部件传递给函数来做同样的事情:

void showGUI(QWidget* w){
     if(w == NULL){
          w = new QWidget();
          w->show();
     } else {
          w->show();
     }
}

每当调用按钮时:

showGUI(widget);

但是这一次,它始终在评估指向NULL的指针并始终初始化一个新的小部件。
我不明白在这种情况下真正改变了什么?

1 个答案:

答案 0 :(得分:0)

参数w是一个指针,但它是由值本身传递的。函数内部的w从参数中复制,对它的任何修改都与原始参数无关。

您可以将其更改为传递参考,例如

void showGUI(QWidget*& w){
     if(w == NULL){
          w = new QWidget();
          w->show();
     } else {
          w->show();
     }
}