在标头中定义QLineEdits数组

时间:2016-07-08 06:47:48

标签: arrays qt qlineedit

我试图在我的标题中定义QLineEdits的数组,但是我得到的错误

  

"为'编辑指定的存储类'。"

我有,

header.hh

private: extern QLineEdit edits[8];

source.cpp

   void source::setup()
{
QLineEdit edits[8] = { ui->edit1, ui->edit2, ... };
...
}

1 个答案:

答案 0 :(得分:2)

首先,忘掉extern。你不需要使用它。期。真。

"初始化"你为edits成员写的也是不正确的。我们处于C ++ 11时代,你可以指定一个初始化列表,这不是C所以你不应该使用裸C数组。

因此,您的成员定义应为

std::array<QLineEdit*, 2> m_edits;

你应该按如下方式分配:

m_edits = {{ ui.edit1, ui.edit2 }};

请注意,即使愚蠢的Qt Creator模板代码执行操作,您也不希望通过指针持有Ui::Setup。保持价值。

以下是一个完整的例子:

#include <QtWidgets>
#include <array>

// This is what uic would generate from a simple .ui file.
namespace Ui {
struct Source {
   QLineEdit * edit1, * edit2;
   void setupUi(QWidget * parent) {
      edit1 = new QLineEdit{parent};
      edit2 = new QLineEdit{parent};
   }
};
}

class Source : public QWidget {
   Ui::Source ui;
   std::array<QLineEdit*, 2> m_edits;
public:
   Source() {
      ui.setupUi(this);
      m_edits = {{ ui.edit1, ui.edit2 }};
      Q_ASSERT(m_edits[0] == ui.edit1);
      Q_ASSERT(m_edits[1] == ui.edit2);
   }
};

int main(int argc, char ** argv) {
  QApplication app{argc, argv};
  Source source;
  return 0;
}