2017-01-03 60 views
1

我有几个小部件,像如何添加到QWidget的<qwidget>的QList

QLineEdit   m_namePoiFilter; 
QLineEdit   m_ID_MSSIPoiFilter; 

我想将它们添加到qwidgets的列表,然后将所有的人都看到。

我已经

QList<QWidget>  m_PoiFilterWidgets; 

但我不能将项目添加到它像

m_PoiFilterWidgets.push_back(m_namePoiFilter); 

回答

1

你需要通过一个指针来保持这些,你应该使用一个较低的架空容器,如std::array。例如: -

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因为这些分配在堆上 - 不必要的在你的情况。

0

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

+0

你能举个例子吗,设置可见度? – Andre

+0

只需遍历列表中的每个元素,并为每个元素使用'setVisible(true)'或'show'。 – owacoder