LINUX.ORG.RU

Расположить QLabel над группой других QLabel

 , ,


0

2

Нужно: 3 QLabel, объединённые под контролем горизонтального Layout, а поверх них один QLabel шириной как три фоновых (да ещё и высотой где-то как треть фоновых).

Пытаюсь сделать это различными комбинациями Layout'ов в QtDesigner, но безрезультатно. В принципе, если так невозможно, меня вполне устроит и чисто программный способ.

QML не предлагать — я приличный прикладной программист :)

Опыта с Qt у меня нет, так что я могу не знать что-то тривиальное.

Подскажите, пожалуйста, как выстроить иерархию лейаутов.

Deleted

Нужно: 3 QLabel, объединённые под контролем горизонтального Layout, а поверх них один QLabel шириной как три фоновых

Нет, не так. Нужно что-то другое. Что именно? Текст поверх трёх блоков текста? Или, может, не текст, а картинки? Не привязывайся к конкретному решению, описывай более высокоуровневую задачу

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

Мне нужен текст поверх трёх блоков текста. В любом случае мне нужно расположить виджет над группой других виджетов. Куда уж высокоуровненней (хм, ну и слово)?

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

Куда уж высокоуровненней (хм, ну и слово)?
Мне нужен текст поверх трёх блоков текста

Вот именно сюда. Тебе не нужно реализовывать это таким костыльным способом, как размещением одного виджета поверх других. Надо просто сделать свой класс, наследовавшись от QWidget, и переопределить метод paintEvent(), в котором уже размещать текст так, как это тебе надо. Посмотри в сторону Analog clock example, там показывается, как рисовать на виджете. Текст рисуется классом QPainter, который также используется в указанном примере

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

Т.е. вместо размещения готовых виджетов в группу ты предлагаешь мне рисовать самому? Звучит странно.

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

Т.е. вместо размещения готовых виджетов в группу ты предлагаешь мне рисовать самому?

Да, потому что размещение текста поверх другого текста — это уже нетипичная задача. Скорее всего, её можно выполнить и готовыми виджетами, но реализация будет куда более странной и запутанной, чем так. Если хочешь поиграться с компоновкой, почитай про закрашивание виджетов, но я не рекомендую тратить на это время

XMs ★★★★★ ()
Последнее исправление: XMs (всего исправлений: 1)

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

Слова «поверх» и «над, сверху от них» — отличаются по смыслу, все-таки, что нужно? Лайоуты в QtDesigner плоские, виджеты могут пересекаться только если задавать им координаты руками, без лайоутов.

CrossFire ★★★★★ ()
Последнее исправление: CrossFire (всего исправлений: 1)

QML не предлагать — я приличный прикладной программист :)

Но ведь именно в QML эта задача тривиальна, почему нет?

fluorite ★★★★★ ()
Ответ на: комментарий от CrossFire

Слова «поверх» и «над, сверху от них» — отличаются по смыслу, все-таки, что нужно?

Поверх. Overlap. У меня, кажется, началось получаться когда я создал дочерние виджеты программно. Похоже что в Designer это сделать невозможно.

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

Вот так:

Виджет
    -> лейаут
        -> трилейбла
    -> ещеодинлейбл

Где «еще один лейбл» не вставлен в лейаут, а просто создан внутри виджета. Но нужно заоверрайдить ресайзивент виджета и в нем устанавливать (или пусть лейбл сам ставит, а тут только дернуть его метод или послать сигнал) нужные размеры и положение лейбла.

deep-purple ★★★★★ ()
Последнее исправление: deep-purple (всего исправлений: 2)
Ответ на: комментарий от unC0Rr

А пейнтером хреначить, как выше предлагают, решение получше? ))

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