Название: QWidget::move() -- дети становятся невидимыми Отправлено: tillias от Февраль 08, 2007, 08:04 Здравствуйте!
Рзарабатываю виджет, который является контейнером ( экраном ) для болшого числа других ( 1000+ ). Указатели на детей хранятся в веторе: Код: class MyWidget { После того как я по очереди прохожусь по вектору и для каждого ребенка вызываю ::move(), дети становятся невидимыми :( Код: ... Что я делаю не так? Название: QWidget::move() -- дети становятся невидимыми Отправлено: goer от Февраль 08, 2007, 09:46 Возможно, когда создаешь детей(они же виджеты) не указываешь родителя?
Еще проверь передаешь ли указатель на родителя в конструкторе MyWidget() Надо что то типа такого: Код:
Может теперь, когда родители знают о своих детях, они смогут доставить им событие QPaintEvent и все заработает. Название: QWidget::move() -- дети становятся невидимыми Отправлено: tillias от Февраль 08, 2007, 09:54 Цитировать Может теперь, когда родители знают о своих детях, они смогут доставить им событие QPaintEvent и все заработает. Нет, с родителем все в порядке... Однако PaintEvent не перегружен у детей, так как они представляют собой простой потомок QLabel, на котором размещен QPixmap добавлено спустя 1 минуту: Вот как на родителя добавляется ребенок Код:
добавлено спустя 1 минуту: А вот конструктор ребенка Код:
Название: QWidget::move() -- дети становятся невидимыми Отправлено: goer от Февраль 08, 2007, 10:30 Проведи эксперимент: не используй QPixmap. Кроме того, судя по документации, когда ты устанавливаешь пиксмапу для лэйбела, то предыдущий контент стирается, поэтому строчка setText(tr("Test2")) не имеет смысла.
Ключевое слово normal я нашел только у класса QPalette, поэтому у меня солжилось впечатление что в данном контексте ты используешь его в другом смысле. Также как и highlighted. Вобщем мой тебе совет - добейся сначала перемещения лэйбелов просто с текстом. А вообще, если хочешь отображать картинки на форме, то лучше используй QFrame Название: QWidget::move() -- дети становятся невидимыми Отправлено: tillias от Февраль 08, 2007, 10:48 Цитировать Ключевое слово normal я нашел только у класса QPalette, поэтому у меня солжилось впечатление что в данном контексте ты используешь его в другом смысле. Также как и highlighted. Это просто имена пиксмапов, которые грузятся в компонент-ребенок. Цитировать Проведи эксперимент: не используй QPixmap. Все равно при попытке сделать move() компоненты пропадают Заметил одну вещь -- если у ребенка перегрузить paintEvent(), то компоненты не отображаются, даже в момент создания Название: QWidget::move() -- дети становятся невидимыми Отправлено: goer от Февраль 08, 2007, 10:55 Цитировать Все равно при попытке сделать move() компоненты пропадают Попробуй после move() вызвать update() Цитировать Заметил одну вещь -- если у ребенка перегрузить paintEvent(), то компоненты не отображаются, даже в момент создания Видимо это от того что в теле paintEvent() ребенка ты не вызываешь paintEvent() родителя (типа QLabel::paintEvent()) Название: QWidget::move() -- дети становятся невидимыми Отправлено: tillias от Февраль 08, 2007, 12:30 Цитировать Попробуй после move() вызвать update() Вставил update() куда только можно. Пропадают и все тут :( добавлено спустя 44 минуты: Есть одна зацепка: Код:
работает Код:
не работает Название: QWidget::move() -- дети становятся невидимыми Отправлено: Вудруф от Февраль 12, 2007, 09:45 У меня такое ощущение, что ты просто "не туда" их передвигаешь. Чему равны значения ix и iy в последнем случае?
|