2016-10-09 2 views
4

다양한 조건에 따라 동적 버튼 수 (라벨 포함)를 추가하는 GtkBox (가로)가 포함 된 애플리케이션을 작성하려고합니다. 지금 GtkBox가 (예를 들어) 600px 이상으로 커지지 않도록하고 싶습니다. 단추 레이블은 줄임표로 표시 할 수 있습니다.최대 너비 GtkContainer/GtkWidget

제 질문은이 문제를 해결할 수있는 일반적인 방법이 있습니까? 그렇지 않다면 크기를 지켜 볼 새로운 컨테이너 클래스를 만들어야한다고 생각합니다.

나는 적어도 지금까지 내가 말할 수있는, GTK (gtk+-3.0)

+0

크기 제한 방법에 대한 문서가 보이지 않습니다. 신호로 위젯 자체의 크기를 보면서 서브 클래 싱 할 필요없이 크기 요청을 사용하여 제한 할 수 있습니까? – oldtechaa

+0

그게 효과가있다 ... 나는 내일 이것을 시도 할 것이다! – mame98

+0

작동하면 대답하겠습니다. – oldtechaa

답변

2

위젯의 크기를 제한하는 간단한 방법은 없습니다에 대한 C API를 사용하고 있습니다. 할 수있는 일은 size-allocate 신호를 첨부하고 수신시 set_size_request으로 전화하는 것입니다.

크기 요청은 상황에 따라 명령이 아닌 요청 일 뿐이므로 원하는만큼 위젯을 축소 할 수는 없지만 이는 거의 발생하지 않습니다.

+2

일반적으로 'size-allocate'신호 처리기에서 릴레이 아웃을 강제하는 작업을 수행하는 것이 성능에 좋지 않습니다. 일반적으로 작동하지만 안정적인 솔루션에 착수하기 전에 위젯이 몇 번의 크기 반복을 거치는 추악한 "말더듬"을 유발할 수 있습니다. – ptomato

+0

@ptomato, 당신의 방법은 틀림없이 더 낫습니다. 예, 느린 GPU가있는 경우 특히 그렇습니다. 어쨌든 CSS 속성이 정말 필요한 것처럼 보입니다. – oldtechaa

3

GTK의 현재 버전에서는 직접 가능하지 않습니다. A max-width CSS 속성은 많은 요청이 있었기 때문에 향후 버전에서 구현 될 수 있습니다.

실제로 새 컨테이너 하위 클래스를 만드는 것입니다. 당신은 아마도 GtkBin을 상속 받아 간단하게 유지할 수 있으며, size_allocate 핸들러에서는 자식 위젯에 전달하기 전에 너비를 최대 값으로 고정합니다.

iOS가 이와 비슷한 방법으로 GTK의 제약 레이아웃 라이브러리 Emeus을 시험 사용해 볼 수도 있습니다.