c++ - QWidget Initialization 在函数调用中的不同行为

标签 c++ qt pointers qwidget

我定义了一个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();
     }
}

关于c++ - QWidget Initialization 在函数调用中的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50871383/

相关文章:

qt - 如何将属性传递给Loader创建的对象?

c - 指向本地范围内的结构体段错误数组的指针 (C)

指向字符数组的字符指针而不是赋值

c++ - 如何将 QMetaMethod 与 QObject::connect 一起使用

c++ - QT analog of .NET User settings 是什么,使用起来类似吗?

c++ - 在 C++ 中创建和传递多维数组的优雅方法?

c++ - 重新绘制后如何在 qcustomplot 中重置 x 和 y 轴(Qt)

c++ - 假设每个静态库都定义了导出的功能 (vc++ 2008),如何将多个静态链接库合并到一个 dll 中?

c++ - 运行时堆栈溢出

c++ - Qt类及其成员之间的循环依赖