2017-01-03 5 views
1

У меня есть несколько виджетов, какКак добавить QWidget в QList <qwidget>

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

QObjects, из которых определяются QWidgets, не являются копируемыми. Это означает, что вы должны хранить их в списке в качестве указателей на виджеты (т. Е. QList<QWidget *>).

+0

Можете ли вы показать пример, пожалуйста, с настройкой видимости? – Andre

+0

Просто перебирайте каждый элемент в списке, и для каждого элемента используйте 'setVisible (true)' или 'show'. – owacoder