如何将qwidget添加到qlist <qwidget>

时间:2017-01-03 13:40:29

标签: c++ qt qt4

我有几个小部件,比如

QLineEdit           m_namePoiFilter;
QLineEdit           m_ID_MSSIPoiFilter;

我想将它们添加到qwidgets列表中,然后将所有这些都设置为可见。

我做了

QList<QWidget>      m_PoiFilterWidgets;

但我不能像

那样添加项目
m_PoiFilterWidgets.push_back(m_namePoiFilter);

2 个答案:

答案 0 :(得分:1)

你需要通过一个指针来保存它们,你应该使用像std::array这样的低开销容器。 E.g:

class Foo {
   QLineEdit m_namePoiFilter;
   QLineEdit m_ID_MSSIPoiFilter;
   std::array<QLineEdit*, 2> const m_edits = {&m_namePoiFilter, &m_ID_MSSIPoiFilter};
};

这段代码可以安全地避免通过构造悬挂指针:m_edits将在构建小部件之后构造,并且在小部件被销毁之前将被销毁:因此其内容始终有效。

我避免QList / QVector,因为这些在堆上分配 - 在您的情况下不必要。

答案 1 :(得分:0)

定义QWidgets的QObjects是不可复制的。这意味着您必须将它们存储在列表中作为指向窗口小部件的指针(即QList<QWidget *>)。