【发布时间】:2016-08-10 14:04:51
【问题描述】:
我在 Windows7 上使用 Qt5,最近发现 an interesting Qt example code。
基本上是这样的:
ButtonWidget::ButtonWidget(const QStringList &texts, QWidget * parent)
: QWidget(parent)
{
signalMapper = new QSignalMapper(this);
QGridLayout * gridLayout = new QGridLayout;
for (int i = 0; i < texts.size(); ++i)
{
QPushButton * button = new QPushButton(texts[i]);
connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
signalMapper->setMapping(button, texts[i]);
gridLayout->addWidget(button, i / 3, i % 3);
}
connect(signalMapper, SIGNAL(mapped(QString)), this, SIGNAL(clicked(QString)));
setLayout(gridLayout);
}
这是一个不错且有用的示例,但它没有适当的析构函数...以防万一我想删除 ButtonWidget 类型的对象,或者如果我想自定义代码以能够删除/添加小部件。这个想法是如何删除在构造函数中创建的所有对象(动态地,使用new)。
我的方法是使用私有变量QList<QPushButton*> list,将所有新分配的按钮添加到列表中(在构造函数中)并在析构函数中一个一个地删除它们,使用上面的list。但这似乎是幼儿园的方法。
我认为必须有其他方法,更好的方法来做到这一点,没有列表,也不会弄乱构造函数代码:) 感谢您的时间和耐心!
【问题讨论】:
-
您应该阅读 Qt 文档并了解 Qt 如何管理动态分配的对象。
标签: c++ qt dynamic destructor dealloc