Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / QT как правильно удалять элементы управления? / 9 сообщений из 9, страница 1 из 1
21.04.2015, 07:22
    #38941207
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT как правильно удалять элементы управления?
есть дин.массив элементов управления
создаю следующим образом
Код: plaintext
1.
2.
3.
4.
5.
for(int i=0;i<but_count;i++){
  buttons.push_back(new QmyButton());
  buttons[i]->setParent(widget_1);
  ...
}



первый раз создается нормально
теперь удаляю
Код: plaintext
1.
2.
3.
4.
5.
6.
for(int i=but_count-1;i>=0;i--){
  buttons[i]->deleteLater();
  ...
}
//потом еще на всякий случай
buttons.clear();



после этого на widget_1 остаются эти элементы, хоть и не реагируют на события (клики и т.д.)

после этого меняется but_count и элементы строятся заново, и хорошо если до этого кол-во элементов было меньше, а вот когда до этого кол-во элементов было больше, а теперь меньше то остаются старые элементы(или их след).
...
Рейтинг: 0 / 0
21.04.2015, 07:51
    #38941215
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT как правильно удалять элементы управления?
Пока что решил следующим способом
перед тем как удалить, скрываю элемент

Код: plaintext
1.
2.
3.
4.
5.
for(int i=but_count-1;i>=0;i--){
  buttons[i].hide();
  buttons[i]->deleteLater();
  ...
}
...
Рейтинг: 0 / 0
21.04.2015, 12:02
    #38941453
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT как правильно удалять элементы управления?
Картежник, а если бы ты в конструктор QmyButton() передавал правильный парент, то тебе бы не пришлось думать за удаление, Qt сама бы удалила всё, при удалении этого парента.
...
Рейтинг: 0 / 0
21.04.2015, 12:58
    #38941513
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT как правильно удалять элементы управления?
egorych,
а я же парента не удаляю.
...
Рейтинг: 0 / 0
21.04.2015, 13:37
    #38941552
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT как правильно удалять элементы управления?
Картежник,

Поясни, что ты понимаешь под словом "удаляю".

После
buttons[i]->setParent(widget_1);

в QT удалять уже ничего не нужно.
...
Рейтинг: 0 / 0
21.04.2015, 14:00
    #38941582
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT как правильно удалять элементы управления?
MasterZivКартежник,

Поясни, что ты понимаешь под словом "удаляю".

После
buttons[i]->setParent(widget_1);

в QT удалять уже ничего не нужно.

после buttons[i]->setParent(widget_1);
я удаляю не widget_1, a buttons[i].

так как widget_1 мне еще нужен будет для последующих buttons[i] которые создам после.
...
Рейтинг: 0 / 0
21.04.2015, 15:09
    #38941657
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT как правильно удалять элементы управления?
Картежникпосле buttons[i]->setParent(widget_1);
я удаляю не widget_1, a buttons[i].

так как widget_1 мне еще нужен будет для последующих buttons[i] которые создам после.очень странный дизайн у тебя.
...
Рейтинг: 0 / 0
21.04.2015, 15:11
    #38941660
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT как правильно удалять элементы управления?
egorychКартежникпосле buttons[i]->setParent(widget_1);
я удаляю не widget_1, a buttons[i].

так как widget_1 мне еще нужен будет для последующих buttons[i] которые создам после.очень странный дизайн у тебя.

Согласен.
Зачем тогда setParent вызывать ?
Не вызывай тогда setParent, удаляй виджеты руками...
...
Рейтинг: 0 / 0
21.04.2015, 16:48
    #38941788
Картежник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT как правильно удалять элементы управления?
MasterZiv...
Согласен.
Зачем тогда setParent вызывать ?
Не вызывай тогда setParent, удаляй виджеты руками...
ну setParent указывается на каком виджете должен отображаться этот элемент,чтоб в воздухе не висел.
там получается так:
загружается список приложений, для каждого приложения создается своя кнопка, и все эти кнопки по порядку отображаются в widget_1 (через setParent), затем если вдруг список изменился, например категория другая, то там другой список загружается, и теперь для него создаются заново кнопки(старые кнопки удаляются), и опять же отображаются в widget_1.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / QT как правильно удалять элементы управления? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]