QWidget Initialization 在函数调用中的不同行为
QWidget Initialization different behavior in function calls
我定义了一个QWidget
并将其初始化为NULL:
QWidget* widget;
widget = NULL;
稍后单击按钮时,我会初始化此小部件并调用显示函数。在后续运行中,如果它已经初始化,我只需调用 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 的指针并总是初始化一个新的小部件。
我不明白在这种情况下到底发生了什么变化?
参数w
是一个指针,但它本身是按值传递的。 w
函数内部是从参数复制过来的,任何修改都与原参数无关
您可以将其更改为按引用传递,例如
void showGUI(QWidget*& w){
if(w == NULL){
w = new QWidget();
w->show();
} else {
w->show();
}
}
我定义了一个QWidget
并将其初始化为NULL:
QWidget* widget; widget = NULL;
稍后单击按钮时,我会初始化此小部件并调用显示函数。在后续运行中,如果它已经初始化,我只需调用 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 的指针并总是初始化一个新的小部件。
我不明白在这种情况下到底发生了什么变化?
参数w
是一个指针,但它本身是按值传递的。 w
函数内部是从参数复制过来的,任何修改都与原参数无关
您可以将其更改为按引用传递,例如
void showGUI(QWidget*& w){
if(w == NULL){
w = new QWidget();
w->show();
} else {
w->show();
}
}