2016-06-07 9 views
0

Я понимаю, что система координат виджета локальна для виджета. 0,0 верхний левый.QWidget framing

Я хочу нарисовать рамку в виджетах, но с помощью QRect, возвращаемого rect(), приведет к тому, что справа и внизу не будут обрамлены.

Существует метод под названием «frameGeometry()», однако это возвращает QRect, который не находится в той же системе координат, что и виджет, но в системе соопределения родителей.

Есть ли способ получить прямоугольник рамки для виджета в локальной системе координат.

Я знаю, что могу перевести frameGeometry() или просто создать новый прямоугольник:

QRect(0, 0, width()-1, height()-1); 

Является ли это правильное, что нужно сделать?

ответ

0

Виджет, скорее всего, имеет отступы для своего холста, которые вам нужно будет вычесть из QRect виджета (который описывает общее пространство, которое потребляет виджет, включая прописку со всех сторон), чтобы получить прямоугольник, который вписывается в ваш виджет , Однако не уверен в специфическом синтаксисе.

+0

Благодарим вас, исследовав теперь, что есть методы, называемые contentsRect(), которые возвращают тот же прямоугольник, что и rect() и contentsMargins(), возвращаемые поля - все 0. – SPlatten

+0

Когда вы читаете QRect для своего виджета, он должен иметь нижняя точка. Являются ли его координаты меньше, чем высота и ширина виджета или же то же самое? Кроме того, теперь я помню, что проблема с моими виджетами VCL была ... У них была ContentPane, у которой был меньший ограничивающий прямоугольник, чем сам виджет. У ваших виджетов есть что-то вроде этого, т. Е. Они панельные? Не знаю, о каком QWidget вы имеете в виду, поэтому я не могу сам это проверить. Mine был элементом VCL, соответствующим QPushButton. – starturtle

+0

Вы совершенно правы, справа внизу находится 1 пиксельная вставка. – SPlatten