如何将 qwidget 添加到 qlist<qwidget>
How to add qwidget to qlist<qwidget>
我有几个小部件,比如
QLineEdit m_namePoiFilter;
QLineEdit m_ID_MSSIPoiFilter;
我想将它们添加到 qwidget 列表中,然后将它们全部设置为可见。
我做了
QList<QWidget> m_PoiFilterWidgets;
但我无法像
一样向其中添加项目
m_PoiFilterWidgets.push_back(m_namePoiFilter);
从中定义 QWidget 的 QObject 是不可复制的。这意味着您必须将它们作为指向小部件的指针存储在列表中(即 QList<QWidget *>
)。
你需要通过一个指针来保存这些,你应该使用像 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
,因为这些分配在堆上 - 在您的情况下是不必要的。
我有几个小部件,比如
QLineEdit m_namePoiFilter;
QLineEdit m_ID_MSSIPoiFilter;
我想将它们添加到 qwidget 列表中,然后将它们全部设置为可见。
我做了
QList<QWidget> m_PoiFilterWidgets;
但我无法像
一样向其中添加项目m_PoiFilterWidgets.push_back(m_namePoiFilter);
从中定义 QWidget 的 QObject 是不可复制的。这意味着您必须将它们作为指向小部件的指针存储在列表中(即 QList<QWidget *>
)。
你需要通过一个指针来保存这些,你应该使用像 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
,因为这些分配在堆上 - 在您的情况下是不必要的。