Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将qwidget添加到qlist<;qwidget>;_C++_Qt_Qt4 - Fatal编程技术网

C++ 如何将qwidget添加到qlist<;qwidget>;

C++ 如何将qwidget添加到qlist<;qwidget>;,c++,qt,qt4,C++,Qt,Qt4,我有几个小部件,比如 QLineEdit m_namePoiFilter; QLineEdit m_ID_MSSIPoiFilter; 我想将它们添加到QWidget列表中,然后将它们全部设置为可见 我做了 QList<QWidget> m_PoiFilterWidgets; 定义QWidgets的QObject是不可复制的。这意味着您必须将它们存储在一个列表中,作为指向小部件的指针(即QList)。您需要通过指针保存它们,并且应

我有几个小部件,比如

QLineEdit           m_namePoiFilter;
QLineEdit           m_ID_MSSIPoiFilter;
我想将它们添加到QWidget列表中,然后将它们全部设置为可见

我做了

QList<QWidget>      m_PoiFilterWidgets;

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

您需要通过指针保存它们,并且应该使用开销较低的容器,如
std::array
。例如:

class Foo {
   QLineEdit m_namePoiFilter;
   QLineEdit m_ID_MSSIPoiFilter;
   std::array<QLineEdit*, 2> const m_edits = {&m_namePoiFilter, &m_ID_MSSIPoiFilter};
};
class-Foo{
QLineEdit m_名称过滤器;
QLineEdit m_ID_MSSipofilter;
数组常量m_edits={&m_namePoiFilter,&m_ID_MSSIPoiFilter};
};
通过构造,此代码不会受到悬空指针的影响:
m_edits
将在构造小部件之后构造,并在销毁小部件之前销毁:因此其内容始终有效


我会避免使用
QList
/
QVector
,因为它们在堆上分配—在您的情况下是不必要的。

您可以演示一个示例,设置可见性吗?只需迭代列表中的每个元素,并对每个元素使用
setVisible(true)
show
class Foo {
   QLineEdit m_namePoiFilter;
   QLineEdit m_ID_MSSIPoiFilter;
   std::array<QLineEdit*, 2> const m_edits = {&m_namePoiFilter, &m_ID_MSSIPoiFilter};
};