Как создать динамический массив переменной длины из LineEdit(ов)?
Пишу программу на с++ в среде Qt, и создал массив состоящий из LineEdit(ов), программа выглядит так:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLineEdit>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
QLineEdit *myLine[3];
void MainWindow::on_pushButton_clicked()
{
for (int i = 0; i< 3; i++)
myLine[i] = new QLineEdit();
for (int i = 0; i < 3; i++)
ui->verticalLayout->addWidget(myLine[i]);
}
Но мне понадобилось сделать из LineEdit(ов) не статический а динамический массив переменной длины, я попробовал так:
int n = 10;
QLineEdit *myLine = new QLineEdit[n];
Теперь код выглядит:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLineEdit>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
int n = 10;
QLineEdit *myLine = new QLineEdit[n];
void MainWindow::on_pushButton_clicked()
{
for (int i = 0; i < 3; i++)
ui->verticalLayout->addWidget(myLine[i]);
}
Но я почему то получаю следующую ошибку:

Помогите пожалуйста, как я могу создать такой динамический массив с переменной длиной(мне нужен динамический так как по мере нажатия на кнопку мне нужно будет добавлять новые и новые элементы ,как это сделать? а почему у меня ошибка?
Ответы (1 шт):
Почему ошибка? потому что в массиве теперь хранятся не указатели на QLineEdit, а собственно они сами (Вы же заметили, что раньше Вам нужно было их создавать, а теперь нет?). Поэтому, вот эту строку
ui->verticalLayout->addWidget(myLine[i]);
перепишите так
ui->verticalLayout->addWidget(&myLine[i]);
и должно заработать.
Если Вам нужен массив, в который можно добавлять/удалять, то в 99% случаев Вам нужен QVector (если обычный c++, то std::vector).
Объявим себе
QVectpr<QLineEdit*> myEdits;
теперь добавить просто
QLineEdit* ed = new QLineEdit;
for (int i = 0; i < 100; i++) {
myEdits.append(ed);
ui->verticalLayout->addWidget(ed);
}
И в конце не забудьте правильно почистить или сделайте главное окно родителем.
Также сам вектор я бы делал приватной переменной класса.