c++ - Qt:QWidgets 和指针

标签 c++ qt pointers null

我目前有 3 个公共(public) QWidget 类。 -> x, y ,z 都是 qwidgets.

在我的主窗口中,我有指向 x、y、z 的指针。

所以成员:

X* m_x;
Y* m_y;
Z* m_z;

一个成员函数:

void MainWindow::deleteScreen(QWidget** widget)
{
    if(widget != NULL)
    {
        delete widget;
        widget = NULL;
    }
}

称为: deleteScreen(&m_x); -> 导致无效转换。

如果我将 deleteScreen 参数更改为 QWidget* widget 并调用 deleteScreen(m_x) 它将删除内存,但它不会'将 m_x 设置为 NULL。 (只有局部变量,widget)

-> 有什么方法可以让 deleteScreen 函数删除给定的小部件并将成员变量的值设置为 NULL?

谢谢!

最佳答案

实际上,a double pointer to a base class cannot be used as a double pointer to a derived class ;所以你可能不得不求助于模板:

template<typename T>
void deleteAndCleanup(T*& ptr)
{
    delete ptr;
    ptr = NULL;
}

// called like this:
deleteAndCleanup(m_x);

关于c++ - Qt:QWidgets 和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18557897/

相关文章:

c++ - 在 C++ 中将整数填充/嵌入到字符串中

c++ - 在 C++ 中使用 ALSA 捕获默认音频流

c - 为什么每次调用不同的函数时都会出现<null>?

c++ - 为什么传递给函数的指针的值没有改变?

c++ - 为什么无法识别我重载的乘法运算符?

来自 MPEG 4 文件的 C++ Taglib 封面艺术

c++ - 大理石 window 汇编

c++ - 尝试使用 QTimer 时出现 "No such slot"

qt - 如何在 QT 中的 TreeView 项中呈现复杂的小部件?

c++ - 我收到调试断言失败的第 1662 行