将Qt类与unique_ptr

时间:2018-01-26 23:53:22

标签: c++ qt memory

我正在构建一个Qt 5应用程序。我希望我的所有Qt对象都指向unique_ptr,所以我不必担心调用delete

我的代码(下面)编译。问题是,当我关闭程序时,我在主类static_assert的析构函数中点击Interface。消息是“无法删除不完整的类型”,并且在监视窗口中显示QFlags<enum Qt::AlignmentFlag>的析构函数中未知QGridLayout。我不确定为什么会这样 - 我可以在我的主函数中使用Qt::AlignmentFlag等等。

关于堆栈溢出的类型不完整的unique_ptr存在类似的问题。但是,这似乎是一个特定于Qt的问题(即我没有在我的代码中明确使用前向声明等)。任何帮助将不胜感激。

#include <memory>
#include <QApplication>
#include <QMainWindow>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QListView>
#include <QWidget>
#include <Qt>

class Interface
{
    std::unique_ptr<QMainWindow> mainWindow;
    std::unique_ptr<QListView> mainList;
    std::unique_ptr<QVBoxLayout> verticalLayout;
    std::unique_ptr<QGridLayout> mainLayout;
    std::unique_ptr<QWidget> mainWidget;

public:

    Interface()
    {
        mainWidget.reset(new QWidget());
        mainList.reset(new QListView());
        verticalLayout.reset(new QVBoxLayout());
        mainLayout.reset(new QGridLayout());
        mainWindow.reset(new QMainWindow());

        verticalLayout->addWidget(mainList.get());
        mainLayout->addLayout(verticalLayout.get(), 0, 0, 1, 1);
        mainWidget->setLayout(mainLayout.get());
        mainWindow->setCentralWidget(mainWidget.get());
        mainWindow->show();
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Interface i;
    return a.exec();
}

0 个答案:

没有答案