LINUX.ORG.RU

Нужно ли делать delete для QCheckTableItem?


0

0

У меня есть QDialog, который содержит QTable. В ячейках этой QTable - не простой текст, а чекбоксы. Число ячеек не постоянное, оно определяется непосредственно перед отображением диалога. Поэтому я переопределил exec этого диалога и перед вызовом QDialog::exec(); в нём задаю число ячеек таблицы и создаю динамический массив CheckBoxes

CheckBoxes=(PQCheckTableItem*)malloc(MyTable.count()*sizeof(PQCheckTableItem));

после чего в цикле:

CheckBoxes[i]=new QCheckTableItem(MyTable,"...");

И всё работает.

Перед reject'ом этого QDialog'а я делаю, само собой, free(CheckBoxes);

Но возникает вопрос: надо ли делать перед этим и delete для всех CheckBoxes[i], я ведь их вроде бы создавал динамически?

Если я delete НЕ делаю, то всё работает. Если я его делаю, программа начинает сегфолтиться. Так надо делать или нет?

anonymous

Не нужно, они автоматически удалятся при удалинее QTable, а QTable автоматически удалится при удалении QDialog'а.

ero-sennin ★★
()

только free(CheckBoxes) сделать не забудь... А вообще лучше пользоваться для таких случаев контейнерами (QList, QMap, QHash)

LestorN
()
Ответ на: комментарий от LestorN

> лучше пользоваться для таких случаев контейнерами (QList, QMap, QHash)

расскажите темному и незнакомому с Qt человеку, в чем преимущества QList перед чем std::list, QMap перед std::map и т.д.? Зачем графическая библиотека таскает с собой свою систему контейнерных классов?

anonymous
()
Ответ на: комментарий от anonymous

хотябы по причине кроссплатформенности (реализация контейнеров везде одинаковая получается) + удобство использования вместе с foreach

LestorN
()
Ответ на: комментарий от LestorN

По первому пункту я промолчу, а по второму попрошу рассказать, что такое foreach, и привести пример его использования.

Будьте так добры.

anonymous
()
Ответ на: комментарий от anonymous

QList<QLineEdit *> = new QList<QLineEdit *>();

list.append(new QLineEdit());
list.append(new QLineEdit());
list.append(new QLineEdit());
list.append(new QLineEdit());

foreach(QLineEdit *le, list) {
qDebug() << le->text();
}

только в QT4

LestorN
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.