Russian Qt Forum
Ноябрь 27, 2024, 13:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как обрезать виджет?  (Прочитано 2835 раз)
sq_vasya
Гость
« : Август 11, 2010, 12:16 »

Всем привет.

Есть виджет верхнего уровня (Родитель), который содержит в себе Чайлд (если конкретно, это QLabel). Мне нужно, чтобы Чайлд показывался не полностью, а только его нижняя половина. При этом сам Чайлд должен находится в центре Родителя. Это очень упрощённый вариант реальной задчи.

Пробовал в этой связи юзать нечто вроде

Код:
void Widget::paintEvent(QPaintEvent* aEvent)
    {
    QPainter painter(this);
    QRect clippingRect( 100, 100, 100, 100 );
    painter.setClipRect( clippingRect );
    }

но необходимый результат получен не был, Чайлд как рисовался полностью, так и рисуется.

Пробовал юзать QLabel::setGeometry()  но таким образом можно обрезать только низ и справа. А мне нужно обрезать конкретно верх.

Подскажите пожалуйста, как решить эту задачу.

WBR
Записан
Marat(Qt)
Гость
« Ответ #1 : Август 11, 2010, 14:04 »

Можно перекрыть виджет другим виджетом(label с autoFillBackground например), но тут будут нюансы с лайотами, нюансы разрешимы, но разрешать их вам придется самостоятельно.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Август 11, 2010, 14:18 »

Не проверял но первое что приходит в голову: вставить "обрезаемый" виджет в другой, который меньше его. И менять координаты обрезаемого внутри его parent'а
Записан
whirlwind
Гость
« Ответ #3 : Август 11, 2010, 14:26 »

создать собственный layout, который будет выравнивать виджет так, как вам надо
Записан
sq_vasya
Гость
« Ответ #4 : Август 11, 2010, 14:48 »


Можно перекрыть виджет другим виджетом(label с autoFillBackground например), но тут будут нюансы с лайотами, нюансы разрешимы, но разрешать их вам придется самостоятельно.

Спасибо за ответ. Да, это можно использовать в конкретном и это будет работать корректно. В моём живом приложении реализовать это будет намного сложнее, т.к. там используется очень много виджетов и лэйаутов. Порядок отрисовки не всегда один и тот же и завист от входных данных. Я пробовал так делать (забыл указать в посте, т.к. счёл этот метод очень работоёмким и отложил его на случай, если вообще по другому никак не получиться).

Не проверял но первое что приходит в голову: вставить "обрезаемый" виджет в другой, который меньше его. И менять координаты обрезаемого внутри его parent'а

Просто, как всё гениальное. Это действительно работает. Проверил на тестовом приложении. Попробую вставить в рабочий проект, думаю, должно работать.

Всем спасибо огромное за помощь и советы.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 23.