2016-10-09 3 views
4

Я пытаюсь написать приложение, содержащее GtkBox (Horizontal), где я добавляю динамическое количество кнопок (с метками) в зависимости от различных условий. Теперь Я хочу, чтобы GtkBox расти больше, чем (например) 600 пикселей. Этикетки кнопок могут быть эллипсированными.GtkContainer/GtkWidget Максимальная ширина

Итак, мой вопрос в том, есть ли общий способ решить эту проблему? Если нет, я думаю, что мне нужно будет создать новый класс контейнеров, который будет следить за его размером.

Я использую C API для GTK (gtk+-3.0)

+0

Я не вижу никакой документации о том, как ограничить размер. Не могли бы вы просто посмотреть размер самого виджета с сигналом и использовать запрос размера для его ограничения без необходимости подкласса? – oldtechaa

+0

Да, это может сработать ... Я попробую это завтра! – mame98

+0

Если это сработает, я отвечу. – oldtechaa

ответ

2

Там нет простого способа ограничить размер виджета, по крайней мере, насколько я могу судить. Что вы можете сделать, так это подключить к сигналу size-allocate и позвонить по номеру set_size_request при получении.

Поскольку запросы размера - это запросы, а не команды, в зависимости от обстоятельств вы не сможете уменьшить размер виджета столько, сколько хотите, но это должно быть редко.

+2

Как правило, плохо для производительности делать что-то, что заставляет ретранслятор внутри обработчика сигнала размера. Обычно это работает, но может вызвать уродливое «заикание», когда виджеты перескакивают через несколько итераций по размеру, прежде чем приземлиться на устойчивое решение. – ptomato

+0

@ptomato, ваш метод определенно может быть лучше, да, особенно в случаях с медленными графическими процессорами. В любом случае, похоже, нам действительно нужно свойство CSS для него. – oldtechaa

3

Это невозможно напрямую с текущей версией GTK. Свойство CSS max-width может быть реализовано в будущей версии, так как на это было много запросов.

Что бы вы сделали, так это создать новый подкласс контейнера. Вероятно, вы могли бы наследовать от GtkBin, чтобы все было просто, а в вашем обработчике size_allocate просто зажимайте ширину до максимального значения, прежде чем передавать ее дочернему виджету.

Вы также можете попробовать Emeus, библиотеку макетов ограничений для GTK, похожую на то, как это будет делать iOS.

Смежные вопросы