我正在构建一个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();
}