我试图在我的标题中定义QLineEdits
的数组,但是我得到的错误
"为'编辑指定的存储类'。"
我有,
header.hh
private:
extern QLineEdit edits[8];
source.cpp
void source::setup()
{
QLineEdit edits[8] = { ui->edit1, ui->edit2, ... };
...
}
答案 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;
}