2017-01-03 2 views
1

ich mehrere Widgets haben, wieWie QWidget hinzuzufügen QListe <qwidget>

QLineEdit   m_namePoiFilter; 
QLineEdit   m_ID_MSSIPoiFilter; 

ich sie auf eine Liste von qwidgets hinzufügen möchten, setzen Sie dann alle von ihnen sichtbar.

ich gemacht habe

QList<QWidget>  m_PoiFilterWidgets; 

aber ich kann nicht ein Element, um es wie

m_PoiFilterWidgets.push_back(m_namePoiFilter); 

Antwort

1

Sie müssen diese über einen Zeiger halten, und Sie sollten einen Container mit niedrigerem Overhead wie verwenden. Z.B .:

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

Dieser Code ist sicher von Zeigern durch Konstruktion baumelt: m_edits aufgebaut werden, nachdem die Widgets aufgebaut sind, und wird zerstört werden, bevor die Widgets zerstört werden: damit ihr Inhalt sind immer gültig.

Ich würde vermeiden QList/QVector wie diese auf dem Haufen zuweisen - unnötig in Ihrem Fall.

0

QObjects, aus denen QWidgets definiert sind, sind nicht kopierbar hinzufügen. Dies bedeutet, dass Sie sie in einer Liste als Zeiger auf Widgets speichern müssen (d. H. QList<QWidget *>).

+0

können Sie bitte ein Beispiel mit der Einstellung der Sichtbarkeit zeigen? – Andre

+0

Iterieren Sie einfach jedes Element in der Liste und verwenden Sie für jedes Element 'setVisible (true)' oder 'show'. – owacoder