![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
ruzik |
![]()
Сообщение
#1
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 23.2.2011 Из: Саратов Пользователь №: 2436 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
Здравствуйте, у меня есть QGridLayout, я хочу что бы при определенных обстоятельствах вся строка этого слоя стиралась и туда вставлялась одна кнопка, все вроде работает, кроме стирания, хотя по смыслу должно, документация по этому поводу вроде молчит
Заранее спасибо за помощь! |
|
|
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
ruzik |
![]()
Сообщение
#3
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 23.2.2011 Из: Саратов Пользователь №: 2436 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
QGridLayout - это слой-таблица и хочу что бы в одной строке, а именно первой все элементы стерлись(заменить на QWidget), а потом в один из этих элементов заменить на кнопку
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
ruzik |
![]()
Сообщение
#5
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 23.2.2011 Из: Саратов Пользователь №: 2436 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
Наверно, просто привык так.
Так все-таки как это сделать? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Если ты правильно переводишь - ты меньше путаешься.
Layout - компоновщик. В библиотеке Qt у всех контейнеров (а компоновщик и есть контейнер) есть метод содержащий слово take, он вынимает элемент из контейнера и возвращает указатель на него. Теперь контейнер перестаёт как-либо управлять этим элементом, программист должен следить за его жизнью сам. Т.е. можно поступить так, как описано тут так же пригодятся: QWidget * QLayoutItem::widget () [virtual] void QLayout::removeWidget ( QWidget * widget ) |
|
|
ruzik |
![]()
Сообщение
#7
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 23.2.2011 Из: Саратов Пользователь №: 2436 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
Попробовал, работает не так
У меня gidLayout в котором 2 строки и 10 столбцов и мне надо очищать всю вторую строку, но получается, как на картинках Может будет понятнее если я приведу весь нужный код, он добавляет в gridLayout виджеты с цветами = оттенками текущего, кончено код достаточно громосткий и надеюсь что получиться разобраться в проблеме не разбираясь в самом коде
RColorItemWidget это наследник обычного виджета(QWidget) Сообщение отредактировал ruzik - 28.6.2011, 11:16 |
|
|
silver47 |
![]()
Сообщение
#8
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
Поигрался с удалением виджетов. Виджеты то удаляются все хорошо, но от них остается "след". QHBoxLayout размещает на себе 4 QLabel'а c текстом. и по нажатии кнопки, предыдущие удаляются, новые создаются. Если размещать на лэйауте нечто иное, а не QLabel, например кнопки, то все работает как часы.
2ruzik: А нельзя обойтись без удаления виджета? почему бы не заменить у него такое свойство как ЦВЕТ? Сообщение отредактировал silver47 - 29.6.2011, 7:01 |
|
|
ruzik |
![]()
Сообщение
#9
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 23.2.2011 Из: Саратов Пользователь №: 2436 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
QGridLayout разбит как бы на 2 части:
верхняя, с цветами, там я и заменяю цвет и она работает нормально, без нижней части а нижняя часть - это часть стрелки, стрелка указывает на исходный цвет среди оттенков из которых были получены оттенки, соответственно при изменении текущего цвета, стрелка вполне возможно будет указывать на другой цвет, соответственно нужно удалить все элементы нижней части и вставить стрелку |
|
|
silver47 |
![]()
Сообщение
#10
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
Мда. Тоже самое. При удалении элемента, он удаляется, но остается, по прежнему, виден.
Сообщение отредактировал silver47 - 29.6.2011, 12:55 |
|
|
RazrFalcon |
![]()
Сообщение
#11
|
![]() Zombie Mod ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
silver47 |
![]()
Сообщение
#12
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
У меня есть решение, но оно "индусское". Подождем чего посоветуют более старшие товарищи
![]() |
|
|
MoPDoBoPoT |
![]()
Сообщение
#13
|
Участник ![]() ![]() Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: ![]() ![]() ![]() |
В иходниках самих тролей, при удалении виджета, я наблюдал связку вызовов hide() и deleteLater()
|
|
|
ruzik |
![]()
Сообщение
#14
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 23.2.2011 Из: Саратов Пользователь №: 2436 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
После долгих мучений проблема решена, я сделал это так:
если объект засунуть в другой layout или в другое место того же самого, то он удалиться из старого места автоматически, как ни странно решение оказалось довольно простым, хотя если честно всегда думал что в таком случае в другой layout будет засовываться копия объекта с указателем на него Большое всем спасибо за помощь! P.S. кстати deleteLater() то же работал но после 3-4 нажатий ничего не случалось, то есть объект добавлялся, а старый не удалялся, а после еще 2-3 кликов опять все работало |
|
|
Litkevich Yuriy |
![]()
Сообщение
#15
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
если объект засунуть в другой layout или в другое место того же самого, то он удалиться из старого места автоматически В Qt нет копирования наследников QObject, это не тривиальная задача.
... хотя если честно всегда думал что в таком случае в другой layout будет засовываться копия объекта |
|
|
vizir1989 |
![]()
Сообщение
#16
|
Студент ![]() Группа: Новичок Сообщений: 12 Регистрация: 14.5.2012 Пользователь №: 3377 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Я делал так, чтобы очистить полностью QGridLayout:
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 23.6.2025, 7:57 |